forked from OSchip/llvm-project
AMDGPU/GlobalISel: Allow scalar s1 and/or/xor
If a 1-bit value is in a 32-bit VGPR, the scalar opcodes set SCC to whether the result is 0. If the inputs are SCC, these can be copied to a 32-bit SGPR to produce an SCC result. llvm-svn: 366125
This commit is contained in:
parent
dfcd4384cb
commit
66ee934440
|
@ -108,14 +108,22 @@ AMDGPURegisterBankInfo::AMDGPURegisterBankInfo(const TargetRegisterInfo &TRI)
|
||||||
unsigned AMDGPURegisterBankInfo::copyCost(const RegisterBank &Dst,
|
unsigned AMDGPURegisterBankInfo::copyCost(const RegisterBank &Dst,
|
||||||
const RegisterBank &Src,
|
const RegisterBank &Src,
|
||||||
unsigned Size) const {
|
unsigned Size) const {
|
||||||
|
// TODO: Should there be a UniformVGPRRegBank which can use readfirstlane?
|
||||||
if (Dst.getID() == AMDGPU::SGPRRegBankID &&
|
if (Dst.getID() == AMDGPU::SGPRRegBankID &&
|
||||||
Src.getID() == AMDGPU::VGPRRegBankID) {
|
Src.getID() == AMDGPU::VGPRRegBankID) {
|
||||||
return std::numeric_limits<unsigned>::max();
|
return std::numeric_limits<unsigned>::max();
|
||||||
}
|
}
|
||||||
|
|
||||||
// SGPRRegBank with size 1 is actually vcc or another 64-bit sgpr written by
|
// Bool values are tricky, because the meaning is based on context. The SCC
|
||||||
// the valu.
|
// and VCC banks are for the natural scalar and vector conditions produced by
|
||||||
if (Size == 1 && Dst.getID() == AMDGPU::SCCRegBankID &&
|
// a compare.
|
||||||
|
//
|
||||||
|
// Legalization doesn't know about the necessary context, so an s1 use may
|
||||||
|
// have been a truncate from an arbitrary value, in which case a copy (lowered
|
||||||
|
// as a compare with 0) needs to be inserted.
|
||||||
|
if (Size == 1 &&
|
||||||
|
(Dst.getID() == AMDGPU::SCCRegBankID ||
|
||||||
|
Dst.getID() == AMDGPU::SGPRRegBankID) &&
|
||||||
(Src.getID() == AMDGPU::SGPRRegBankID ||
|
(Src.getID() == AMDGPU::SGPRRegBankID ||
|
||||||
Src.getID() == AMDGPU::VGPRRegBankID ||
|
Src.getID() == AMDGPU::VGPRRegBankID ||
|
||||||
Src.getID() == AMDGPU::VCCRegBankID))
|
Src.getID() == AMDGPU::VCCRegBankID))
|
||||||
|
@ -333,6 +341,35 @@ AMDGPURegisterBankInfo::getInstrAlternativeMappings(
|
||||||
case TargetOpcode::G_OR:
|
case TargetOpcode::G_OR:
|
||||||
case TargetOpcode::G_XOR: {
|
case TargetOpcode::G_XOR: {
|
||||||
unsigned Size = getSizeInBits(MI.getOperand(0).getReg(), MRI, *TRI);
|
unsigned Size = getSizeInBits(MI.getOperand(0).getReg(), MRI, *TRI);
|
||||||
|
|
||||||
|
if (Size == 1) {
|
||||||
|
// s_{and|or|xor}_b32 set scc when the result of the 32-bit op is not 0.
|
||||||
|
const InstructionMapping &SCCMapping = getInstructionMapping(
|
||||||
|
1, 1, getOperandsMapping(
|
||||||
|
{AMDGPU::getValueMapping(AMDGPU::SCCRegBankID, Size),
|
||||||
|
AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, Size),
|
||||||
|
AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, Size)}),
|
||||||
|
3); // Num Operands
|
||||||
|
AltMappings.push_back(&SCCMapping);
|
||||||
|
|
||||||
|
const InstructionMapping &SGPRMapping = getInstructionMapping(
|
||||||
|
1, 1, getOperandsMapping(
|
||||||
|
{AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, Size),
|
||||||
|
AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, Size),
|
||||||
|
AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, Size)}),
|
||||||
|
3); // Num Operands
|
||||||
|
AltMappings.push_back(&SGPRMapping);
|
||||||
|
|
||||||
|
const InstructionMapping &VCCMapping0 = getInstructionMapping(
|
||||||
|
2, 10, getOperandsMapping(
|
||||||
|
{AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, Size),
|
||||||
|
AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, Size),
|
||||||
|
AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, Size)}),
|
||||||
|
3); // Num Operands
|
||||||
|
AltMappings.push_back(&VCCMapping0);
|
||||||
|
return AltMappings;
|
||||||
|
}
|
||||||
|
|
||||||
if (Size != 64)
|
if (Size != 64)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -360,7 +397,7 @@ AMDGPURegisterBankInfo::getInstrAlternativeMappings(
|
||||||
3); // Num Operands
|
3); // Num Operands
|
||||||
AltMappings.push_back(&SVMapping);
|
AltMappings.push_back(&SVMapping);
|
||||||
|
|
||||||
// SGPR in LHS is slightly preferrable, so make it VS more expnesive than
|
// SGPR in LHS is slightly preferrable, so make it VS more expensive than
|
||||||
// SV.
|
// SV.
|
||||||
const InstructionMapping &VSMapping = getInstructionMapping(
|
const InstructionMapping &VSMapping = getInstructionMapping(
|
||||||
3, 4, getOperandsMapping(
|
3, 4, getOperandsMapping(
|
||||||
|
@ -1551,8 +1588,56 @@ AMDGPURegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
|
||||||
case AMDGPU::G_XOR: {
|
case AMDGPU::G_XOR: {
|
||||||
unsigned Size = MRI.getType(MI.getOperand(0).getReg()).getSizeInBits();
|
unsigned Size = MRI.getType(MI.getOperand(0).getReg()).getSizeInBits();
|
||||||
if (Size == 1) {
|
if (Size == 1) {
|
||||||
OpdsMapping[0] = OpdsMapping[1] =
|
const RegisterBank *DstBank
|
||||||
OpdsMapping[2] = AMDGPU::getValueMapping(AMDGPU::VCCRegBankID, Size);
|
= getRegBank(MI.getOperand(0).getReg(), MRI, *TRI);
|
||||||
|
|
||||||
|
unsigned TargetBankID = -1;
|
||||||
|
unsigned BankLHS = -1;
|
||||||
|
unsigned BankRHS = -1;
|
||||||
|
if (DstBank) {
|
||||||
|
TargetBankID = DstBank->getID();
|
||||||
|
if (DstBank == &AMDGPU::VCCRegBank) {
|
||||||
|
TargetBankID = AMDGPU::VCCRegBankID;
|
||||||
|
BankLHS = AMDGPU::VCCRegBankID;
|
||||||
|
BankRHS = AMDGPU::VCCRegBankID;
|
||||||
|
} else if (DstBank == &AMDGPU::SCCRegBank) {
|
||||||
|
TargetBankID = AMDGPU::SCCRegBankID;
|
||||||
|
BankLHS = AMDGPU::SGPRRegBankID;
|
||||||
|
BankRHS = AMDGPU::SGPRRegBankID;
|
||||||
|
} else {
|
||||||
|
BankLHS = getRegBankID(MI.getOperand(1).getReg(), MRI, *TRI,
|
||||||
|
AMDGPU::SGPRRegBankID);
|
||||||
|
BankRHS = getRegBankID(MI.getOperand(2).getReg(), MRI, *TRI,
|
||||||
|
AMDGPU::SGPRRegBankID);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
BankLHS = getRegBankID(MI.getOperand(1).getReg(), MRI, *TRI,
|
||||||
|
AMDGPU::VCCRegBankID);
|
||||||
|
BankRHS = getRegBankID(MI.getOperand(2).getReg(), MRI, *TRI,
|
||||||
|
AMDGPU::VCCRegBankID);
|
||||||
|
|
||||||
|
// Both inputs should be true booleans to produce a boolean result.
|
||||||
|
if (BankLHS == AMDGPU::VGPRRegBankID || BankRHS == AMDGPU::VGPRRegBankID) {
|
||||||
|
TargetBankID = AMDGPU::VGPRRegBankID;
|
||||||
|
} else if (BankLHS == AMDGPU::VCCRegBankID || BankRHS == AMDGPU::VCCRegBankID) {
|
||||||
|
TargetBankID = AMDGPU::VCCRegBankID;
|
||||||
|
BankLHS = AMDGPU::VCCRegBankID;
|
||||||
|
BankRHS = AMDGPU::VCCRegBankID;
|
||||||
|
} else if (BankLHS == AMDGPU::SGPRRegBankID && BankRHS == AMDGPU::SGPRRegBankID) {
|
||||||
|
TargetBankID = AMDGPU::SGPRRegBankID;
|
||||||
|
} else if (BankLHS == AMDGPU::SCCRegBankID || BankRHS == AMDGPU::SCCRegBankID) {
|
||||||
|
// The operation must be done on a 32-bit register, but it will set
|
||||||
|
// scc. The result type could interchangably be SCC or SGPR, since
|
||||||
|
// both values will be produced.
|
||||||
|
TargetBankID = AMDGPU::SCCRegBankID;
|
||||||
|
BankLHS = AMDGPU::SGPRRegBankID;
|
||||||
|
BankRHS = AMDGPU::SGPRRegBankID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OpdsMapping[0] = AMDGPU::getValueMapping(TargetBankID, Size);
|
||||||
|
OpdsMapping[1] = AMDGPU::getValueMapping(BankLHS, Size);
|
||||||
|
OpdsMapping[2] = AMDGPU::getValueMapping(BankRHS, Size);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,527 @@
|
||||||
|
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
|
||||||
|
# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-fast | FileCheck -check-prefix=FAST %s
|
||||||
|
# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-greedy | FileCheck -check-prefix=GREEDY %s
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_sgpr_sgpr
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $sgpr0, $sgpr1
|
||||||
|
; FAST-LABEL: name: and_s1_sgpr_sgpr
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; FAST: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:sgpr(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_sgpr_sgpr
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; GREEDY: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:sgpr(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
%0:_(s32) = COPY $sgpr0
|
||||||
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
%2:_(s1) = G_TRUNC %0
|
||||||
|
%3:_(s1) = G_TRUNC %1
|
||||||
|
%4:_(s1) = G_AND %2, %3
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_scc_scc
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $sgpr0, $sgpr1
|
||||||
|
; FAST-LABEL: name: and_s1_scc_scc
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; FAST: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
|
; FAST: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
|
||||||
|
; FAST: [[ICMP1:%[0-9]+]]:scc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[C]]
|
||||||
|
; FAST: [[COPY2:%[0-9]+]]:sgpr(s1) = COPY [[ICMP]](s1)
|
||||||
|
; FAST: [[COPY3:%[0-9]+]]:sgpr(s1) = COPY [[ICMP1]](s1)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:scc(s1) = G_AND [[COPY2]], [[COPY3]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_scc_scc
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; GREEDY: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
|
; GREEDY: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
|
||||||
|
; GREEDY: [[ICMP1:%[0-9]+]]:scc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[C]]
|
||||||
|
; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s1) = COPY [[ICMP]](s1)
|
||||||
|
; GREEDY: [[COPY3:%[0-9]+]]:sgpr(s1) = COPY [[ICMP1]](s1)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:scc(s1) = G_AND [[COPY2]], [[COPY3]]
|
||||||
|
%0:_(s32) = COPY $sgpr0
|
||||||
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
%2:_(s32) = G_CONSTANT i32 0
|
||||||
|
%3:_(s1) = G_ICMP intpred(eq), %0, %2
|
||||||
|
%4:_(s1) = G_ICMP intpred(eq), %1, %2
|
||||||
|
%5:_(s1) = G_AND %3, %4
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_vgpr_vgpr
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $vgpr0, $vgpr1
|
||||||
|
; FAST-LABEL: name: and_s1_vgpr_vgpr
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
|
||||||
|
; FAST: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; FAST: [[TRUNC1:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:vgpr(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_vgpr_vgpr
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
|
||||||
|
; GREEDY: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; GREEDY: [[TRUNC1:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:vgpr(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
%0:_(s32) = COPY $vgpr0
|
||||||
|
%1:_(s32) = COPY $vgpr1
|
||||||
|
%2:_(s1) = G_TRUNC %0
|
||||||
|
%3:_(s1) = G_TRUNC %1
|
||||||
|
%4:_(s1) = G_AND %2, %3
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_vcc_vcc
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $vgpr0, $vgpr1
|
||||||
|
; FAST-LABEL: name: and_s1_vcc_vcc
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
|
||||||
|
; FAST: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
|
; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
|
||||||
|
; FAST: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[C]]
|
||||||
|
; FAST: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[ICMP]], [[ICMP1]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_vcc_vcc
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
|
||||||
|
; GREEDY: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
|
; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
|
||||||
|
; GREEDY: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[C]]
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[ICMP]], [[ICMP1]]
|
||||||
|
%0:_(s32) = COPY $vgpr0
|
||||||
|
%1:_(s32) = COPY $vgpr1
|
||||||
|
%2:_(s32) = G_CONSTANT i32 0
|
||||||
|
%3:_(s1) = G_ICMP intpred(eq), %0, %2
|
||||||
|
%4:_(s1) = G_ICMP intpred(eq), %1, %2
|
||||||
|
%5:_(s1) = G_AND %3, %4
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_sgpr_vgpr
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $sgpr0, $vgpr0
|
||||||
|
; FAST-LABEL: name: and_s1_sgpr_vgpr
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; FAST: [[TRUNC1:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:vgpr(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_sgpr_vgpr
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; GREEDY: [[TRUNC1:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:vgpr(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
%0:_(s32) = COPY $sgpr0
|
||||||
|
%1:_(s32) = COPY $vgpr0
|
||||||
|
%2:_(s1) = G_TRUNC %0
|
||||||
|
%3:_(s1) = G_TRUNC %1
|
||||||
|
%4:_(s1) = G_AND %2, %3
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_vgpr_sgpr
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $vgpr0, $vgpr0
|
||||||
|
; FAST-LABEL: name: and_s1_vgpr_sgpr
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; FAST: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; FAST: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:vgpr(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_vgpr_sgpr
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; GREEDY: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; GREEDY: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:vgpr(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
%0:_(s32) = COPY $vgpr0
|
||||||
|
%1:_(s32) = COPY $sgpr0
|
||||||
|
%2:_(s1) = G_TRUNC %0
|
||||||
|
%3:_(s1) = G_TRUNC %1
|
||||||
|
%4:_(s1) = G_AND %2, %3
|
||||||
|
...
|
||||||
|
|
||||||
|
# FIXME: Should just change the result bank of the scc compare.
|
||||||
|
---
|
||||||
|
name: and_s1_scc_vcc
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $sgpr0, $vgpr0
|
||||||
|
; FAST-LABEL: name: and_s1_scc_vcc
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; FAST: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
|
; FAST: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
|
||||||
|
; FAST: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[C]]
|
||||||
|
; FAST: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[ICMP]](s1)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[ICMP1]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_scc_vcc
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; GREEDY: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
|
; GREEDY: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
|
||||||
|
; GREEDY: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[C]]
|
||||||
|
; GREEDY: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[ICMP]](s1)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[ICMP1]]
|
||||||
|
%0:_(s32) = COPY $sgpr0
|
||||||
|
%1:_(s32) = COPY $vgpr0
|
||||||
|
%2:_(s32) = G_CONSTANT i32 0
|
||||||
|
%3:_(s1) = G_ICMP intpred(eq), %0, %2
|
||||||
|
%4:_(s1) = G_ICMP intpred(eq), %1, %2
|
||||||
|
%5:_(s1) = G_AND %3, %4
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_vcc_scc
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $vgpr0, $vgpr1
|
||||||
|
; FAST-LABEL: name: and_s1_vcc_scc
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
|
||||||
|
; FAST: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
|
; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
|
||||||
|
; FAST: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[C]]
|
||||||
|
; FAST: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[ICMP]], [[ICMP1]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_vcc_scc
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
|
||||||
|
; GREEDY: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
|
; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[C]]
|
||||||
|
; GREEDY: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[C]]
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[ICMP]], [[ICMP1]]
|
||||||
|
%0:_(s32) = COPY $vgpr0
|
||||||
|
%1:_(s32) = COPY $vgpr1
|
||||||
|
%2:_(s32) = G_CONSTANT i32 0
|
||||||
|
%3:_(s1) = G_ICMP intpred(eq), %0, %2
|
||||||
|
%4:_(s1) = G_ICMP intpred(eq), %1, %2
|
||||||
|
%5:_(s1) = G_AND %3, %4
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
|
# Test with a known result bank
|
||||||
|
---
|
||||||
|
name: and_s1_vcc_sgpr_sgpr
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $sgpr0, $sgpr1
|
||||||
|
; FAST-LABEL: name: and_s1_vcc_sgpr_sgpr
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; FAST: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; FAST: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
|
||||||
|
; FAST: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC1]](s1)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[COPY3]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_vcc_sgpr_sgpr
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; GREEDY: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:scc(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
; GREEDY: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[AND]](s1)
|
||||||
|
%0:_(s32) = COPY $sgpr0
|
||||||
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
%2:_(s1) = G_TRUNC %0
|
||||||
|
%3:_(s1) = G_TRUNC %1
|
||||||
|
%4:vcc(s1) = G_AND %2, %3
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_vcc_vgpr_vgpr
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $vgpr0, $vgpr1
|
||||||
|
; FAST-LABEL: name: and_s1_vcc_vgpr_vgpr
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
|
||||||
|
; FAST: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; FAST: [[TRUNC1:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; FAST: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
|
||||||
|
; FAST: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC1]](s1)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[COPY3]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_vcc_vgpr_vgpr
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
|
||||||
|
; GREEDY: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; GREEDY: [[TRUNC1:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; GREEDY: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
|
||||||
|
; GREEDY: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC1]](s1)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[COPY3]]
|
||||||
|
%0:_(s32) = COPY $vgpr0
|
||||||
|
%1:_(s32) = COPY $vgpr1
|
||||||
|
%2:_(s1) = G_TRUNC %0
|
||||||
|
%3:_(s1) = G_TRUNC %1
|
||||||
|
%4:vcc(s1) = G_AND %2, %3
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_vcc_vgpr_sgpr
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $vgpr0, $sgpr0
|
||||||
|
; FAST-LABEL: name: and_s1_vcc_vgpr_sgpr
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; FAST: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; FAST: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; FAST: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
|
||||||
|
; FAST: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC1]](s1)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[COPY3]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_vcc_vgpr_sgpr
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; GREEDY: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; GREEDY: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; GREEDY: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
|
||||||
|
; GREEDY: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC1]](s1)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[COPY3]]
|
||||||
|
%0:_(s32) = COPY $vgpr0
|
||||||
|
%1:_(s32) = COPY $sgpr0
|
||||||
|
%2:_(s1) = G_TRUNC %0
|
||||||
|
%3:_(s1) = G_TRUNC %1
|
||||||
|
%4:vcc(s1) = G_AND %2, %3
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_vcc_sgpr_vgpr
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $vgpr0, $sgpr0
|
||||||
|
; FAST-LABEL: name: and_s1_vcc_sgpr_vgpr
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; FAST: [[TRUNC1:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; FAST: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
|
||||||
|
; FAST: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC1]](s1)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[COPY3]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_vcc_sgpr_vgpr
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
||||||
|
; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; GREEDY: [[TRUNC1:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; GREEDY: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
|
||||||
|
; GREEDY: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC1]](s1)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[COPY3]]
|
||||||
|
%0:_(s32) = COPY $sgpr0
|
||||||
|
%1:_(s32) = COPY $vgpr0
|
||||||
|
%2:_(s1) = G_TRUNC %0
|
||||||
|
%3:_(s1) = G_TRUNC %1
|
||||||
|
%4:vcc(s1) = G_AND %2, %3
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_vgpr_sgpr_sgpr
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $sgpr0, $sgpr1
|
||||||
|
; FAST-LABEL: name: and_s1_vgpr_sgpr_sgpr
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; FAST: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:vgpr(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_vgpr_sgpr_sgpr
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; GREEDY: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:vgpr(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
%0:_(s32) = COPY $sgpr0
|
||||||
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
%2:_(s1) = G_TRUNC %0
|
||||||
|
%3:_(s1) = G_TRUNC %1
|
||||||
|
%4:vgpr(s1) = G_AND %2, %3
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_sgpr_sgpr_sgpr
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $sgpr0, $sgpr1
|
||||||
|
; FAST-LABEL: name: and_s1_sgpr_sgpr_sgpr
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; FAST: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:sgpr(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_sgpr_sgpr_sgpr
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; GREEDY: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:sgpr(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
%0:_(s32) = COPY $sgpr0
|
||||||
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
%2:_(s1) = G_TRUNC %0
|
||||||
|
%3:_(s1) = G_TRUNC %1
|
||||||
|
%4:sgpr(s1) = G_AND %2, %3
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_scc_sgpr_sgpr
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $sgpr0, $sgpr1
|
||||||
|
; FAST-LABEL: name: and_s1_scc_sgpr_sgpr
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; FAST: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:scc(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_scc_sgpr_sgpr
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; GREEDY: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:scc(s1) = G_AND [[TRUNC]], [[TRUNC1]]
|
||||||
|
%0:_(s32) = COPY $sgpr0
|
||||||
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
%2:_(s1) = G_TRUNC %0
|
||||||
|
%3:_(s1) = G_TRUNC %1
|
||||||
|
%4:scc(s1) = G_AND %2, %3
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_scc_scc_scc
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $sgpr0, $sgpr1
|
||||||
|
; FAST-LABEL: name: and_s1_scc_scc_scc
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; FAST: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
|
; FAST: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]
|
||||||
|
; FAST: [[ICMP1:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[C]]
|
||||||
|
; FAST: [[COPY2:%[0-9]+]]:sgpr(s1) = COPY [[ICMP]](s1)
|
||||||
|
; FAST: [[COPY3:%[0-9]+]]:sgpr(s1) = COPY [[ICMP1]](s1)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:scc(s1) = G_AND [[COPY2]], [[COPY3]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_scc_scc_scc
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; GREEDY: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
|
; GREEDY: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]
|
||||||
|
; GREEDY: [[ICMP1:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[C]]
|
||||||
|
; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s1) = COPY [[ICMP]](s1)
|
||||||
|
; GREEDY: [[COPY3:%[0-9]+]]:sgpr(s1) = COPY [[ICMP1]](s1)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:scc(s1) = G_AND [[COPY2]], [[COPY3]]
|
||||||
|
%0:_(s32) = COPY $sgpr0
|
||||||
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
%2:_(s32) = G_CONSTANT i32 0
|
||||||
|
%3:_(s1) = G_ICMP intpred(ne), %0, %2
|
||||||
|
%4:_(s1) = G_ICMP intpred(ne), %1, %2
|
||||||
|
%5:scc(s1) = G_AND %3, %4
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_scc_sgpr_scc
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $sgpr0, $sgpr1
|
||||||
|
; FAST-LABEL: name: and_s1_scc_sgpr_scc
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; FAST: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
|
; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; FAST: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[C]]
|
||||||
|
; FAST: [[COPY2:%[0-9]+]]:sgpr(s1) = COPY [[ICMP]](s1)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:scc(s1) = G_AND [[TRUNC]], [[COPY2]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_scc_sgpr_scc
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; GREEDY: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
|
; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
|
; GREEDY: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[C]]
|
||||||
|
; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s1) = COPY [[ICMP]](s1)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:scc(s1) = G_AND [[TRUNC]], [[COPY2]]
|
||||||
|
%0:_(s32) = COPY $sgpr0
|
||||||
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
%2:_(s32) = G_CONSTANT i32 0
|
||||||
|
%3:_(s1) = G_TRUNC %0
|
||||||
|
%4:_(s1) = G_ICMP intpred(ne), %1, %2
|
||||||
|
%5:scc(s1) = G_AND %3, %4
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: and_s1_scc_scc_sgpr
|
||||||
|
legalized: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $sgpr0, $sgpr1
|
||||||
|
; FAST-LABEL: name: and_s1_scc_scc_sgpr
|
||||||
|
; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; FAST: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
|
; FAST: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]
|
||||||
|
; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; FAST: [[COPY2:%[0-9]+]]:sgpr(s1) = COPY [[ICMP]](s1)
|
||||||
|
; FAST: [[AND:%[0-9]+]]:scc(s1) = G_AND [[COPY2]], [[TRUNC]]
|
||||||
|
; GREEDY-LABEL: name: and_s1_scc_scc_sgpr
|
||||||
|
; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
||||||
|
; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
|
; GREEDY: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
|
; GREEDY: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]
|
||||||
|
; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
|
; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s1) = COPY [[ICMP]](s1)
|
||||||
|
; GREEDY: [[AND:%[0-9]+]]:scc(s1) = G_AND [[COPY2]], [[TRUNC]]
|
||||||
|
%0:_(s32) = COPY $sgpr0
|
||||||
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
%2:_(s32) = G_CONSTANT i32 0
|
||||||
|
%3:_(s1) = G_ICMP intpred(ne), %0, %2
|
||||||
|
%4:_(s1) = G_TRUNC %1
|
||||||
|
%5:scc(s1) = G_AND %3, %4
|
||||||
|
|
||||||
|
...
|
|
@ -67,150 +67,6 @@ body: |
|
||||||
%2:_(s32) = G_AND %0, %1
|
%2:_(s32) = G_AND %0, %1
|
||||||
...
|
...
|
||||||
|
|
||||||
---
|
|
||||||
name: and_i1_scc_scc
|
|
||||||
legalized: true
|
|
||||||
|
|
||||||
body: |
|
|
||||||
bb.0:
|
|
||||||
liveins: $sgpr0, $sgpr1
|
|
||||||
; CHECK-LABEL: name: and_i1_scc_scc
|
|
||||||
; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
|
||||||
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
|
||||||
; CHECK: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]
|
|
||||||
; CHECK: [[ICMP1:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[C]]
|
|
||||||
; CHECK: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[ICMP]](s1)
|
|
||||||
; CHECK: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[ICMP1]](s1)
|
|
||||||
; CHECK: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[COPY3]]
|
|
||||||
; CHECK: S_NOP 0, implicit [[AND]](s1)
|
|
||||||
%0:_(s32) = COPY $sgpr0
|
|
||||||
%1:_(s32) = COPY $sgpr1
|
|
||||||
%2:_(s32) = G_CONSTANT i32 0
|
|
||||||
%4:_(s1) = G_ICMP intpred(ne), %0, %2
|
|
||||||
%5:_(s1) = G_ICMP intpred(ne), %1, %2
|
|
||||||
%6:_(s1) = G_AND %4, %5
|
|
||||||
S_NOP 0, implicit %6
|
|
||||||
...
|
|
||||||
|
|
||||||
---
|
|
||||||
name: and_i1_vcc_vcc
|
|
||||||
legalized: true
|
|
||||||
|
|
||||||
body: |
|
|
||||||
bb.0:
|
|
||||||
liveins: $vgpr0, $vgpr1
|
|
||||||
; CHECK-LABEL: name: and_i1_vcc_vcc
|
|
||||||
; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
|
|
||||||
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
|
||||||
; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]
|
|
||||||
; CHECK: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[C]]
|
|
||||||
; CHECK: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[ICMP]], [[ICMP1]]
|
|
||||||
; CHECK: S_NOP 0, implicit [[AND]](s1)
|
|
||||||
%0:_(s32) = COPY $vgpr0
|
|
||||||
%1:_(s32) = COPY $vgpr1
|
|
||||||
%2:_(s32) = G_CONSTANT i32 0
|
|
||||||
%4:_(s1) = G_ICMP intpred(ne), %0, %2
|
|
||||||
%5:_(s1) = G_ICMP intpred(ne), %1, %2
|
|
||||||
%6:_(s1) = G_AND %4, %5
|
|
||||||
S_NOP 0, implicit %6
|
|
||||||
...
|
|
||||||
|
|
||||||
---
|
|
||||||
name: and_i1_scc_vcc
|
|
||||||
legalized: true
|
|
||||||
|
|
||||||
body: |
|
|
||||||
bb.0:
|
|
||||||
liveins: $sgpr0, $vgpr0
|
|
||||||
; CHECK-LABEL: name: and_i1_scc_vcc
|
|
||||||
; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
|
||||||
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
|
||||||
; CHECK: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]
|
|
||||||
; CHECK: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[C]]
|
|
||||||
; CHECK: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[ICMP]](s1)
|
|
||||||
; CHECK: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[ICMP1]]
|
|
||||||
; CHECK: S_NOP 0, implicit [[AND]](s1)
|
|
||||||
%0:_(s32) = COPY $sgpr0
|
|
||||||
%1:_(s32) = COPY $vgpr0
|
|
||||||
%2:_(s32) = G_CONSTANT i32 0
|
|
||||||
%4:_(s1) = G_ICMP intpred(ne), %0, %2
|
|
||||||
%5:_(s1) = G_ICMP intpred(ne), %1, %2
|
|
||||||
%6:_(s1) = G_AND %4, %5
|
|
||||||
S_NOP 0, implicit %6
|
|
||||||
...
|
|
||||||
|
|
||||||
---
|
|
||||||
name: and_i1_sgpr_trunc_sgpr_trunc
|
|
||||||
legalized: true
|
|
||||||
body: |
|
|
||||||
bb.0.entry:
|
|
||||||
liveins: $sgpr0, $sgpr1
|
|
||||||
; CHECK-LABEL: name: and_i1_sgpr_trunc_sgpr_trunc
|
|
||||||
; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
|
||||||
; CHECK: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
|
||||||
; CHECK: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
|
|
||||||
; CHECK: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC1]](s1)
|
|
||||||
; CHECK: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[COPY3]]
|
|
||||||
; CHECK: S_NOP 0, implicit [[AND]](s1)
|
|
||||||
%0:_(s32) = COPY $sgpr0
|
|
||||||
%1:_(s32) = COPY $sgpr1
|
|
||||||
%2:_(s1) = G_TRUNC %0
|
|
||||||
%3:_(s1) = G_TRUNC %1
|
|
||||||
%4:_(s1) = G_AND %2, %3
|
|
||||||
S_NOP 0, implicit %4
|
|
||||||
|
|
||||||
...
|
|
||||||
|
|
||||||
---
|
|
||||||
name: and_i1_trunc_scc
|
|
||||||
legalized: true
|
|
||||||
body: |
|
|
||||||
bb.0.entry:
|
|
||||||
liveins: $sgpr0, $sgpr1
|
|
||||||
; CHECK-LABEL: name: and_i1_trunc_scc
|
|
||||||
; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
|
||||||
; CHECK: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
|
|
||||||
; CHECK: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
|
|
||||||
; CHECK: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[ICMP]](s1)
|
|
||||||
; CHECK: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[COPY3]]
|
|
||||||
; CHECK: S_NOP 0, implicit [[AND]](s1)
|
|
||||||
%0:_(s32) = COPY $sgpr0
|
|
||||||
%1:_(s32) = COPY $sgpr1
|
|
||||||
%2:_(s1) = G_TRUNC %0
|
|
||||||
%3:_(s1) = G_ICMP intpred(ne), %0, %1
|
|
||||||
%4:_(s1) = G_AND %2, %3
|
|
||||||
S_NOP 0, implicit %4
|
|
||||||
...
|
|
||||||
|
|
||||||
---
|
|
||||||
name: and_i1_s_trunc_vcc
|
|
||||||
legalized: true
|
|
||||||
body: |
|
|
||||||
bb.0.entry:
|
|
||||||
liveins: $sgpr0, $vgpr0
|
|
||||||
; CHECK-LABEL: name: and_i1_s_trunc_vcc
|
|
||||||
; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
|
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
|
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
|
||||||
; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
|
|
||||||
; CHECK: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
|
|
||||||
; CHECK: [[AND:%[0-9]+]]:vcc(s1) = G_AND [[COPY2]], [[ICMP]]
|
|
||||||
; CHECK: S_NOP 0, implicit [[AND]](s1)
|
|
||||||
%0:_(s32) = COPY $sgpr0
|
|
||||||
%1:_(s32) = COPY $vgpr0
|
|
||||||
%2:_(s1) = G_TRUNC %0
|
|
||||||
%3:_(s1) = G_ICMP intpred(ne), %0, %1
|
|
||||||
%4:_(s1) = G_AND %2, %3
|
|
||||||
S_NOP 0, implicit %4
|
|
||||||
...
|
|
||||||
|
|
||||||
---
|
---
|
||||||
name: and_s64_ss
|
name: and_s64_ss
|
||||||
legalized: true
|
legalized: true
|
||||||
|
@ -737,3 +593,4 @@ body: |
|
||||||
%1:_(<2 x s16>) = COPY $vgpr1
|
%1:_(<2 x s16>) = COPY $vgpr1
|
||||||
%2:_(<2 x s16>) = G_AND %0, %1
|
%2:_(<2 x s16>) = G_AND %0, %1
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
|
@ -80,9 +80,9 @@ body: |
|
||||||
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
; CHECK: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]
|
; CHECK: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]
|
||||||
; CHECK: [[ICMP1:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[C]]
|
; CHECK: [[ICMP1:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[C]]
|
||||||
; CHECK: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[ICMP]](s1)
|
; CHECK: [[COPY2:%[0-9]+]]:sgpr(s1) = COPY [[ICMP]](s1)
|
||||||
; CHECK: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[ICMP1]](s1)
|
; CHECK: [[COPY3:%[0-9]+]]:sgpr(s1) = COPY [[ICMP1]](s1)
|
||||||
; CHECK: [[OR:%[0-9]+]]:vcc(s1) = G_OR [[COPY2]], [[COPY3]]
|
; CHECK: [[OR:%[0-9]+]]:scc(s1) = G_OR [[COPY2]], [[COPY3]]
|
||||||
; CHECK: S_NOP 0, implicit [[OR]](s1)
|
; CHECK: S_NOP 0, implicit [[OR]](s1)
|
||||||
%0:_(s32) = COPY $sgpr0
|
%0:_(s32) = COPY $sgpr0
|
||||||
%1:_(s32) = COPY $sgpr1
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
@ -153,9 +153,7 @@ body: |
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
; CHECK: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
; CHECK: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
; CHECK: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
|
; CHECK: [[OR:%[0-9]+]]:sgpr(s1) = G_OR [[TRUNC]], [[TRUNC1]]
|
||||||
; CHECK: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC1]](s1)
|
|
||||||
; CHECK: [[OR:%[0-9]+]]:vcc(s1) = G_OR [[COPY2]], [[COPY3]]
|
|
||||||
; CHECK: S_NOP 0, implicit [[OR]](s1)
|
; CHECK: S_NOP 0, implicit [[OR]](s1)
|
||||||
%0:_(s32) = COPY $sgpr0
|
%0:_(s32) = COPY $sgpr0
|
||||||
%1:_(s32) = COPY $sgpr1
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
@ -177,9 +175,8 @@ body: |
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
; CHECK: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
|
; CHECK: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
|
||||||
; CHECK: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
|
; CHECK: [[COPY2:%[0-9]+]]:sgpr(s1) = COPY [[ICMP]](s1)
|
||||||
; CHECK: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[ICMP]](s1)
|
; CHECK: [[OR:%[0-9]+]]:scc(s1) = G_OR [[TRUNC]], [[COPY2]]
|
||||||
; CHECK: [[OR:%[0-9]+]]:vcc(s1) = G_OR [[COPY2]], [[COPY3]]
|
|
||||||
; CHECK: S_NOP 0, implicit [[OR]](s1)
|
; CHECK: S_NOP 0, implicit [[OR]](s1)
|
||||||
%0:_(s32) = COPY $sgpr0
|
%0:_(s32) = COPY $sgpr0
|
||||||
%1:_(s32) = COPY $sgpr1
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -80,9 +80,9 @@ body: |
|
||||||
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
|
||||||
; CHECK: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]
|
; CHECK: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]
|
||||||
; CHECK: [[ICMP1:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[C]]
|
; CHECK: [[ICMP1:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[C]]
|
||||||
; CHECK: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[ICMP]](s1)
|
; CHECK: [[COPY2:%[0-9]+]]:sgpr(s1) = COPY [[ICMP]](s1)
|
||||||
; CHECK: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[ICMP1]](s1)
|
; CHECK: [[COPY3:%[0-9]+]]:sgpr(s1) = COPY [[ICMP1]](s1)
|
||||||
; CHECK: [[XOR:%[0-9]+]]:vcc(s1) = G_XOR [[COPY2]], [[COPY3]]
|
; CHECK: [[XOR:%[0-9]+]]:scc(s1) = G_XOR [[COPY2]], [[COPY3]]
|
||||||
; CHECK: S_NOP 0, implicit [[XOR]](s1)
|
; CHECK: S_NOP 0, implicit [[XOR]](s1)
|
||||||
%0:_(s32) = COPY $sgpr0
|
%0:_(s32) = COPY $sgpr0
|
||||||
%1:_(s32) = COPY $sgpr1
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
@ -153,9 +153,7 @@ body: |
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
; CHECK: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
; CHECK: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
|
||||||
; CHECK: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
|
; CHECK: [[XOR:%[0-9]+]]:sgpr(s1) = G_XOR [[TRUNC]], [[TRUNC1]]
|
||||||
; CHECK: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC1]](s1)
|
|
||||||
; CHECK: [[XOR:%[0-9]+]]:vcc(s1) = G_XOR [[COPY2]], [[COPY3]]
|
|
||||||
; CHECK: S_NOP 0, implicit [[XOR]](s1)
|
; CHECK: S_NOP 0, implicit [[XOR]](s1)
|
||||||
%0:_(s32) = COPY $sgpr0
|
%0:_(s32) = COPY $sgpr0
|
||||||
%1:_(s32) = COPY $sgpr1
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
@ -177,9 +175,8 @@ body: |
|
||||||
; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
|
||||||
; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
|
||||||
; CHECK: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
|
; CHECK: [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
|
||||||
; CHECK: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
|
; CHECK: [[COPY2:%[0-9]+]]:sgpr(s1) = COPY [[ICMP]](s1)
|
||||||
; CHECK: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[ICMP]](s1)
|
; CHECK: [[XOR:%[0-9]+]]:scc(s1) = G_XOR [[TRUNC]], [[COPY2]]
|
||||||
; CHECK: [[XOR:%[0-9]+]]:vcc(s1) = G_XOR [[COPY2]], [[COPY3]]
|
|
||||||
; CHECK: S_NOP 0, implicit [[XOR]](s1)
|
; CHECK: S_NOP 0, implicit [[XOR]](s1)
|
||||||
%0:_(s32) = COPY $sgpr0
|
%0:_(s32) = COPY $sgpr0
|
||||||
%1:_(s32) = COPY $sgpr1
|
%1:_(s32) = COPY $sgpr1
|
||||||
|
|
Loading…
Reference in New Issue