[LLVMdev] LLVM assembly without basic block

Seung Jae Lee lee225 at uiuc.edu
Fri Jun 29 14:08:23 CDT 2007

Hello, guys.

I just wonder if there is any way to spit out LLVM assembly without any basic block division.
If I emit LLVM assembly for the following simple code:
void f_loop(long* c, long sz) {

   long i;
   for (i = 0; i < sz; i++) {
      long offset = i * sz;
      long* out = c + offset;
      out[i] = 0;
You know the LLVM assembly is printed out as follows for this code.
void %f_loop(int* %c, int %sz) {
        %sz = cast int %sz to uint              ; <uint> [#uses=1]
        %tmp18 = setgt int %sz, 0               ; <bool> [#uses=1]
        br bool %tmp18, label %bb, label %return

bb:             ; preds = %bb, %entry
        %indvar = phi uint [ 0, %entry ], [ %indvar.next, %bb ]         ; <uint> [#uses=2]
        %i.0.0 = cast uint %indvar to int               ; <int> [#uses=2]
        %tmp2 = mul int %i.0.0, %sz             ; <int> [#uses=1]
        %tmp4.sum = add int %tmp2, %i.0.0               ; <int> [#uses=1]
        %tmp7 = getelementptr int* %c, int %tmp4.sum            ; <int*> [#uses=1]
        store int 0, int* %tmp7
        %indvar.next = add uint %indvar, 1              ; <uint> [#uses=2]
        %exitcond = seteq uint %indvar.next, %sz                ; <bool> [#uses=1]
        br bool %exitcond, label %return, label %bb

return:         ; preds = %bb, %entry
        ret void
As you can see, there are three basic blocks composing this code.
Is there any way to get the assembly for this function without any basic block division?
I know this may be absurd but curious.

Seung Jae Lee

More information about the LLVMdev mailing list