294 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=arm-eabi %s -o - | FileCheck %s --check-prefix=CHECK-ARM3; RUN: llc -mtriple=thumb-eabi -mcpu=arm1156t2-s -mattr=+thumb2 %s -o - \4; RUN: | FileCheck %s --check-prefix=CHECK-THUMB25 6;; Check how immediates are handled in add/sub.7 8define i32 @sub0(i32 %0) {9; CHECK-ARM-LABEL: sub0:10; CHECK-ARM: @ %bb.0:11; CHECK-ARM-NEXT: sub r0, r0, #2312; CHECK-ARM-NEXT: mov pc, lr13;14; CHECK-THUMB2-LABEL: sub0:15; CHECK-THUMB2: @ %bb.0:16; CHECK-THUMB2-NEXT: subs r0, #2317; CHECK-THUMB2-NEXT: bx lr18 %2 = sub i32 %0, 2319 ret i32 %220}21 22define i32 @sub1(i32 %0) {23; CHECK-ARM-LABEL: sub1:24; CHECK-ARM: @ %bb.0:25; CHECK-ARM-NEXT: ldr r1, .LCPI1_026; CHECK-ARM-NEXT: add r0, r0, r127; CHECK-ARM-NEXT: mov pc, lr28; CHECK-ARM-NEXT: .p2align 229; CHECK-ARM-NEXT: @ %bb.1:30; CHECK-ARM-NEXT: .LCPI1_0:31; CHECK-ARM-NEXT: .long 4294836225 @ 0xfffe000132;33; CHECK-THUMB2-LABEL: sub1:34; CHECK-THUMB2: @ %bb.0:35; CHECK-THUMB2-NEXT: movs r1, #136; CHECK-THUMB2-NEXT: movt r1, #6553437; CHECK-THUMB2-NEXT: add r0, r138; CHECK-THUMB2-NEXT: bx lr39 %2 = sub i32 %0, 13107140 ret i32 %241}42 43define i32 @sub2(i32 %0) {44; CHECK-ARM-LABEL: sub2:45; CHECK-ARM: @ %bb.0:46; CHECK-ARM-NEXT: sub r0, r0, #3547; CHECK-ARM-NEXT: sub r0, r0, #896048; CHECK-ARM-NEXT: mov pc, lr49;50; CHECK-THUMB2-LABEL: sub2:51; CHECK-THUMB2: @ %bb.0:52; CHECK-THUMB2-NEXT: movw r1, #899553; CHECK-THUMB2-NEXT: subs r0, r0, r154; CHECK-THUMB2-NEXT: bx lr55 %2 = sub i32 %0, 899556 ret i32 %257}58 59define i32 @sub3(i32 %0) {60; CHECK-ARM-LABEL: sub3:61; CHECK-ARM: @ %bb.0:62; CHECK-ARM-NEXT: ldr r1, .LCPI3_063; CHECK-ARM-NEXT: add r0, r0, r164; CHECK-ARM-NEXT: mov pc, lr65; CHECK-ARM-NEXT: .p2align 266; CHECK-ARM-NEXT: @ %bb.1:67; CHECK-ARM-NEXT: .LCPI3_0:68; CHECK-ARM-NEXT: .long 4292870571 @ 0xffe001ab69;70; CHECK-THUMB2-LABEL: sub3:71; CHECK-THUMB2: @ %bb.0:72; CHECK-THUMB2-NEXT: movw r1, #42773; CHECK-THUMB2-NEXT: movt r1, #6550474; CHECK-THUMB2-NEXT: add r0, r175; CHECK-THUMB2-NEXT: bx lr76 %2 = sub i32 %0, 209672577 ret i32 %278}79 80define i32 @sub4(i32 %0) {81; CHECK-ARM-LABEL: sub4:82; CHECK-ARM: @ %bb.0:83; CHECK-ARM-NEXT: ldr r1, .LCPI4_084; CHECK-ARM-NEXT: add r0, r0, r185; CHECK-ARM-NEXT: mov pc, lr86; CHECK-ARM-NEXT: .p2align 287; CHECK-ARM-NEXT: @ %bb.1:88; CHECK-ARM-NEXT: .LCPI4_0:89; CHECK-ARM-NEXT: .long 4286505147 @ 0xff7ee0bb90;91; CHECK-THUMB2-LABEL: sub4:92; CHECK-THUMB2: @ %bb.0:93; CHECK-THUMB2-NEXT: movw r1, #5753194; CHECK-THUMB2-NEXT: movt r1, #6540695; CHECK-THUMB2-NEXT: add r0, r196; CHECK-THUMB2-NEXT: bx lr97 %2 = sub i32 %0, 846214998 ret i32 %299}100define i32 @add0(i32 %0) {101; CHECK-ARM-LABEL: add0:102; CHECK-ARM: @ %bb.0:103; CHECK-ARM-NEXT: add r0, r0, #23104; CHECK-ARM-NEXT: mov pc, lr105;106; CHECK-THUMB2-LABEL: add0:107; CHECK-THUMB2: @ %bb.0:108; CHECK-THUMB2-NEXT: adds r0, #23109; CHECK-THUMB2-NEXT: bx lr110 %2 = add i32 %0, 23111 ret i32 %2112}113 114define i32 @add1(i32 %0) {115; CHECK-ARM-LABEL: add1:116; CHECK-ARM: @ %bb.0:117; CHECK-ARM-NEXT: ldr r1, .LCPI6_0118; CHECK-ARM-NEXT: add r0, r0, r1119; CHECK-ARM-NEXT: mov pc, lr120; CHECK-ARM-NEXT: .p2align 2121; CHECK-ARM-NEXT: @ %bb.1:122; CHECK-ARM-NEXT: .LCPI6_0:123; CHECK-ARM-NEXT: .long 131071 @ 0x1ffff124;125; CHECK-THUMB2-LABEL: add1:126; CHECK-THUMB2: @ %bb.0:127; CHECK-THUMB2-NEXT: movw r1, #65535128; CHECK-THUMB2-NEXT: movt r1, #1129; CHECK-THUMB2-NEXT: add r0, r1130; CHECK-THUMB2-NEXT: bx lr131 %2 = add i32 %0, 131071132 ret i32 %2133}134 135define i32 @add2(i32 %0) {136; CHECK-ARM-LABEL: add2:137; CHECK-ARM: @ %bb.0:138; CHECK-ARM-NEXT: add r0, r0, #8960139; CHECK-ARM-NEXT: add r0, r0, #2293760140; CHECK-ARM-NEXT: mov pc, lr141;142; CHECK-THUMB2-LABEL: add2:143; CHECK-THUMB2: @ %bb.0:144; CHECK-THUMB2-NEXT: add.w r0, r0, #2293760145; CHECK-THUMB2-NEXT: add.w r0, r0, #8960146; CHECK-THUMB2-NEXT: bx lr147 %2 = add i32 %0, 2302720148 ret i32 %2149}150 151define i32 @add3(i32 %0) {152; CHECK-ARM-LABEL: add3:153; CHECK-ARM: @ %bb.0:154; CHECK-ARM-NEXT: ldr r1, .LCPI8_0155; CHECK-ARM-NEXT: add r0, r0, r1156; CHECK-ARM-NEXT: mov pc, lr157; CHECK-ARM-NEXT: .p2align 2158; CHECK-ARM-NEXT: @ %bb.1:159; CHECK-ARM-NEXT: .LCPI8_0:160; CHECK-ARM-NEXT: .long 2096725 @ 0x1ffe55161;162; CHECK-THUMB2-LABEL: add3:163; CHECK-THUMB2: @ %bb.0:164; CHECK-THUMB2-NEXT: movw r1, #65109165; CHECK-THUMB2-NEXT: movt r1, #31166; CHECK-THUMB2-NEXT: add r0, r1167; CHECK-THUMB2-NEXT: bx lr168 %2 = add i32 %0, 2096725169 ret i32 %2170}171 172define i32 @add4(i32 %0) {173; CHECK-ARM-LABEL: add4:174; CHECK-ARM: @ %bb.0:175; CHECK-ARM-NEXT: ldr r1, .LCPI9_0176; CHECK-ARM-NEXT: add r0, r0, r1177; CHECK-ARM-NEXT: mov pc, lr178; CHECK-ARM-NEXT: .p2align 2179; CHECK-ARM-NEXT: @ %bb.1:180; CHECK-ARM-NEXT: .LCPI9_0:181; CHECK-ARM-NEXT: .long 8462149 @ 0x811f45182;183; CHECK-THUMB2-LABEL: add4:184; CHECK-THUMB2: @ %bb.0:185; CHECK-THUMB2-NEXT: movw r1, #8005186; CHECK-THUMB2-NEXT: movt r1, #129187; CHECK-THUMB2-NEXT: add r0, r1188; CHECK-THUMB2-NEXT: bx lr189 %2 = add i32 %0, 8462149190 ret i32 %2191}192 193define i32 @orr0(i32 %0) {194; CHECK-ARM-LABEL: orr0:195; CHECK-ARM: @ %bb.0:196; CHECK-ARM-NEXT: orr r0, r0, #8960197; CHECK-ARM-NEXT: orr r0, r0, #2293760198; CHECK-ARM-NEXT: mov pc, lr199;200; CHECK-THUMB2-LABEL: orr0:201; CHECK-THUMB2: @ %bb.0:202; CHECK-THUMB2-NEXT: orr r0, r0, #2293760203; CHECK-THUMB2-NEXT: orr r0, r0, #8960204; CHECK-THUMB2-NEXT: bx lr205 %2 = or i32 %0, 2302720206 ret i32 %2207}208 209define i32 @orr1(i32 %0) {210; CHECK-ARM-LABEL: orr1:211; CHECK-ARM: @ %bb.0:212; CHECK-ARM-NEXT: orr r0, r0, #23213; CHECK-ARM-NEXT: mov pc, lr214;215; CHECK-THUMB2-LABEL: orr1:216; CHECK-THUMB2: @ %bb.0:217; CHECK-THUMB2-NEXT: orr r0, r0, #23218; CHECK-THUMB2-NEXT: bx lr219 %2 = or i32 %0, 23220 ret i32 %2221}222 223define i32 @orr2(i32 %0) {224; CHECK-ARM-LABEL: orr2:225; CHECK-ARM: @ %bb.0:226; CHECK-ARM-NEXT: ldr r1, .LCPI12_0227; CHECK-ARM-NEXT: orr r0, r0, r1228; CHECK-ARM-NEXT: mov pc, lr229; CHECK-ARM-NEXT: .p2align 2230; CHECK-ARM-NEXT: @ %bb.1:231; CHECK-ARM-NEXT: .LCPI12_0:232; CHECK-ARM-NEXT: .long 131071 @ 0x1ffff233;234; CHECK-THUMB2-LABEL: orr2:235; CHECK-THUMB2: @ %bb.0:236; CHECK-THUMB2-NEXT: movw r1, #65535237; CHECK-THUMB2-NEXT: movt r1, #1238; CHECK-THUMB2-NEXT: orrs r0, r1239; CHECK-THUMB2-NEXT: bx lr240 %2 = or i32 %0, 131071241 ret i32 %2242}243 244define i32 @eor0(i32 %0) {245; CHECK-ARM-LABEL: eor0:246; CHECK-ARM: @ %bb.0:247; CHECK-ARM-NEXT: eor r0, r0, #8960248; CHECK-ARM-NEXT: eor r0, r0, #2293760249; CHECK-ARM-NEXT: mov pc, lr250;251; CHECK-THUMB2-LABEL: eor0:252; CHECK-THUMB2: @ %bb.0:253; CHECK-THUMB2-NEXT: eor r0, r0, #2293760254; CHECK-THUMB2-NEXT: eor r0, r0, #8960255; CHECK-THUMB2-NEXT: bx lr256 %2 = xor i32 %0, 2302720257 ret i32 %2258}259 260define i32 @eor1(i32 %0) {261; CHECK-ARM-LABEL: eor1:262; CHECK-ARM: @ %bb.0:263; CHECK-ARM-NEXT: eor r0, r0, #23264; CHECK-ARM-NEXT: mov pc, lr265;266; CHECK-THUMB2-LABEL: eor1:267; CHECK-THUMB2: @ %bb.0:268; CHECK-THUMB2-NEXT: eor r0, r0, #23269; CHECK-THUMB2-NEXT: bx lr270 %2 = xor i32 %0, 23271 ret i32 %2272}273 274define i32 @eor2(i32 %0) {275; CHECK-ARM-LABEL: eor2:276; CHECK-ARM: @ %bb.0:277; CHECK-ARM-NEXT: ldr r1, .LCPI15_0278; CHECK-ARM-NEXT: eor r0, r0, r1279; CHECK-ARM-NEXT: mov pc, lr280; CHECK-ARM-NEXT: .p2align 2281; CHECK-ARM-NEXT: @ %bb.1:282; CHECK-ARM-NEXT: .LCPI15_0:283; CHECK-ARM-NEXT: .long 131071 @ 0x1ffff284;285; CHECK-THUMB2-LABEL: eor2:286; CHECK-THUMB2: @ %bb.0:287; CHECK-THUMB2-NEXT: movw r1, #65535288; CHECK-THUMB2-NEXT: movt r1, #1289; CHECK-THUMB2-NEXT: eors r0, r1290; CHECK-THUMB2-NEXT: bx lr291 %2 = xor i32 %0, 131071292 ret i32 %2293}294