Test case for X86 inline asm constraint 'I'
[oota-llvm.git] / test / CodeGen / X86 / 2007-03-16-InlineAsm.ll
1 ; RUN: llvm-as < %s | llc -march=x86
2
3 ; ModuleID = 'a.bc'
4 implementation   ; Functions:
5
6 define i32 @foo(i32 %A, i32 %B) {
7 entry:
8         %A_addr = alloca i32            ; <i32*> [#uses=2]
9         %B_addr = alloca i32            ; <i32*> [#uses=1]
10         %retval = alloca i32, align 4           ; <i32*> [#uses=2]
11         %tmp = alloca i32, align 4              ; <i32*> [#uses=2]
12         %ret = alloca i32, align 4              ; <i32*> [#uses=2]
13         "alloca point" = bitcast i32 0 to i32           ; <i32> [#uses=0]
14         store i32 %A, i32* %A_addr
15         store i32 %B, i32* %B_addr
16         %tmp1 = load i32* %A_addr               ; <i32> [#uses=1]
17         %tmp2 = call i32 asm "roll $1,$0", "=r,I,0,~{dirflag},~{fpsr},~{flags},~{cc}"( i32 7, i32 %tmp1 )               ; <i32> [#uses=1]
18         store i32 %tmp2, i32* %ret
19         %tmp3 = load i32* %ret          ; <i32> [#uses=1]
20         store i32 %tmp3, i32* %tmp
21         %tmp4 = load i32* %tmp          ; <i32> [#uses=1]
22         store i32 %tmp4, i32* %retval
23         br label %return
24
25 return:         ; preds = %entry
26         %retval5 = load i32* %retval            ; <i32> [#uses=1]
27         ret i32 %retval5
28 }