Skip to content

Commit e174c27

Browse files
committed
AMDGPU/GlobalISel: Fix mapping G_ICMP with constrained result
When SI_IF is inserted, it constrains the source register with a register class, which was quite likely a G_ICMP. This was incorrectly treating it as a scalar, and then applyMappingImpl would end up producing invalid MIR since this was unexpected. Also fix not using all VGPR sources for vcc outputs.
1 parent de71617 commit e174c27

10 files changed

+516
-235
lines changed

llvm/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -572,27 +572,6 @@ AMDGPURegisterBankInfo::getInstrAlternativeMappings(
572572
return AltMappings;
573573

574574
}
575-
case TargetOpcode::G_ICMP: {
576-
// TODO: Should report 32-bit for scalar output type.
577-
unsigned Size = getSizeInBits(MI.getOperand(2).getReg(), MRI, *TRI);
578-
const InstructionMapping &SSMapping = getInstructionMapping(1, 1,
579-
getOperandsMapping({AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, 1),
580-
nullptr, // Predicate operand.
581-
AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, Size),
582-
AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, Size)}),
583-
4); // Num Operands
584-
AltMappings.push_back(&SSMapping);
585-
586-
const InstructionMapping &VVMapping = getInstructionMapping(4, 1,
587-
getOperandsMapping({AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, 1),
588-
nullptr, // Predicate operand.
589-
AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, Size),
590-
AMDGPU::getValueMapping(AMDGPU::VGPRRegBankID, Size)}),
591-
4); // Num Operands
592-
AltMappings.push_back(&VVMapping);
593-
594-
return AltMappings;
595-
}
596575
case TargetOpcode::G_SELECT: {
597576
unsigned Size = getSizeInBits(MI.getOperand(0).getReg(), MRI, *TRI);
598577
const InstructionMapping &SSMapping = getInstructionMapping(1, 1,
@@ -1832,7 +1811,13 @@ void AMDGPURegisterBankInfo::applyMappingImpl(
18321811

18331812
MachineBasicBlock *MBB = MI.getParent();
18341813
B.setInsertPt(*MBB, std::next(MI.getIterator()));
1835-
B.buildTrunc(DstReg, NewDstReg);
1814+
1815+
// If we had a constrained VCC result register, a copy was inserted to VCC
1816+
// from SGPR.
1817+
SmallVector<Register, 1> DefRegs(OpdMapper.getVRegs(0));
1818+
if (DefRegs.empty())
1819+
DefRegs.push_back(DstReg);
1820+
B.buildTrunc(DefRegs[0], NewDstReg);
18361821
return;
18371822
}
18381823
case AMDGPU::G_SELECT: {
@@ -3287,25 +3272,31 @@ AMDGPURegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
32873272
case AMDGPU::G_ICMP: {
32883273
auto Pred = static_cast<CmpInst::Predicate>(MI.getOperand(1).getPredicate());
32893274
unsigned Size = MRI.getType(MI.getOperand(2).getReg()).getSizeInBits();
3275+
3276+
// See if the result register has already been constrained to vcc, which may
3277+
// happen due to control flow intrinsic lowering.
3278+
unsigned DstBank = getRegBankID(MI.getOperand(0).getReg(), MRI, *TRI,
3279+
AMDGPU::SGPRRegBankID);
32903280
unsigned Op2Bank = getRegBankID(MI.getOperand(2).getReg(), MRI, *TRI);
32913281
unsigned Op3Bank = getRegBankID(MI.getOperand(3).getReg(), MRI, *TRI);
32923282

3293-
bool CanUseSCC = Op2Bank == AMDGPU::SGPRRegBankID &&
3283+
bool CanUseSCC = DstBank == AMDGPU::SGPRRegBankID &&
3284+
Op2Bank == AMDGPU::SGPRRegBankID &&
32943285
Op3Bank == AMDGPU::SGPRRegBankID &&
32953286
(Size == 32 || (Size == 64 &&
32963287
(Pred == CmpInst::ICMP_EQ || Pred == CmpInst::ICMP_NE) &&
32973288
Subtarget.hasScalarCompareEq64()));
32983289

3299-
unsigned Op0Bank = CanUseSCC ? AMDGPU::SGPRRegBankID : AMDGPU::VCCRegBankID;
3290+
DstBank = CanUseSCC ? AMDGPU::SGPRRegBankID : AMDGPU::VCCRegBankID;
3291+
unsigned SrcBank = CanUseSCC ? AMDGPU::SGPRRegBankID : AMDGPU::VGPRRegBankID;
33003292

33013293
// TODO: Use 32-bit for scalar output size.
33023294
// SCC results will need to be copied to a 32-bit SGPR virtual register.
33033295
const unsigned ResultSize = 1;
33043296

3305-
OpdsMapping[0] = AMDGPU::getValueMapping(Op0Bank, ResultSize);
3306-
OpdsMapping[1] = nullptr; // Predicate Operand.
3307-
OpdsMapping[2] = AMDGPU::getValueMapping(Op2Bank, Size);
3308-
OpdsMapping[3] = AMDGPU::getValueMapping(Op3Bank, Size);
3297+
OpdsMapping[0] = AMDGPU::getValueMapping(DstBank, ResultSize);
3298+
OpdsMapping[2] = AMDGPU::getValueMapping(SrcBank, Size);
3299+
OpdsMapping[3] = AMDGPU::getValueMapping(SrcBank, Size);
33093300
break;
33103301
}
33113302
case AMDGPU::G_EXTRACT_VECTOR_ELT: {

llvm/test/CodeGen/AMDGPU/GlobalISel/divergent-control-flow.ll

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,145 @@ if.true:
5656
%val = load volatile i32, i32 addrspace(1)* undef
5757
br label %endif
5858
}
59+
60+
; Make sure and 1 is inserted on llvm.amdgcn.if
61+
define i32 @divergent_if_nonboolean_condition0(i32 %value) {
62+
; CHECK-LABEL: divergent_if_nonboolean_condition0:
63+
; CHECK: ; %bb.0: ; %entry
64+
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
65+
; CHECK-NEXT: v_and_b32_e32 v0, 1, v0
66+
; CHECK-NEXT: v_cmp_ne_u32_e32 vcc, 0, v0
67+
; CHECK-NEXT: ; implicit-def: $vgpr0
68+
; CHECK-NEXT: s_and_saveexec_b64 s[4:5], vcc
69+
; CHECK-NEXT: s_cbranch_execz BB2_2
70+
; CHECK-NEXT: ; %bb.1: ; %if.true
71+
; CHECK-NEXT: global_load_dword v0, v[0:1], off
72+
; CHECK-NEXT: BB2_2: ; %endif
73+
; CHECK-NEXT: s_or_b64 exec, exec, s[4:5]
74+
; CHECK-NEXT: s_waitcnt vmcnt(0)
75+
; CHECK-NEXT: s_setpc_b64 s[30:31]
76+
entry:
77+
%c = trunc i32 %value to i1
78+
br i1 %c, label %if.true, label %endif
79+
80+
if.true:
81+
%val = load volatile i32, i32 addrspace(1)* undef
82+
br label %endif
83+
84+
endif:
85+
%v = phi i32 [ %val, %if.true ], [ undef, %entry ]
86+
ret i32 %v
87+
}
88+
89+
; Make sure and 1 is inserted on llvm.amdgcn.if
90+
define i32 @divergent_if_nonboolean_condition1(i32 addrspace(1)* %ptr) {
91+
; CHECK-LABEL: divergent_if_nonboolean_condition1:
92+
; CHECK: ; %bb.0: ; %entry
93+
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
94+
; CHECK-NEXT: global_load_dword v0, v[0:1], off
95+
; CHECK-NEXT: s_waitcnt vmcnt(0)
96+
; CHECK-NEXT: v_and_b32_e32 v0, 1, v0
97+
; CHECK-NEXT: v_cmp_ne_u32_e32 vcc, 0, v0
98+
; CHECK-NEXT: ; implicit-def: $vgpr0
99+
; CHECK-NEXT: s_and_saveexec_b64 s[4:5], vcc
100+
; CHECK-NEXT: s_cbranch_execz BB3_2
101+
; CHECK-NEXT: ; %bb.1: ; %if.true
102+
; CHECK-NEXT: global_load_dword v0, v[0:1], off
103+
; CHECK-NEXT: BB3_2: ; %endif
104+
; CHECK-NEXT: s_or_b64 exec, exec, s[4:5]
105+
; CHECK-NEXT: s_waitcnt vmcnt(0)
106+
; CHECK-NEXT: s_setpc_b64 s[30:31]
107+
entry:
108+
%value = load i32, i32 addrspace(1)* %ptr
109+
%c = trunc i32 %value to i1
110+
br i1 %c, label %if.true, label %endif
111+
112+
if.true:
113+
%val = load volatile i32, i32 addrspace(1)* undef
114+
br label %endif
115+
116+
endif:
117+
%v = phi i32 [ %val, %if.true ], [ undef, %entry ]
118+
ret i32 %v
119+
}
120+
121+
@external_constant = external addrspace(4) constant i32, align 4
122+
@const.ptr = external addrspace(4) constant float*, align 4
123+
124+
; Make sure this case compiles. G_ICMP was mis-mapped due to having
125+
; the result register class constrained by llvm.amdgcn.if lowering.
126+
define void @constrained_if_register_class() {
127+
; CHECK-LABEL: constrained_if_register_class:
128+
; CHECK: ; %bb.0: ; %bb
129+
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
130+
; CHECK-NEXT: s_getpc_b64 s[4:5]
131+
; CHECK-NEXT: s_add_u32 s4, s4, external_constant@gotpcrel32@lo+4
132+
; CHECK-NEXT: s_addc_u32 s5, s5, external_constant@gotpcrel32@hi+4
133+
; CHECK-NEXT: s_load_dwordx2 s[4:5], s[4:5], 0x0
134+
; CHECK-NEXT: s_waitcnt lgkmcnt(0)
135+
; CHECK-NEXT: s_load_dword s6, s[4:5], 0x0
136+
; CHECK-NEXT: s_getpc_b64 s[4:5]
137+
; CHECK-NEXT: s_add_u32 s4, s4, const.ptr@gotpcrel32@lo+4
138+
; CHECK-NEXT: s_addc_u32 s5, s5, const.ptr@gotpcrel32@hi+4
139+
; CHECK-NEXT: s_waitcnt lgkmcnt(0)
140+
; CHECK-NEXT: s_cmp_lg_u32 s6, 0
141+
; CHECK-NEXT: s_cselect_b32 s6, 1, 0
142+
; CHECK-NEXT: s_and_b32 s6, s6, 1
143+
; CHECK-NEXT: s_cmp_lg_u32 s6, 0
144+
; CHECK-NEXT: s_cbranch_scc1 BB4_6
145+
; CHECK-NEXT: ; %bb.1: ; %bb2
146+
; CHECK-NEXT: s_load_dwordx2 s[6:7], s[4:5], 0x0
147+
; CHECK-NEXT: s_mov_b32 s4, -1
148+
; CHECK-NEXT: s_waitcnt lgkmcnt(0)
149+
; CHECK-NEXT: s_load_dwordx2 s[6:7], s[6:7], 0x0
150+
; CHECK-NEXT: s_waitcnt lgkmcnt(0)
151+
; CHECK-NEXT: v_mov_b32_e32 v0, s6
152+
; CHECK-NEXT: v_mov_b32_e32 v1, s7
153+
; CHECK-NEXT: flat_load_dword v0, v[0:1]
154+
; CHECK-NEXT: v_cmp_ne_u32_e64 s[6:7], 0, 1
155+
; CHECK-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
156+
; CHECK-NEXT: v_cmp_gt_f32_e32 vcc, 1.0, v0
157+
; CHECK-NEXT: s_xor_b64 s[8:9], vcc, s[6:7]
158+
; CHECK-NEXT: s_and_saveexec_b64 s[6:7], s[8:9]
159+
; CHECK-NEXT: ; %bb.2: ; %bb7
160+
; CHECK-NEXT: s_mov_b32 s4, 0
161+
; CHECK-NEXT: ; %bb.3: ; %bb8
162+
; CHECK-NEXT: s_or_b64 exec, exec, s[6:7]
163+
; CHECK-NEXT: v_cmp_eq_u32_e64 s[6:7], s4, 0
164+
; CHECK-NEXT: s_and_saveexec_b64 s[4:5], s[6:7]
165+
; CHECK-NEXT: s_cbranch_execz BB4_5
166+
; CHECK-NEXT: ; %bb.4: ; %bb11
167+
; CHECK-NEXT: v_mov_b32_e32 v0, 4.0
168+
; CHECK-NEXT: buffer_store_dword v0, v0, s[0:3], s33 offen
169+
; CHECK-NEXT: BB4_5: ; %Flow
170+
; CHECK-NEXT: s_or_b64 exec, exec, s[4:5]
171+
; CHECK-NEXT: BB4_6: ; %bb12
172+
; CHECK-NEXT: s_waitcnt vmcnt(0)
173+
; CHECK-NEXT: s_setpc_b64 s[30:31]
174+
bb:
175+
%tmp = load i32, i32 addrspace(4)* @external_constant
176+
%ptr = load float*, float* addrspace(4)* @const.ptr
177+
%tmp1 = icmp ne i32 %tmp, 0
178+
br i1 %tmp1, label %bb12, label %bb2
179+
180+
bb2:
181+
%tmp4 = load float, float* %ptr, align 4
182+
%tmp5 = fcmp olt float %tmp4, 1.0
183+
%tmp6 = or i1 %tmp5, false
184+
br i1 %tmp6, label %bb8, label %bb7
185+
186+
bb7:
187+
br label %bb8
188+
189+
bb8:
190+
%tmp9 = phi i32 [ 0, %bb7 ], [ -1, %bb2 ]
191+
%tmp10 = icmp eq i32 %tmp9, 0
192+
br i1 %tmp10, label %bb11, label %bb12
193+
194+
bb11:
195+
store float 4.0, float addrspace(5)* undef, align 4
196+
br label %bb12
197+
198+
bb12:
199+
ret void
200+
}

llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-amdgcn.div.fmas.mir

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,12 @@ body: |
4444
; CHECK: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
4545
; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
4646
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
47-
; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY3]](s32), [[C]]
48-
; CHECK: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
49-
; CHECK: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
50-
; CHECK: [[COPY6:%[0-9]+]]:vgpr(s32) = COPY [[COPY2]](s32)
51-
; CHECK: [[INT:%[0-9]+]]:vgpr(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.div.fmas), [[COPY4]](s32), [[COPY5]](s32), [[COPY6]](s32), [[ICMP]](s1)
47+
; CHECK: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)
48+
; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY3]](s32), [[COPY4]]
49+
; CHECK: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
50+
; CHECK: [[COPY6:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
51+
; CHECK: [[COPY7:%[0-9]+]]:vgpr(s32) = COPY [[COPY2]](s32)
52+
; CHECK: [[INT:%[0-9]+]]:vgpr(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.div.fmas), [[COPY5]](s32), [[COPY6]](s32), [[COPY7]](s32), [[ICMP]](s1)
5253
%0:_(s32) = COPY $sgpr0
5354
%1:_(s32) = COPY $sgpr1
5455
%2:_(s32) = COPY $sgpr2
@@ -71,10 +72,11 @@ body: |
7172
; CHECK: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
7273
; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
7374
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
74-
; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY3]](s32), [[C]]
75-
; CHECK: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
76-
; CHECK: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY2]](s32)
77-
; CHECK: [[INT:%[0-9]+]]:vgpr(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.div.fmas), [[COPY]](s32), [[COPY4]](s32), [[COPY5]](s32), [[ICMP]](s1)
75+
; CHECK: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)
76+
; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY3]](s32), [[COPY4]]
77+
; CHECK: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
78+
; CHECK: [[COPY6:%[0-9]+]]:vgpr(s32) = COPY [[COPY2]](s32)
79+
; CHECK: [[INT:%[0-9]+]]:vgpr(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.div.fmas), [[COPY]](s32), [[COPY5]](s32), [[COPY6]](s32), [[ICMP]](s1)
7880
%0:_(s32) = COPY $vgpr0
7981
%1:_(s32) = COPY $sgpr0
8082
%2:_(s32) = COPY $sgpr1
@@ -97,7 +99,8 @@ body: |
9799
; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
98100
; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr3
99101
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
100-
; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY3]](s32), [[C]]
102+
; CHECK: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)
103+
; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY3]](s32), [[COPY4]]
101104
; CHECK: [[INT:%[0-9]+]]:vgpr(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.div.fmas), [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[ICMP]](s1)
102105
%0:_(s32) = COPY $vgpr0
103106
%1:_(s32) = COPY $vgpr1

llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-and-s1.mir

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,10 @@ body: |
8686
; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
8787
; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
8888
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
89-
; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
90-
; CHECK: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[C]]
89+
; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)
90+
; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY2]]
91+
; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)
92+
; CHECK: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[COPY3]]
9193
; CHECK: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[ICMP]], [[ICMP1]]
9294
%0:_(s32) = COPY $vgpr0
9395
%1:_(s32) = COPY $vgpr1
@@ -157,9 +159,10 @@ body: |
157159
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
158160
; CHECK: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
159161
; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
160-
; CHECK: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[C]]
161-
; CHECK: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
162-
; CHECK: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[ICMP1]]
162+
; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)
163+
; CHECK: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[COPY2]]
164+
; CHECK: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
165+
; CHECK: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY3]], [[ICMP1]]
163166
%0:_(s32) = COPY $sgpr0
164167
%1:_(s32) = COPY $vgpr0
165168
%2:_(s32) = G_CONSTANT i32 0
@@ -179,8 +182,10 @@ body: |
179182
; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
180183
; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
181184
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
182-
; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
183-
; CHECK: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[C]]
185+
; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)
186+
; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY2]]
187+
; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)
188+
; CHECK: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[COPY3]]
184189
; CHECK: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[ICMP]], [[ICMP1]]
185190
%0:_(s32) = COPY $vgpr0
186191
%1:_(s32) = COPY $vgpr1

0 commit comments

Comments
 (0)