1# RUN: llc -run-pass simple-register-coalescing %s -o - | FileCheck %s 2--- | 3 target datalayout = "e-m:e-i64:64-n32:64" 4 target triple = "powerpc64le-unknown-linux-gnu" 5 6 @b = common dso_local local_unnamed_addr global i32 0, align 4 7 @d = common dso_local local_unnamed_addr global i32 0, align 4 8 @e = common dso_local local_unnamed_addr global i32* null, align 8 9 @c = common dso_local local_unnamed_addr global i32 0, align 4 10 @a = common dso_local local_unnamed_addr global [1 x i32] zeroinitializer, align 4 11 12 ; Function Attrs: norecurse nounwind 13 define dso_local signext i32 @copycrunset() local_unnamed_addr #0 { 14 entry: 15 %0 = load i32, i32* @b, align 4 16 %tobool3 = icmp eq i32 %0, 0 17 br i1 %tobool3, label %while.end, label %while.body.preheader 18 19 while.body.preheader: ; preds = %entry 20 %.pre = load i32, i32* @d, align 4 21 %tobool1 = icmp eq i32 %.pre, 0 22 br label %while.body 23 24 while.body: ; preds = %land.end, %while.body.preheader 25 br i1 %tobool1, label %land.end, label %land.rhs 26 27 land.rhs: ; preds = %while.body 28 %1 = load i32*, i32** @e, align 8 29 %2 = load i32, i32* %1, align 4 30 %idxprom = sext i32 %2 to i64 31 %arrayidx = getelementptr inbounds [1 x i32], [1 x i32]* @a, i64 0, i64 %idxprom 32 %3 = load i32, i32* %arrayidx, align 4 33 %tobool2 = icmp ne i32 %3, 0 34 br label %land.end 35 36 land.end: ; preds = %land.rhs, %while.body 37 %4 = phi i1 [ false, %while.body ], [ %tobool2, %land.rhs ] 38 %land.ext = zext i1 %4 to i32 39 store i32 %land.ext, i32* @c, align 4 40 br label %while.body 41 42 while.end: ; preds = %entry 43 ret i32 undef 44 } 45 46... 47--- 48name: copycrunset 49alignment: 16 50exposesReturnsTwice: false 51legalized: false 52regBankSelected: false 53selected: false 54failedISel: false 55tracksRegLiveness: true 56hasWinCFI: false 57registers: 58 - { id: 0, class: crbitrc, preferred-register: '' } 59 - { id: 1, class: crbitrc, preferred-register: '' } 60 - { id: 2, class: crbitrc, preferred-register: '' } 61 - { id: 3, class: g8rc_and_g8rc_nox0, preferred-register: '' } 62 - { id: 4, class: gprc, preferred-register: '' } 63 - { id: 5, class: crrc, preferred-register: '' } 64 - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' } 65 - { id: 7, class: gprc, preferred-register: '' } 66 - { id: 8, class: crrc, preferred-register: '' } 67 - { id: 9, class: crbitrc, preferred-register: '' } 68 - { id: 10, class: g8rc_and_g8rc_nox0, preferred-register: '' } 69 - { id: 11, class: g8rc_and_g8rc_nox0, preferred-register: '' } 70 - { id: 12, class: g8rc, preferred-register: '' } 71 - { id: 13, class: g8rc_and_g8rc_nox0, preferred-register: '' } 72 - { id: 14, class: g8rc_and_g8rc_nox0, preferred-register: '' } 73 - { id: 15, class: g8rc, preferred-register: '' } 74 - { id: 16, class: gprc, preferred-register: '' } 75 - { id: 17, class: crrc, preferred-register: '' } 76 - { id: 18, class: crbitrc, preferred-register: '' } 77 - { id: 19, class: gprc_and_gprc_nor0, preferred-register: '' } 78 - { id: 20, class: gprc_and_gprc_nor0, preferred-register: '' } 79 - { id: 21, class: gprc, preferred-register: '' } 80 - { id: 22, class: g8rc_and_g8rc_nox0, preferred-register: '' } 81 - { id: 23, class: g8rc, preferred-register: '' } 82 - { id: 24, class: crbitrc, preferred-register: '' } 83liveins: 84 - { reg: '$x2', virtual-reg: '' } 85frameInfo: 86 isFrameAddressTaken: false 87 isReturnAddressTaken: false 88 hasStackMap: false 89 hasPatchPoint: false 90 stackSize: 0 91 offsetAdjustment: 0 92 maxAlignment: 0 93 adjustsStack: false 94 hasCalls: false 95 stackProtector: '' 96 maxCallFrameSize: 4294967295 97 cvBytesOfCalleeSavedRegisters: 0 98 hasOpaqueSPAdjustment: false 99 hasVAStart: false 100 hasMustTailInVarArgFunc: false 101 localFrameSize: 0 102 savePoint: '' 103 restorePoint: '' 104fixedStack: [] 105stack: [] 106constants: [] 107machineFunctionInfo: {} 108body: | 109 bb.0.entry: 110 successors: %bb.5(0x30000000), %bb.1(0x50000000) 111 liveins: $x2 112 113 %3:g8rc_and_g8rc_nox0 = ADDIStocHA8 $x2, @b 114 %4:gprc = LWZ target-flags(ppc-toc-lo) @b, killed %3, implicit $x2 :: (dereferenceable load 4 from @b) 115 %5:crrc = CMPLWI killed %4, 0 116 BCC 76, killed %5, %bb.5 117 B %bb.1 118 119 bb.1.while.body.preheader: 120 successors: %bb.2(0x80000000) 121 liveins: $x2 122 123 %6:g8rc_and_g8rc_nox0 = ADDIStocHA8 $x2, @d 124 %7:gprc = LWZ target-flags(ppc-toc-lo) @d, killed %6, implicit $x2 :: (dereferenceable load 4 from @d) 125 %8:crrc = CMPWI killed %7, 0 126 %0:crbitrc = COPY killed %8.sub_eq 127 %9:crbitrc = CRUNSET 128 %19:gprc_and_gprc_nor0 = LI 0 129 %20:gprc_and_gprc_nor0 = LI 1 130 %22:g8rc_and_g8rc_nox0 = ADDIStocHA8 $x2, @c 131 %10:g8rc_and_g8rc_nox0 = ADDIStocHA8 $x2, @e 132 %13:g8rc_and_g8rc_nox0 = ADDIStocHA8 $x2, @a 133 %14:g8rc_and_g8rc_nox0 = ADDItocL killed %13, @a, implicit $x2 134 135 bb.2.while.body: 136 successors: %bb.4(0x30000000), %bb.3(0x50000000) 137 liveins: $x2 138 139 %24:crbitrc = COPY %9 140 BC %0, %bb.4 141 B %bb.3 142 143 bb.3.land.rhs: 144 successors: %bb.4(0x80000000) 145 liveins: $x2 146 147 %11:g8rc_and_g8rc_nox0 = LD target-flags(ppc-toc-lo) @e, %10, implicit $x2 :: (dereferenceable load 8 from @e) 148 %12:g8rc = LWA 0, killed %11 :: (load 4 from %ir.1) 149 %15:g8rc = RLDICR killed %12, 2, 61 150 %16:gprc = LWZX %14, killed %15 :: (load 4 from %ir.arrayidx) 151 %17:crrc = CMPWI killed %16, 0 152 %18:crbitrc = COPY killed %17.sub_eq 153 %1:crbitrc = CRNOR killed %18, %18 154 %24:crbitrc = COPY killed %1 155 156 bb.4.land.end: 157 successors: %bb.2(0x80000000) 158 liveins: $x2 159 160 %2:crbitrc = COPY killed %24 161 %21:gprc = ISEL %20, %19, killed %2 162 STW killed %21, target-flags(ppc-toc-lo) @c, %22, implicit $x2 :: (store 4 into @c) 163 B %bb.2 164 165 bb.5.while.end: 166 %23:g8rc = LI8 0 167 $x3 = COPY killed %23 168 BLR8 implicit $lr8, implicit $rm, implicit killed $x3 169 170... 171#Copy of CRUNSET should be removed in simple register coalescing pass 172#CHECK-LABEL: copycrunset 173#CHECK: bb.1.while.body.preheader: 174#CHECK-NOT: %9:crbitrc = CRUNSET 175#CHECK: bb.2.while.body: 176#CHECK-NOT: %24:crbitrc = COPY %9 177#CHECK: %24:crbitrc = CRUNSET 178#CHECK: B %bb.3 179