173 lines · plain
1# RUN: llc -mtriple=aarch64-unknown-unknown -run-pass=early-ifcvt -verify-machineinstrs %s -o - | FileCheck %s2# RUN: llc -mtriple=aarch64-unknown-unknown -passes=early-ifcvt -verify-each %s -o - | FileCheck %s3--- |4 target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"5 target triple = "arm64-apple-ios13.3.0"6 define hidden void @phi_operands_regclasses_different() #0 {7 entry:8 br i1 undef, label %if.then139.i, label %if.else142.i9 10 if.then139.i: ; preds = %entry11 %0 = load double, ptr undef, align 812 br label %if.end161.i13 14 if.else142.i: ; preds = %entry15 %tobool154.i = icmp eq i8 undef, 016 br i1 %tobool154.i, label %if.then155.i, label %if.end161.i17 18 if.then155.i: ; preds = %if.else142.i19 %add158.i = fadd double undef, 0.000000e+0020 br label %if.end161.i21 22 if.end161.i: ; preds = %if.then155.i, %if.else142.i, %if.then139.i23 %y2.0.i = phi double [ %0, %if.then139.i ], [ 0.000000e+00, %if.else142.i ], [ 0.000000e+00, %if.then155.i ]24 %add169.i = fadd double 0.000000e+00, %y2.0.i25 %1 = fmul double undef, %add169.i26 %add174.i = fsub double undef, %127 %2 = call double @llvm.fabs.f64(double %add174.i) #228 %cmp.i516.i = fcmp olt double %2, 0x3BC79CA10C92422329 br i1 %cmp.i516.i, label %if.then.i.i, label %if.end9.i.i30 31 if.then.i.i: ; preds = %if.end161.i32 %3 = call double @llvm.fabs.f64(double undef) #233 unreachable34 35 if.end9.i.i: ; preds = %if.end161.i36 ret void37 }38 declare double @llvm.fabs.f64(double) #139 declare void @llvm.stackprotector(ptr, ptr) #240 41 attributes #0 = { "target-cpu"="apple-a7" }42 attributes #1 = { nounwind readnone speculatable willreturn }43 attributes #2 = { nounwind }44 45 !llvm.ident = !{!0}46 47 !0 = !{!"clang"}48 49...50---51name: phi_operands_regclasses_different52alignment: 453exposesReturnsTwice: false54legalized: true55regBankSelected: true56selected: true57failedISel: false58tracksRegLiveness: true59hasWinCFI: false60registers:61 - { id: 0, class: gpr32, preferred-register: '' }62 - { id: 1, class: _, preferred-register: '' }63 - { id: 2, class: _, preferred-register: '' }64 - { id: 3, class: gpr, preferred-register: '' }65 - { id: 4, class: gpr64, preferred-register: '' }66 - { id: 5, class: fpr, preferred-register: '' }67 - { id: 6, class: _, preferred-register: '' }68 - { id: 7, class: gpr64, preferred-register: '' }69 - { id: 8, class: gpr64common, preferred-register: '' }70 - { id: 9, class: gpr64, preferred-register: '' }71 - { id: 10, class: fpr64, preferred-register: '' }72 - { id: 11, class: fpr64, preferred-register: '' }73 - { id: 12, class: fpr, preferred-register: '' }74 - { id: 13, class: fpr64, preferred-register: '' }75 - { id: 14, class: fpr, preferred-register: '' }76 - { id: 15, class: gpr32, preferred-register: '' }77 - { id: 16, class: _, preferred-register: '' }78 - { id: 17, class: gpr32, preferred-register: '' }79 - { id: 18, class: gpr32, preferred-register: '' }80 - { id: 19, class: gpr32, preferred-register: '' }81 - { id: 20, class: gpr, preferred-register: '' }82 - { id: 21, class: fpr64, preferred-register: '' }83 - { id: 22, class: fpr64, preferred-register: '' }84 - { id: 23, class: fpr64, preferred-register: '' }85 - { id: 24, class: fpr64, preferred-register: '' }86 - { id: 25, class: fpr64, preferred-register: '' }87 - { id: 26, class: fpr64, preferred-register: '' }88 - { id: 27, class: fpr64, preferred-register: '' }89 - { id: 28, class: gpr64, preferred-register: '' }90liveins: []91frameInfo:92 isFrameAddressTaken: false93 isReturnAddressTaken: false94 hasStackMap: false95 hasPatchPoint: false96 stackSize: 097 offsetAdjustment: 098 maxAlignment: 199 adjustsStack: false100 hasCalls: false101 stackProtector: ''102 maxCallFrameSize: 0103 cvBytesOfCalleeSavedRegisters: 0104 hasOpaqueSPAdjustment: false105 hasVAStart: false106 hasMustTailInVarArgFunc: false107 localFrameSize: 0108 savePoint: []109 restorePoint: []110fixedStack: []111stack: []112callSites: []113constants: []114machineFunctionInfo: {}115body: |116 ; Here we check that we don't ifcvt to a CSEL that uses GPRs, because117 ; some operands to the PHI have the fpr64 regclass.118 ; CHECK-LABEL: name: phi_operands_regclasses_different119 ; CHECK-NOT: CSELXr120 bb.1.entry:121 successors: %bb.2(0x40000000), %bb.3(0x40000000)122 123 %0:gpr32 = IMPLICIT_DEF124 %4:gpr64 = IMPLICIT_DEF125 %8:gpr64common = IMPLICIT_DEF126 TBNZW %0, 0, %bb.2127 B %bb.3128 129 bb.2.if.then139.i:130 successors: %bb.5(0x80000000)131 132 %7:gpr64 = LDRXui %8, 0 :: (load (s64) from `ptr undef`)133 B %bb.5134 135 bb.3.if.else142.i:136 successors: %bb.4(0x40000000), %bb.5(0x40000000)137 138 %26:fpr64 = FMOVD0139 %19:gpr32 = COPY $wzr140 CBNZW %19, %bb.5141 142 bb.4.if.then155.i:143 successors: %bb.5(0x80000000)144 145 %27:fpr64 = FMOVD0146 147 bb.5.if.end161.i:148 successors: %bb.6(0x40000000), %bb.7(0x40000000)149 150 %9:gpr64 = PHI %7, %bb.2, %26, %bb.3, %27, %bb.4151 %21:fpr64 = COPY %9152 %25:fpr64 = FMOVD0153 %10:fpr64 = FADDDrr %25, %21, implicit $fpcr154 %22:fpr64 = COPY %4155 %11:fpr64 = FMULDrr %22, %10, implicit $fpcr156 %23:fpr64 = COPY %4157 %13:fpr64 = FABD64 %23, %11, implicit $fpcr158 %28:gpr64 = MOVi64imm 4307583784117748259159 %24:fpr64 = COPY %28160 FCMPDrr %13, %24, implicit-def $nzcv, implicit $fpcr161 %17:gpr32 = CSINCWr $wzr, $wzr, 5, implicit $nzcv162 TBNZW %17, 0, %bb.6163 B %bb.7164 165 bb.6.if.then.i.i:166 successors:167 168 169 bb.7.if.end9.i.i:170 RET_ReallyLR171 172...173