2010-11-13 00:25:06 +00:00
|
|
|
; RUN: true
|
|
|
|
; RUN: true
|
2010-07-21 22:26:11 +00:00
|
|
|
|
|
|
|
; Very basic fast-isel functionality.
|
|
|
|
|
2010-09-08 19:32:34 +00:00
|
|
|
define i32 @add(i32 %a, i32 %b) nounwind {
|
2010-07-21 22:26:11 +00:00
|
|
|
entry:
|
|
|
|
%a.addr = alloca i32, align 4
|
|
|
|
%b.addr = alloca i32, align 4
|
|
|
|
store i32 %a, i32* %a.addr
|
|
|
|
store i32 %b, i32* %b.addr
|
|
|
|
%tmp = load i32* %a.addr
|
|
|
|
%tmp1 = load i32* %b.addr
|
|
|
|
%add = add nsw i32 %tmp, %tmp1
|
|
|
|
ret i32 %add
|
|
|
|
}
|
2010-08-25 07:57:29 +00:00
|
|
|
|
|
|
|
define i32* @foo(i32* %p, i32* %q, i32** %z) nounwind {
|
|
|
|
entry:
|
|
|
|
%r = load i32* %p
|
|
|
|
%s = load i32* %q
|
|
|
|
%y = load i32** %z
|
|
|
|
br label %fast
|
|
|
|
|
|
|
|
fast:
|
|
|
|
%t0 = add i32 %r, %s
|
|
|
|
%t1 = mul i32 %t0, %s
|
|
|
|
%t2 = sub i32 %t1, %s
|
|
|
|
%t3 = and i32 %t2, %s
|
|
|
|
%t4 = xor i32 %t3, 3
|
|
|
|
%t5 = xor i32 %t4, %s
|
|
|
|
%t6 = add i32 %t5, 2
|
|
|
|
%t7 = getelementptr i32* %y, i32 1
|
|
|
|
%t8 = getelementptr i32* %t7, i32 %t6
|
|
|
|
br label %exit
|
|
|
|
|
|
|
|
exit:
|
|
|
|
ret i32* %t8
|
|
|
|
}
|