brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.9 KiB · 543ddcd Raw
404 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=armv7a-none-none-eabi -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK7A3; RUN: llc -mtriple=thumbv6m-none-none-eabi -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK6M4; RUN: llc -mtriple=thumbv7m-none-none-eabi -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK7M5; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK81M6 7define i32 @xori64i32(i64 %a) {8; CHECK7A-LABEL: xori64i32:9; CHECK7A:       @ %bb.0:10; CHECK7A-NEXT:    mvn r0, #-214748364811; CHECK7A-NEXT:    eor r0, r0, r1, asr #3112; CHECK7A-NEXT:    bx lr13;14; CHECK6M-LABEL: xori64i32:15; CHECK6M:       @ %bb.0:16; CHECK6M-NEXT:    asrs r1, r1, #3117; CHECK6M-NEXT:    ldr r0, .LCPI0_018; CHECK6M-NEXT:    eors r0, r119; CHECK6M-NEXT:    bx lr20; CHECK6M-NEXT:    .p2align 221; CHECK6M-NEXT:  @ %bb.1:22; CHECK6M-NEXT:  .LCPI0_0:23; CHECK6M-NEXT:    .long 2147483647 @ 0x7fffffff24;25; CHECK7M-LABEL: xori64i32:26; CHECK7M:       @ %bb.0:27; CHECK7M-NEXT:    mvn r0, #-214748364828; CHECK7M-NEXT:    eor.w r0, r0, r1, asr #3129; CHECK7M-NEXT:    bx lr30;31; CHECK81M-LABEL: xori64i32:32; CHECK81M:       @ %bb.0:33; CHECK81M-NEXT:    mvn r0, #-214748364834; CHECK81M-NEXT:    eor.w r0, r0, r1, asr #3135; CHECK81M-NEXT:    bx lr36  %shr4 = ashr i64 %a, 6337  %conv5 = trunc i64 %shr4 to i3238  %xor = xor i32 %conv5, 214748364739  ret i32 %xor40}41 42define i64 @selecti64i64(i64 %a) {43; CHECK7A-LABEL: selecti64i64:44; CHECK7A:       @ %bb.0:45; CHECK7A-NEXT:    mvn r0, #-214748364846; CHECK7A-NEXT:    eor r0, r0, r1, asr #3147; CHECK7A-NEXT:    asr r1, r1, #3148; CHECK7A-NEXT:    bx lr49;50; CHECK6M-LABEL: selecti64i64:51; CHECK6M:       @ %bb.0:52; CHECK6M-NEXT:    asrs r1, r1, #3153; CHECK6M-NEXT:    ldr r0, .LCPI1_054; CHECK6M-NEXT:    eors r0, r155; CHECK6M-NEXT:    bx lr56; CHECK6M-NEXT:    .p2align 257; CHECK6M-NEXT:  @ %bb.1:58; CHECK6M-NEXT:  .LCPI1_0:59; CHECK6M-NEXT:    .long 2147483647 @ 0x7fffffff60;61; CHECK7M-LABEL: selecti64i64:62; CHECK7M:       @ %bb.0:63; CHECK7M-NEXT:    mvn r0, #-214748364864; CHECK7M-NEXT:    eor.w r0, r0, r1, asr #3165; CHECK7M-NEXT:    asrs r1, r1, #3166; CHECK7M-NEXT:    bx lr67;68; CHECK81M-LABEL: selecti64i64:69; CHECK81M:       @ %bb.0:70; CHECK81M-NEXT:    mvn r0, #-214748364871; CHECK81M-NEXT:    eor.w r0, r0, r1, asr #3172; CHECK81M-NEXT:    asrs r1, r1, #3173; CHECK81M-NEXT:    bx lr74  %c = icmp sgt i64 %a, -175  %s = select i1 %c, i64 2147483647, i64 -214748364876  ret i64 %s77}78 79define i32 @selecti64i32(i64 %a) {80; CHECK7A-LABEL: selecti64i32:81; CHECK7A:       @ %bb.0:82; CHECK7A-NEXT:    mvn r0, #-214748364883; CHECK7A-NEXT:    eor r0, r0, r1, asr #3184; CHECK7A-NEXT:    bx lr85;86; CHECK6M-LABEL: selecti64i32:87; CHECK6M:       @ %bb.0:88; CHECK6M-NEXT:    ldr r0, .LCPI2_089; CHECK6M-NEXT:    cmp r1, #090; CHECK6M-NEXT:    bge .LBB2_291; CHECK6M-NEXT:  @ %bb.1:92; CHECK6M-NEXT:    adds r0, r0, #193; CHECK6M-NEXT:  .LBB2_2:94; CHECK6M-NEXT:    bx lr95; CHECK6M-NEXT:    .p2align 296; CHECK6M-NEXT:  @ %bb.3:97; CHECK6M-NEXT:  .LCPI2_0:98; CHECK6M-NEXT:    .long 2147483647 @ 0x7fffffff99;100; CHECK7M-LABEL: selecti64i32:101; CHECK7M:       @ %bb.0:102; CHECK7M-NEXT:    mvn r0, #-2147483648103; CHECK7M-NEXT:    eor.w r0, r0, r1, asr #31104; CHECK7M-NEXT:    bx lr105;106; CHECK81M-LABEL: selecti64i32:107; CHECK81M:       @ %bb.0:108; CHECK81M-NEXT:    mvn r0, #-2147483648109; CHECK81M-NEXT:    eor.w r0, r0, r1, asr #31110; CHECK81M-NEXT:    bx lr111  %c = icmp sgt i64 %a, -1112  %s = select i1 %c, i32 2147483647, i32 -2147483648113  ret i32 %s114}115 116define i64 @selecti32i64(i32 %a) {117; CHECK7A-LABEL: selecti32i64:118; CHECK7A:       @ %bb.0:119; CHECK7A-NEXT:    mvn r1, #-2147483648120; CHECK7A-NEXT:    eor r2, r1, r0, asr #31121; CHECK7A-NEXT:    asr r1, r0, #31122; CHECK7A-NEXT:    mov r0, r2123; CHECK7A-NEXT:    bx lr124;125; CHECK6M-LABEL: selecti32i64:126; CHECK6M:       @ %bb.0:127; CHECK6M-NEXT:    asrs r1, r0, #31128; CHECK6M-NEXT:    ldr r0, .LCPI3_0129; CHECK6M-NEXT:    eors r0, r1130; CHECK6M-NEXT:    bx lr131; CHECK6M-NEXT:    .p2align 2132; CHECK6M-NEXT:  @ %bb.1:133; CHECK6M-NEXT:  .LCPI3_0:134; CHECK6M-NEXT:    .long 2147483647 @ 0x7fffffff135;136; CHECK7M-LABEL: selecti32i64:137; CHECK7M:       @ %bb.0:138; CHECK7M-NEXT:    mvn r1, #-2147483648139; CHECK7M-NEXT:    eor.w r2, r1, r0, asr #31140; CHECK7M-NEXT:    asrs r1, r0, #31141; CHECK7M-NEXT:    mov r0, r2142; CHECK7M-NEXT:    bx lr143;144; CHECK81M-LABEL: selecti32i64:145; CHECK81M:       @ %bb.0:146; CHECK81M-NEXT:    mvn r1, #-2147483648147; CHECK81M-NEXT:    eor.w r2, r1, r0, asr #31148; CHECK81M-NEXT:    asrs r1, r0, #31149; CHECK81M-NEXT:    mov r0, r2150; CHECK81M-NEXT:    bx lr151  %c = icmp sgt i32 %a, -1152  %s = select i1 %c, i64 2147483647, i64 -2147483648153  ret i64 %s154}155 156 157 158define i8 @xori32i8(i32 %a) {159; CHECK7A-LABEL: xori32i8:160; CHECK7A:       @ %bb.0:161; CHECK7A-NEXT:    mov r1, #84162; CHECK7A-NEXT:    eor r0, r1, r0, asr #31163; CHECK7A-NEXT:    bx lr164;165; CHECK6M-LABEL: xori32i8:166; CHECK6M:       @ %bb.0:167; CHECK6M-NEXT:    asrs r1, r0, #31168; CHECK6M-NEXT:    movs r0, #84169; CHECK6M-NEXT:    eors r0, r1170; CHECK6M-NEXT:    bx lr171;172; CHECK7M-LABEL: xori32i8:173; CHECK7M:       @ %bb.0:174; CHECK7M-NEXT:    movs r1, #84175; CHECK7M-NEXT:    eor.w r0, r1, r0, asr #31176; CHECK7M-NEXT:    bx lr177;178; CHECK81M-LABEL: xori32i8:179; CHECK81M:       @ %bb.0:180; CHECK81M-NEXT:    movs r1, #84181; CHECK81M-NEXT:    eor.w r0, r1, r0, asr #31182; CHECK81M-NEXT:    bx lr183  %shr4 = ashr i32 %a, 31184  %conv5 = trunc i32 %shr4 to i8185  %xor = xor i8 %conv5, 84186  ret i8 %xor187}188 189define i32 @selecti32i32(i32 %a) {190; CHECK7A-LABEL: selecti32i32:191; CHECK7A:       @ %bb.0:192; CHECK7A-NEXT:    mov r1, #84193; CHECK7A-NEXT:    eor r0, r1, r0, asr #31194; CHECK7A-NEXT:    bx lr195;196; CHECK6M-LABEL: selecti32i32:197; CHECK6M:       @ %bb.0:198; CHECK6M-NEXT:    asrs r1, r0, #31199; CHECK6M-NEXT:    movs r0, #84200; CHECK6M-NEXT:    eors r0, r1201; CHECK6M-NEXT:    bx lr202;203; CHECK7M-LABEL: selecti32i32:204; CHECK7M:       @ %bb.0:205; CHECK7M-NEXT:    movs r1, #84206; CHECK7M-NEXT:    eor.w r0, r1, r0, asr #31207; CHECK7M-NEXT:    bx lr208;209; CHECK81M-LABEL: selecti32i32:210; CHECK81M:       @ %bb.0:211; CHECK81M-NEXT:    movs r1, #84212; CHECK81M-NEXT:    eor.w r0, r1, r0, asr #31213; CHECK81M-NEXT:    bx lr214  %c = icmp sgt i32 %a, -1215  %s = select i1 %c, i32 84, i32 -85216  ret i32 %s217}218 219define i8 @selecti32i8(i32 %a) {220; CHECK7A-LABEL: selecti32i8:221; CHECK7A:       @ %bb.0:222; CHECK7A-NEXT:    mov r1, #84223; CHECK7A-NEXT:    eor r0, r1, r0, asr #31224; CHECK7A-NEXT:    bx lr225;226; CHECK6M-LABEL: selecti32i8:227; CHECK6M:       @ %bb.0:228; CHECK6M-NEXT:    asrs r1, r0, #31229; CHECK6M-NEXT:    movs r0, #84230; CHECK6M-NEXT:    eors r0, r1231; CHECK6M-NEXT:    bx lr232;233; CHECK7M-LABEL: selecti32i8:234; CHECK7M:       @ %bb.0:235; CHECK7M-NEXT:    movs r1, #84236; CHECK7M-NEXT:    eor.w r0, r1, r0, asr #31237; CHECK7M-NEXT:    bx lr238;239; CHECK81M-LABEL: selecti32i8:240; CHECK81M:       @ %bb.0:241; CHECK81M-NEXT:    movs r1, #84242; CHECK81M-NEXT:    eor.w r0, r1, r0, asr #31243; CHECK81M-NEXT:    bx lr244  %c = icmp sgt i32 %a, -1245  %s = select i1 %c, i8 84, i8 -85246  ret i8 %s247}248 249define i32 @selecti8i32(i8 %a) {250; CHECK7A-LABEL: selecti8i32:251; CHECK7A:       @ %bb.0:252; CHECK7A-NEXT:    sxtb r0, r0253; CHECK7A-NEXT:    mov r1, #84254; CHECK7A-NEXT:    eor r0, r1, r0, asr #7255; CHECK7A-NEXT:    bx lr256;257; CHECK6M-LABEL: selecti8i32:258; CHECK6M:       @ %bb.0:259; CHECK6M-NEXT:    sxtb r0, r0260; CHECK6M-NEXT:    asrs r1, r0, #7261; CHECK6M-NEXT:    movs r0, #84262; CHECK6M-NEXT:    eors r0, r1263; CHECK6M-NEXT:    bx lr264;265; CHECK7M-LABEL: selecti8i32:266; CHECK7M:       @ %bb.0:267; CHECK7M-NEXT:    sxtb r0, r0268; CHECK7M-NEXT:    movs r1, #84269; CHECK7M-NEXT:    eor.w r0, r1, r0, asr #7270; CHECK7M-NEXT:    bx lr271;272; CHECK81M-LABEL: selecti8i32:273; CHECK81M:       @ %bb.0:274; CHECK81M-NEXT:    sxtb r0, r0275; CHECK81M-NEXT:    movs r1, #84276; CHECK81M-NEXT:    eor.w r0, r1, r0, asr #7277; CHECK81M-NEXT:    bx lr278  %c = icmp sgt i8 %a, -1279  %s = select i1 %c, i32 84, i32 -85280  ret i32 %s281}282 283define i32 @icmpasreq(i32 %input, i32 %a, i32 %b) {284; CHECK7A-LABEL: icmpasreq:285; CHECK7A:       @ %bb.0:286; CHECK7A-NEXT:    cmp r0, #0287; CHECK7A-NEXT:    movpl r1, r2288; CHECK7A-NEXT:    mov r0, r1289; CHECK7A-NEXT:    bx lr290;291; CHECK6M-LABEL: icmpasreq:292; CHECK6M:       @ %bb.0:293; CHECK6M-NEXT:    cmp r0, #0294; CHECK6M-NEXT:    bmi .LBB8_2295; CHECK6M-NEXT:  @ %bb.1:296; CHECK6M-NEXT:    mov r1, r2297; CHECK6M-NEXT:  .LBB8_2:298; CHECK6M-NEXT:    mov r0, r1299; CHECK6M-NEXT:    bx lr300;301; CHECK7M-LABEL: icmpasreq:302; CHECK7M:       @ %bb.0:303; CHECK7M-NEXT:    cmp r0, #0304; CHECK7M-NEXT:    it pl305; CHECK7M-NEXT:    movpl r1, r2306; CHECK7M-NEXT:    mov r0, r1307; CHECK7M-NEXT:    bx lr308;309; CHECK81M-LABEL: icmpasreq:310; CHECK81M:       @ %bb.0:311; CHECK81M-NEXT:    cmp r0, #0312; CHECK81M-NEXT:    csel r0, r1, r2, mi313; CHECK81M-NEXT:    bx lr314  %sh = ashr i32 %input, 31315  %c = icmp eq i32 %sh, -1316  %s = select i1 %c, i32 %a, i32 %b317  ret i32 %s318}319 320define i32 @icmpasrne(i32 %input, i32 %a, i32 %b) {321; CHECK7A-LABEL: icmpasrne:322; CHECK7A:       @ %bb.0:323; CHECK7A-NEXT:    cmn r0, #1324; CHECK7A-NEXT:    movle r1, r2325; CHECK7A-NEXT:    mov r0, r1326; CHECK7A-NEXT:    bx lr327;328; CHECK6M-LABEL: icmpasrne:329; CHECK6M:       @ %bb.0:330; CHECK6M-NEXT:    cmp r0, #0331; CHECK6M-NEXT:    bge .LBB9_2332; CHECK6M-NEXT:  @ %bb.1:333; CHECK6M-NEXT:    mov r1, r2334; CHECK6M-NEXT:  .LBB9_2:335; CHECK6M-NEXT:    mov r0, r1336; CHECK6M-NEXT:    bx lr337;338; CHECK7M-LABEL: icmpasrne:339; CHECK7M:       @ %bb.0:340; CHECK7M-NEXT:    cmp.w r0, #-1341; CHECK7M-NEXT:    it le342; CHECK7M-NEXT:    movle r1, r2343; CHECK7M-NEXT:    mov r0, r1344; CHECK7M-NEXT:    bx lr345;346; CHECK81M-LABEL: icmpasrne:347; CHECK81M:       @ %bb.0:348; CHECK81M-NEXT:    cmp.w r0, #-1349; CHECK81M-NEXT:    csel r0, r1, r2, gt350; CHECK81M-NEXT:    bx lr351  %sh = ashr i32 %input, 31352  %c = icmp ne i32 %sh, -1353  %s = select i1 %c, i32 %a, i32 %b354  ret i32 %s355}356 357define i32 @oneusecmp(i32 %a, i32 %b, i32 %d) {358; CHECK7A-LABEL: oneusecmp:359; CHECK7A:       @ %bb.0:360; CHECK7A-NEXT:    cmp r0, #0361; CHECK7A-NEXT:    movmi r1, r2362; CHECK7A-NEXT:    mov r2, #127363; CHECK7A-NEXT:    eor r0, r2, r0, asr #31364; CHECK7A-NEXT:    add r0, r0, r1365; CHECK7A-NEXT:    bx lr366;367; CHECK6M-LABEL: oneusecmp:368; CHECK6M:       @ %bb.0:369; CHECK6M-NEXT:    cmp r0, #0370; CHECK6M-NEXT:    bmi .LBB10_2371; CHECK6M-NEXT:  @ %bb.1:372; CHECK6M-NEXT:    mov r2, r1373; CHECK6M-NEXT:  .LBB10_2:374; CHECK6M-NEXT:    asrs r0, r0, #31375; CHECK6M-NEXT:    movs r1, #127376; CHECK6M-NEXT:    eors r1, r0377; CHECK6M-NEXT:    adds r0, r1, r2378; CHECK6M-NEXT:    bx lr379;380; CHECK7M-LABEL: oneusecmp:381; CHECK7M:       @ %bb.0:382; CHECK7M-NEXT:    cmp r0, #0383; CHECK7M-NEXT:    it mi384; CHECK7M-NEXT:    movmi r1, r2385; CHECK7M-NEXT:    movs r2, #127386; CHECK7M-NEXT:    eor.w r0, r2, r0, asr #31387; CHECK7M-NEXT:    add r0, r1388; CHECK7M-NEXT:    bx lr389;390; CHECK81M-LABEL: oneusecmp:391; CHECK81M:       @ %bb.0:392; CHECK81M-NEXT:    cmp r0, #0393; CHECK81M-NEXT:    csel r1, r2, r1, mi394; CHECK81M-NEXT:    movs r2, #127395; CHECK81M-NEXT:    eor.w r0, r2, r0, asr #31396; CHECK81M-NEXT:    add r0, r1397; CHECK81M-NEXT:    bx lr398  %c = icmp sle i32 %a, -1399  %s = select i1 %c, i32 -128, i32 127400  %s2 = select i1 %c, i32 %d, i32 %b401  %x = add i32 %s, %s2402  ret i32 %x403}404