[LLVMdev] Simple question

Bill Wendling wendling at apple.com
Fri Mar 15 15:39:34 PDT 2013


On Mar 15, 2013, at 3:36 PM, Bill Wendling <wendling at apple.com> wrote:

> On Mar 15, 2013, at 3:08 PM, James Courtier-Dutton <james.dutton at gmail.com> wrote:
> 
>> Hi,
>> 
>> I think this is a very simple question, and it must just be missing something.
>> 
>> I am looking for find out how to assign a constant integer value to
>> the variable in llvm ir.
>> 
>> The following returns 12, and %var2 = 12.
>> ; ModuleID = 't.c'
>> target datalayout =
>> "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
>> target triple = "x86_64-pc-linux-gnu"
>> 
>> define i32 @test() nounwind readnone {
>> %var1 = xor i32 0, 0
>> %var2 = add i32 %var1, 12
>> ret i32 %var2
>> }
>> 
>> Why can't I do?:
>> ; ModuleID = 't.c'
>> target datalayout =
>> "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
>> target triple = "x86_64-pc-linux-gnu"
>> 
>> define i32 @test() nounwind readnone {
>> %var2 = 12
>> ret i32 %var2
>> }
>> 
> Because an assignment of a constant to a variable isn't an instruction. Or more to the point, the right-hand-side of "%var2 = 12" isn't an instruction.
> 
>> What is the simplest way to make %var2 = 12   ?
>> 
> I think that this should work:
> 
> define i32 @test() {
>  %v = bitcast i32 42 to i32
>  ret i32 %v
> }
> 
Note that for your (trivial) example, this works:

define i32 @test() {
  ret i32 42
}

That's because the 'ret' is an instruction with the argument 'i32 42'.

-bw





More information about the llvm-dev mailing list