1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=thumb-eabi -mcpu=arm1156t2-s -mattr=+thumb2 %s -o - | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Test #<const> 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; var 2.1 - 0x00ab00ab 6*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_1_ok_1(i32 %lhs) { 7*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_1_ok_1: 8*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #11206827 9*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 11206827 ; 0x00ab00ab 10*9880d681SAndroid Build Coastguard Worker ret i32 %ret 11*9880d681SAndroid Build Coastguard Worker} 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_1_ok_2(i32 %lhs) { 14*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_1_ok_2: 15*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #11206656 16*9880d681SAndroid Build Coastguard Worker;CHECK: adds r0, #187 17*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 11206843 ; 0x00ab00bb 18*9880d681SAndroid Build Coastguard Worker ret i32 %ret 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_1_ok_3(i32 %lhs) { 22*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_1_ok_3: 23*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #11206827 24*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #16777216 25*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 27984043 ; 0x01ab00ab 26*9880d681SAndroid Build Coastguard Worker ret i32 %ret 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_1_ok_4(i32 %lhs) { 30*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_1_ok_4: 31*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #16777472 32*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #11206827 33*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 27984299 ; 0x01ab01ab 34*9880d681SAndroid Build Coastguard Worker ret i32 %ret 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_1_fail_1(i32 %lhs) { 38*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_1_fail_1: 39*9880d681SAndroid Build Coastguard Worker;CHECK: movw r1, #43777 40*9880d681SAndroid Build Coastguard Worker;CHECK: movt r1, #427 41*9880d681SAndroid Build Coastguard Worker;CHECK: add r0, r1 42*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 28027649 ; 0x01abab01 43*9880d681SAndroid Build Coastguard Worker ret i32 %ret 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Worker; var 2.2 - 0xab00ab00 47*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_2_ok_1(i32 %lhs) { 48*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_2_ok_1: 49*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #-1426019584 50*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 2868947712 ; 0xab00ab00 51*9880d681SAndroid Build Coastguard Worker ret i32 %ret 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_2_ok_2(i32 %lhs) { 55*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_2_ok_2: 56*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #2868903936 57*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #47616 58*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 2868951552 ; 0xab00ba00 59*9880d681SAndroid Build Coastguard Worker ret i32 %ret 60*9880d681SAndroid Build Coastguard Worker} 61*9880d681SAndroid Build Coastguard Worker 62*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_2_ok_3(i32 %lhs) { 63*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_2_ok_3: 64*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #2868947712 65*9880d681SAndroid Build Coastguard Worker;CHECK: adds r0, #16 66*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 2868947728 ; 0xab00ab10 67*9880d681SAndroid Build Coastguard Worker ret i32 %ret 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_2_ok_4(i32 %lhs) { 71*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_2_ok_4: 72*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #2868947712 73*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #1048592 74*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 2869996304 ; 0xab10ab10 75*9880d681SAndroid Build Coastguard Worker ret i32 %ret 76*9880d681SAndroid Build Coastguard Worker} 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_2_fail_1(i32 %lhs) { 79*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_2_fail_1: 80*9880d681SAndroid Build Coastguard Worker;CHECK: movw r1, #43792 81*9880d681SAndroid Build Coastguard Worker;CHECK: movt r1, #4267 82*9880d681SAndroid Build Coastguard Worker;CHECK: add r0, r1 83*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 279685904 ; 0x10abab10 84*9880d681SAndroid Build Coastguard Worker ret i32 %ret 85*9880d681SAndroid Build Coastguard Worker} 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Worker; var 2.3 - 0xabababab 88*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_3_ok_1(i32 %lhs) { 89*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_3_ok_1: 90*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #-1414812757 91*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 2880154539 ; 0xabababab 92*9880d681SAndroid Build Coastguard Worker ret i32 %ret 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_3_fail_1(i32 %lhs) { 96*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_3_fail_1: 97*9880d681SAndroid Build Coastguard Worker;CHECK: movw r1, #43962 98*9880d681SAndroid Build Coastguard Worker;CHECK: movt r1, #43947 99*9880d681SAndroid Build Coastguard Worker;CHECK: add r0, r1 100*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 2880154554 ; 0xabababba 101*9880d681SAndroid Build Coastguard Worker ret i32 %ret 102*9880d681SAndroid Build Coastguard Worker} 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_3_fail_2(i32 %lhs) { 105*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_3_fail_2: 106*9880d681SAndroid Build Coastguard Worker;CHECK: movw r1, #47787 107*9880d681SAndroid Build Coastguard Worker;CHECK: movt r1, #43947 108*9880d681SAndroid Build Coastguard Worker;CHECK: add r0, r1 109*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 2880158379 ; 0xababbaab 110*9880d681SAndroid Build Coastguard Worker ret i32 %ret 111*9880d681SAndroid Build Coastguard Worker} 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_3_fail_3(i32 %lhs) { 114*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_3_fail_3: 115*9880d681SAndroid Build Coastguard Worker;CHECK: movw r1, #43947 116*9880d681SAndroid Build Coastguard Worker;CHECK: movt r1, #43962 117*9880d681SAndroid Build Coastguard Worker;CHECK: add r0, r1 118*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 2881137579 ; 0xabbaabab 119*9880d681SAndroid Build Coastguard Worker ret i32 %ret 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var2_3_fail_4(i32 %lhs) { 123*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var2_3_fail_4: 124*9880d681SAndroid Build Coastguard Worker;CHECK: movw r1, #43947 125*9880d681SAndroid Build Coastguard Worker;CHECK: movt r1, #47787 126*9880d681SAndroid Build Coastguard Worker;CHECK: add r0, r1 127*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 3131812779 ; 0xbaababab 128*9880d681SAndroid Build Coastguard Worker ret i32 %ret 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Worker; var 3 - 0x0F000000 132*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var3_1_ok_1(i32 %lhs) { 133*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var3_1_ok_1: 134*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #251658240 135*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 251658240 ; 0x0F000000 136*9880d681SAndroid Build Coastguard Worker ret i32 %ret 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var3_2_ok_1(i32 %lhs) { 140*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var3_2_ok_1: 141*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #3948544 142*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 3948544 ; 0b00000000001111000100000000000000 143*9880d681SAndroid Build Coastguard Worker ret i32 %ret 144*9880d681SAndroid Build Coastguard Worker} 145*9880d681SAndroid Build Coastguard Worker 146*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var3_2_ok_2(i32 %lhs) { 147*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var3_2_ok_2: 148*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #2097152 149*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #1843200 150*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 3940352 ; 0b00000000001111000010000000000000 151*9880d681SAndroid Build Coastguard Worker ret i32 %ret 152*9880d681SAndroid Build Coastguard Worker} 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var3_3_ok_1(i32 %lhs) { 155*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var3_3_ok_1: 156*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #258 157*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 258 ; 0b00000000000000000000000100000010 158*9880d681SAndroid Build Coastguard Worker ret i32 %ret 159*9880d681SAndroid Build Coastguard Worker} 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard Workerdefine i32 @t2_const_var3_4_ok_1(i32 %lhs) { 162*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: t2_const_var3_4_ok_1: 163*9880d681SAndroid Build Coastguard Worker;CHECK: add.w r0, r0, #-268435456 164*9880d681SAndroid Build Coastguard Worker %ret = add i32 %lhs, 4026531840 ; 0xF0000000 165*9880d681SAndroid Build Coastguard Worker ret i32 %ret 166*9880d681SAndroid Build Coastguard Worker} 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Workerdefine i32 @t2MOVTi16_ok_1(i32 %a) { 169*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t2MOVTi16_ok_1: 170*9880d681SAndroid Build Coastguard Worker; CHECK: movt r0, #1234 171*9880d681SAndroid Build Coastguard Worker %1 = and i32 %a, 65535 172*9880d681SAndroid Build Coastguard Worker %2 = shl i32 1234, 16 173*9880d681SAndroid Build Coastguard Worker %3 = or i32 %1, %2 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Worker ret i32 %3 176*9880d681SAndroid Build Coastguard Worker} 177*9880d681SAndroid Build Coastguard Worker 178*9880d681SAndroid Build Coastguard Workerdefine i32 @t2MOVTi16_test_1(i32 %a) { 179*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t2MOVTi16_test_1: 180*9880d681SAndroid Build Coastguard Worker; CHECK: movt r0, #1234 181*9880d681SAndroid Build Coastguard Worker %1 = shl i32 255, 8 182*9880d681SAndroid Build Coastguard Worker %2 = shl i32 1234, 8 183*9880d681SAndroid Build Coastguard Worker %3 = or i32 %1, 255 ; This gives us 0xFFFF in %3 184*9880d681SAndroid Build Coastguard Worker %4 = shl i32 %2, 8 ; This gives us (1234 << 16) in %4 185*9880d681SAndroid Build Coastguard Worker %5 = and i32 %a, %3 186*9880d681SAndroid Build Coastguard Worker %6 = or i32 %4, %5 187*9880d681SAndroid Build Coastguard Worker 188*9880d681SAndroid Build Coastguard Worker ret i32 %6 189*9880d681SAndroid Build Coastguard Worker} 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Workerdefine i32 @t2MOVTi16_test_2(i32 %a) { 192*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t2MOVTi16_test_2: 193*9880d681SAndroid Build Coastguard Worker; CHECK: movt r0, #1234 194*9880d681SAndroid Build Coastguard Worker %1 = shl i32 255, 8 195*9880d681SAndroid Build Coastguard Worker %2 = shl i32 1234, 8 196*9880d681SAndroid Build Coastguard Worker %3 = or i32 %1, 255 ; This gives us 0xFFFF in %3 197*9880d681SAndroid Build Coastguard Worker %4 = shl i32 %2, 6 198*9880d681SAndroid Build Coastguard Worker %5 = and i32 %a, %3 199*9880d681SAndroid Build Coastguard Worker %6 = shl i32 %4, 2 ; This gives us (1234 << 16) in %6 200*9880d681SAndroid Build Coastguard Worker %7 = or i32 %5, %6 201*9880d681SAndroid Build Coastguard Worker 202*9880d681SAndroid Build Coastguard Worker ret i32 %7 203*9880d681SAndroid Build Coastguard Worker} 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Workerdefine i32 @t2MOVTi16_test_3(i32 %a) { 206*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t2MOVTi16_test_3: 207*9880d681SAndroid Build Coastguard Worker; CHECK: movt r0, #1234 208*9880d681SAndroid Build Coastguard Worker %1 = shl i32 255, 8 209*9880d681SAndroid Build Coastguard Worker %2 = shl i32 1234, 8 210*9880d681SAndroid Build Coastguard Worker %3 = or i32 %1, 255 ; This gives us 0xFFFF in %3 211*9880d681SAndroid Build Coastguard Worker %4 = shl i32 %2, 6 212*9880d681SAndroid Build Coastguard Worker %5 = and i32 %a, %3 213*9880d681SAndroid Build Coastguard Worker %6 = shl i32 %4, 2 ; This gives us (1234 << 16) in %6 214*9880d681SAndroid Build Coastguard Worker %7 = lshr i32 %6, 6 215*9880d681SAndroid Build Coastguard Worker %8 = shl i32 %7, 6 216*9880d681SAndroid Build Coastguard Worker %9 = or i32 %5, %8 217*9880d681SAndroid Build Coastguard Worker 218*9880d681SAndroid Build Coastguard Worker ret i32 %8 219*9880d681SAndroid Build Coastguard Worker} 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Worker; 171 = 0x000000ab 222*9880d681SAndroid Build Coastguard Workerdefine i32 @f1(i32 %a) { 223*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 224*9880d681SAndroid Build Coastguard Worker; CHECK: movs r0, #171 225*9880d681SAndroid Build Coastguard Worker %tmp = add i32 0, 171 226*9880d681SAndroid Build Coastguard Worker ret i32 %tmp 227*9880d681SAndroid Build Coastguard Worker} 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Worker; 1179666 = 0x00120012 230*9880d681SAndroid Build Coastguard Workerdefine i32 @f2(i32 %a) { 231*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 232*9880d681SAndroid Build Coastguard Worker; CHECK: mov.w r0, #1179666 233*9880d681SAndroid Build Coastguard Worker %tmp = add i32 0, 1179666 234*9880d681SAndroid Build Coastguard Worker ret i32 %tmp 235*9880d681SAndroid Build Coastguard Worker} 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Worker; 872428544 = 0x34003400 238*9880d681SAndroid Build Coastguard Workerdefine i32 @f3(i32 %a) { 239*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 240*9880d681SAndroid Build Coastguard Worker; CHECK: mov.w r0, #872428544 241*9880d681SAndroid Build Coastguard Worker %tmp = add i32 0, 872428544 242*9880d681SAndroid Build Coastguard Worker ret i32 %tmp 243*9880d681SAndroid Build Coastguard Worker} 244*9880d681SAndroid Build Coastguard Worker 245*9880d681SAndroid Build Coastguard Worker; 1448498774 = 0x56565656 246*9880d681SAndroid Build Coastguard Workerdefine i32 @f4(i32 %a) { 247*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 248*9880d681SAndroid Build Coastguard Worker; CHECK: mov.w r0, #1448498774 249*9880d681SAndroid Build Coastguard Worker %tmp = add i32 0, 1448498774 250*9880d681SAndroid Build Coastguard Worker ret i32 %tmp 251*9880d681SAndroid Build Coastguard Worker} 252*9880d681SAndroid Build Coastguard Worker 253*9880d681SAndroid Build Coastguard Worker; 66846720 = 0x03fc0000 254*9880d681SAndroid Build Coastguard Workerdefine i32 @f5(i32 %a) { 255*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5: 256*9880d681SAndroid Build Coastguard Worker; CHECK: mov.w r0, #66846720 257*9880d681SAndroid Build Coastguard Worker %tmp = add i32 0, 66846720 258*9880d681SAndroid Build Coastguard Worker ret i32 %tmp 259*9880d681SAndroid Build Coastguard Worker} 260*9880d681SAndroid Build Coastguard Worker 261*9880d681SAndroid Build Coastguard Workerdefine i32 @f6(i32 %a) { 262*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: f6: 263*9880d681SAndroid Build Coastguard Worker;CHECK: movw r0, #65535 264*9880d681SAndroid Build Coastguard Worker %tmp = add i32 0, 65535 265*9880d681SAndroid Build Coastguard Worker ret i32 %tmp 266*9880d681SAndroid Build Coastguard Worker} 267