213 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 42target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32:64"3target triple = "powerpc64-unknown-linux-gnu"4; RUN: llc -ppc-gpr-icmps=all -verify-machineinstrs -O2 -ppc-asm-full-reg-names -mcpu=pwr7 -mattr=-isel < %s | FileCheck %s --implicit-check-not isel5 6define signext i32 @testExpandISELToIfElse(i32 signext %i, i32 signext %j) {7; CHECK-LABEL: testExpandISELToIfElse:8; CHECK: # %bb.0: # %entry9; CHECK-NEXT: cmpwi r3, 010; CHECK-NEXT: ble cr0, .LBB0_211; CHECK-NEXT: # %bb.1:12; CHECK-NEXT: addi r4, r3, 113; CHECK-NEXT: .LBB0_2: # %entry14; CHECK-NEXT: extsw r3, r415; CHECK-NEXT: blr16entry:17 %cmp = icmp sgt i32 %i, 018 %add = add nsw i32 %i, 119 %cond = select i1 %cmp, i32 %add, i32 %j20 ret i32 %cond21 22}23 24define signext i32 @testExpandISELToIf(i32 signext %i, i32 signext %j) {25; CHECK-LABEL: testExpandISELToIf:26; CHECK: # %bb.0: # %entry27; CHECK-NEXT: cmpwi r3, 028; CHECK-NEXT: bgt cr0, .LBB1_229; CHECK-NEXT: # %bb.1: # %entry30; CHECK-NEXT: mr r4, r331; CHECK-NEXT: .LBB1_2: # %entry32; CHECK-NEXT: mr r3, r433; CHECK-NEXT: blr34entry:35 %cmp = icmp sgt i32 %i, 036 %cond = select i1 %cmp, i32 %j, i32 %i37 ret i32 %cond38 39}40 41define signext i32 @testExpandISELToElse(i32 signext %i, i32 signext %j) {42; CHECK-LABEL: testExpandISELToElse:43; CHECK: # %bb.0: # %entry44; CHECK-NEXT: cmpwi r3, 045; CHECK-NEXT: bgtlr cr046; CHECK-NEXT: # %bb.1: # %entry47; CHECK-NEXT: mr r3, r448; CHECK-NEXT: blr49entry:50 %cmp = icmp sgt i32 %i, 051 %cond = select i1 %cmp, i32 %i, i32 %j52 ret i32 %cond53 54}55 56define signext i32 @testExpandISELToNull(i32 signext %i, i32 signext %j) {57; CHECK-LABEL: testExpandISELToNull:58; CHECK: # %bb.0: # %entry59; CHECK-NEXT: blr60entry:61 %cmp = icmp sgt i32 %i, 062 %cond = select i1 %cmp, i32 %i, i32 %i63 ret i32 %cond64 65}66 67define signext i32 @testExpandISELsTo2ORIs2ADDIs(i32 signext %a, i32 signext %b, i32 signext %d, i32 signext %f, i32 signext %g) {68; CHECK-LABEL: testExpandISELsTo2ORIs2ADDIs:69; CHECK: # %bb.0: # %entry70; CHECK-NEXT: cmpwi r7, 071; CHECK-NEXT: bgt cr0, .LBB4_272; CHECK-NEXT: # %bb.1: # %entry73; CHECK-NEXT: mr r7, r474; CHECK-NEXT: .LBB4_2: # %entry75; CHECK-NEXT: bgt cr0, .LBB4_476; CHECK-NEXT: # %bb.3: # %entry77; CHECK-NEXT: mr r5, r678; CHECK-NEXT: .LBB4_4: # %entry79; CHECK-NEXT: add r3, r7, r580; CHECK-NEXT: extsw r3, r381; CHECK-NEXT: blr82entry:83 %cmp = icmp sgt i32 %g, 084 %a.b = select i1 %cmp, i32 %g, i32 %b85 %d.f = select i1 %cmp, i32 %d, i32 %f86 %add = add nsw i32 %a.b, %d.f87 ret i32 %add88}89 90define signext i32 @testExpandISELsTo2ORIs1ADDI(i32 signext %a, i32 signext %b, i32 signext %d, i32 signext %f, i32 signext %g) {91; CHECK-LABEL: testExpandISELsTo2ORIs1ADDI:92; CHECK: # %bb.0: # %entry93; CHECK-NEXT: cmpwi r7, 094; CHECK-NEXT: bgt cr0, .LBB5_295; CHECK-NEXT: # %bb.1: # %entry96; CHECK-NEXT: mr r3, r497; CHECK-NEXT: .LBB5_2: # %entry98; CHECK-NEXT: bgt cr0, .LBB5_499; CHECK-NEXT: # %bb.3: # %entry100; CHECK-NEXT: mr r5, r6101; CHECK-NEXT: .LBB5_4: # %entry102; CHECK-NEXT: add r3, r3, r5103; CHECK-NEXT: extsw r3, r3104; CHECK-NEXT: blr105entry:106 %cmp = icmp sgt i32 %g, 0107 %a.b = select i1 %cmp, i32 %a, i32 %b108 %d.f = select i1 %cmp, i32 %d, i32 %f109 %add = add nsw i32 %a.b, %d.f110 ret i32 %add111}112 113define signext i32 @testExpandISELsTo1ORI1ADDI(i32 signext %a, i32 signext %b, i32 signext %d, i32 signext %f, i32 signext %g) {114; CHECK-LABEL: testExpandISELsTo1ORI1ADDI:115; CHECK: # %bb.0: # %entry116; CHECK-NEXT: cmpwi r7, 0117; CHECK-NEXT: mr r7, r3118; CHECK-NEXT: bgt cr0, .LBB6_2119; CHECK-NEXT: # %bb.1: # %entry120; CHECK-NEXT: mr r7, r4121; CHECK-NEXT: .LBB6_2: # %entry122; CHECK-NEXT: bgt cr0, .LBB6_4123; CHECK-NEXT: # %bb.3: # %entry124; CHECK-NEXT: mr r5, r6125; CHECK-NEXT: .LBB6_4: # %entry126; CHECK-NEXT: add r4, r7, r5127; CHECK-NEXT: add r3, r3, r4128; CHECK-NEXT: extsw r3, r3129; CHECK-NEXT: blr130entry:131 %cmp = icmp sgt i32 %g, 0132 %a.b = select i1 %cmp, i32 %a, i32 %b133 %d.f = select i1 %cmp, i32 %d, i32 %f134 %add1 = add nsw i32 %a.b, %d.f135 %add2 = add nsw i32 %a, %add1136 ret i32 %add2137}138 139define signext i32 @testExpandISELsTo0ORI2ADDIs(i32 signext %a, i32 signext %b, i32 signext %d, i32 signext %f, i32 signext %g) {140; CHECK-LABEL: testExpandISELsTo0ORI2ADDIs:141; CHECK: # %bb.0: # %entry142; CHECK-NEXT: cmpwi r7, 0143; CHECK-NEXT: mr r7, r3144; CHECK-NEXT: bgt cr0, .LBB7_2145; CHECK-NEXT: # %bb.1: # %entry146; CHECK-NEXT: mr r7, r4147; CHECK-NEXT: .LBB7_2: # %entry148; CHECK-NEXT: mr r4, r5149; CHECK-NEXT: bgt cr0, .LBB7_4150; CHECK-NEXT: # %bb.3: # %entry151; CHECK-NEXT: mr r4, r6152; CHECK-NEXT: .LBB7_4: # %entry153; CHECK-NEXT: add r4, r7, r4154; CHECK-NEXT: add r3, r3, r4155; CHECK-NEXT: sub r3, r3, r5156; CHECK-NEXT: extsw r3, r3157; CHECK-NEXT: blr158entry:159 %cmp = icmp sgt i32 %g, 0160 %a.b = select i1 %cmp, i32 %a, i32 %b161 %d.f = select i1 %cmp, i32 %d, i32 %f162 %add1 = add nsw i32 %a.b, %d.f163 %add2 = add nsw i32 %a, %add1164 %sub1 = sub nsw i32 %add2, %d165 ret i32 %sub1166}167 168@b = local_unnamed_addr global i32 0, align 4169@a = local_unnamed_addr global i32 0, align 4170; Function Attrs: norecurse nounwind readonly171define signext i32 @testComplexISEL() #0 {172; CHECK-LABEL: testComplexISEL:173; CHECK: # %bb.0: # %entry174; CHECK-NEXT: addis r3, r2, .LC0@toc@ha175; CHECK-NEXT: ld r3, .LC0@toc@l(r3)176; CHECK-NEXT: lwz r4, 0(r3)177; CHECK-NEXT: li r3, 1178; CHECK-NEXT: cmplwi r4, 0179; CHECK-NEXT: bnelr cr0180; CHECK-NEXT: # %bb.1: # %if.end181; CHECK-NEXT: addis r3, r2, .LC1@toc@ha182; CHECK-NEXT: addis r4, r2, .LC2@toc@ha183; CHECK-NEXT: ld r3, .LC1@toc@l(r3)184; CHECK-NEXT: ld r4, .LC2@toc@l(r4)185; CHECK-NEXT: lwa r3, 0(r3)186; CHECK-NEXT: xor r3, r3, r4187; CHECK-NEXT: cntlzd r3, r3188; CHECK-NEXT: rldicl r3, r3, 58, 63189; CHECK-NEXT: blr190entry:191 %0 = load i32, ptr @b, align 4, !tbaa !1192 %tobool = icmp eq i32 %0, 0193 br i1 %tobool, label %if.end, label %cleanup194 195if.end:196 %1 = load i32, ptr @a, align 4, !tbaa !1197 %conv = sext i32 %1 to i64198 %2 = inttoptr i64 %conv to ptr199 %cmp = icmp eq ptr %2, @testComplexISEL200 %conv3 = zext i1 %cmp to i32201 br label %cleanup202 203cleanup:204 %retval.0 = phi i32 [ %conv3, %if.end ], [ 1, %entry ]205 ret i32 %retval.0206 207}208 209!1 = !{!2, !2, i64 0}210!2 = !{!"int", !3, i64 0}211!3 = !{!"omnipotent char", !4, i64 0}212!4 = !{!"Simple C/C++ TBAA"}213