On some ARM cpus, flags setting movs with shifter operand, i.e. lsl, lsr, asr,
[oota-llvm.git] / test / CodeGen / Thumb2 / thumb2-orn2.ll
1 ; RUN: llc < %s -march=thumb -mattr=+thumb2 | FileCheck %s
2
3
4 ; 0x000000bb = 187
5 define i32 @f1(i32 %a) {
6     %tmp1 = xor i32 4294967295, 187
7     %tmp2 = or i32 %a, %tmp1
8     ret i32 %tmp2
9 }
10 ; CHECK: f1:
11 ; CHECK:        orn     r0, r0, #187
12
13 ; 0x00aa00aa = 11141290
14 define i32 @f2(i32 %a) {
15     %tmp1 = xor i32 4294967295, 11141290 
16     %tmp2 = or i32 %a, %tmp1
17     ret i32 %tmp2
18 }
19 ; CHECK: f2:
20 ; CHECK:        orn     r0, r0, #11141290
21
22 ; 0xcc00cc00 = 3422604288
23 define i32 @f3(i32 %a) {
24     %tmp1 = xor i32 4294967295, 3422604288
25     %tmp2 = or i32 %a, %tmp1
26     ret i32 %tmp2
27 }
28 ; CHECK: f3:
29 ; CHECK:        orn     r0, r0, #-872363008
30
31 ; 0x00110000 = 1114112
32 define i32 @f5(i32 %a) {
33     %tmp1 = xor i32 4294967295, 1114112
34     %tmp2 = or i32 %a, %tmp1
35     ret i32 %tmp2
36 }
37 ; CHECK: f5:
38 ; CHECK:        orn     r0, r0, #1114112