Getting variable names in LLVM IR

Hi,
I'm a newbie in LLVM environment.

I'm trying to generate the LLVM IR of a c file using clang. The command line argument I'm passing is as :
"clang -O0 -S -emit-llvm test.c -c -o test.ll"

It is generating the LLVM IR properly but I'm not getting the variable names. e.g,

for the c file :
#include <stdio.h>

int main()
{
     int x;
     int y;
     x = 2;
     y =4;
     int z = x*y;

     if(x==y)
     {
         z = x*y;
         return z;
     } else
     {
         z = x+y;
     }
     printf("z = %d", z);
     return 0;
}

the corresponding llvm IR is :

; Function Attrs: nounwind uwtable
define i32 @main() #0 {
   %1 = alloca i32, align 4
   %2 = alloca i32, align 4
   %3 = alloca i32, align 4
   %4 = alloca i32, align 4
   store i32 0, i32* %1, align 4
   store i32 2, i32* %2, align 4
   store i32 4, i32* %3, align 4
   %5 = load i32, i32* %2, align 4
   %6 = load i32, i32* %3, align 4
   %7 = mul nsw i32 %5, %6
   store i32 %7, i32* %4, align 4
   %8 = load i32, i32* %2, align 4
   %9 = load i32, i32* %3, align 4
   %10 = icmp eq i32 %8, %9
   br i1 %10, label %11, label %16

; <label>:11: ; preds = %0
   %12 = load i32, i32* %2, align 4
   %13 = load i32, i32* %3, align 4
   %14 = mul nsw i32 %12, %13
   store i32 %14, i32* %4, align 4
   %15 = load i32, i32* %4, align 4
   store i32 %15, i32* %1, align 4
   br label %21

; <label>:16: ; preds = %0
   %17 = load i32, i32* %2, align 4
   %18 = load i32, i32* %3, align 4
   %19 = add nsw i32 %17, %18
   store i32 %19, i32* %4, align 4
   br label %20

; <label>:20: ; preds = %16
   store i32 0, i32* %1, align 4
   br label %21

; <label>:21: ; preds = %20, %11
   %22 = load i32, i32* %1, align 4
   ret i32 %22
}

I wanted to get the variables in their original name i.e, x,y,z instead of %1,%2,%3, etc.
Is it possible to do so?

Thanks.

Hi,
I'm a newbie in LLVM environment.

I'm trying to generate the LLVM IR of a c file using clang. The command line argument I'm passing is as :
"clang -O0 -S -emit-llvm test.c -c -o test.ll"

If you add "-###" to the end of the command-line you can see the raw -cc1 command for the compilation. Depending on your version of clang, you should see "-discard-value-names" in there. If you repeat the -cc1 command yourself, skipping that option, you'll get variable names.

If you're compiling clang yourself (it doesn't sound like you are, but just in case), this -discard-value-names option is *not* passed by default in asserts builds.

Thanks for the reply.

Indeed, I was not building "clang" from source. I'm going to build it now.

Just curious to know if it is possible to negate the option "discard-value-names" like "no-discard-value-names", etc. such that I don't have to copy paste the whole thing again and again. Couldn't find any such option in "clang -cc1 --help".

No, but there probably should be. Same with similar options like -disable-free and -disable-llvm-verifier.

Feel free to file a bug at bugs.llvm.org and CC me.