Skip to content

Commit 133e50d

Browse files
committed
[RISCV][GISel] Directly emit X0 from getICMPOperandsForBranch instead of using buildConstant+selectConstant.
This is simpler to implement and matches what SelectionDAG emits. Also allows us to make getICMPOperandsForBranch a static function.
1 parent 1a2e77c commit 133e50d

File tree

3 files changed

+10
-24
lines changed

3 files changed

+10
-24
lines changed

llvm/lib/Target/RISCV/GISel/RISCVInstructionSelector.cpp

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,6 @@ class RISCVInstructionSelector : public InstructionSelector {
9191
void renderImm(MachineInstrBuilder &MIB, const MachineInstr &MI,
9292
int OpIdx) const;
9393

94-
/// Sets CC, LHS, and RHS so that they form an equivelent G_ICMP (ICMPCC, LHS,
95-
/// RHS) to that of MI, but whose condition code matches one of the
96-
/// comparisons supported directly by branches in the RISC-V ISA.
97-
void getICMPOperandsForBranch(MachineInstr &MI, MachineIRBuilder &MIB,
98-
MachineRegisterInfo &MRI, RISCVCC::CondCode &CC,
99-
Register &LHS, Register &RHS) const;
100-
10194
void renderTrailingZeros(MachineInstrBuilder &MIB, const MachineInstr &MI,
10295
int OpIdx) const;
10396

@@ -594,9 +587,10 @@ static RISCVCC::CondCode getRISCVCCFromICMP(CmpInst::Predicate CC) {
594587
}
595588
}
596589

597-
void RISCVInstructionSelector::getICMPOperandsForBranch(
598-
MachineInstr &MI, MachineIRBuilder &MIB, MachineRegisterInfo &MRI,
599-
RISCVCC::CondCode &CC, Register &LHS, Register &RHS) const {
590+
static void getICMPOperandsForBranch(MachineInstr &MI, MachineIRBuilder &MIB,
591+
MachineRegisterInfo &MRI,
592+
RISCVCC::CondCode &CC, Register &LHS,
593+
Register &RHS) {
600594
assert(MI.getOpcode() == TargetOpcode::G_ICMP);
601595
CmpInst::Predicate ICMPCC =
602596
static_cast<CmpInst::Predicate>(MI.getOperand(1).getPredicate());
@@ -609,21 +603,17 @@ void RISCVInstructionSelector::getICMPOperandsForBranch(
609603
case CmpInst::Predicate::ICMP_SGT:
610604
// Convert X > -1 to X >= 0
611605
if (*Constant == -1) {
612-
MachineInstr *Zero = MIB.buildConstant(MRI.getType(RHS), 0);
613-
selectConstant(*Zero, MIB, MRI);
614606
CC = RISCVCC::COND_GE;
615-
RHS = Zero->getOperand(0).getReg();
607+
RHS = RISCV::X0;
616608
return;
617609
}
618610
break;
619611
case CmpInst::Predicate::ICMP_SLT:
620612
// Convert X < 1 to 0 >= X
621613
if (*Constant == 1) {
622-
MachineInstr *Zero = MIB.buildConstant(MRI.getType(RHS), 0);
623-
selectConstant(*Zero, MIB, MRI);
624614
CC = RISCVCC::COND_GE;
625615
RHS = LHS;
626-
LHS = Zero->getOperand(0).getReg();
616+
LHS = RISCV::X0;
627617
return;
628618
}
629619
break;

llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/select-rv32.mir

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,7 @@ body: |
128128
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
129129
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
130130
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x12
131-
; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x0
132-
; CHECK-NEXT: [[Select_GPR_Using_CC_GPR:%[0-9]+]]:gpr = Select_GPR_Using_CC_GPR [[COPY2]], [[COPY3]], 3, [[COPY]], [[COPY1]]
131+
; CHECK-NEXT: [[Select_GPR_Using_CC_GPR:%[0-9]+]]:gpr = Select_GPR_Using_CC_GPR [[COPY2]], $x0, 3, [[COPY]], [[COPY1]]
133132
; CHECK-NEXT: $x10 = COPY [[Select_GPR_Using_CC_GPR]]
134133
; CHECK-NEXT: PseudoRET implicit $x10
135134
%0:gprb(s32) = COPY $x10
@@ -159,8 +158,7 @@ body: |
159158
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
160159
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
161160
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x12
162-
; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x0
163-
; CHECK-NEXT: [[Select_GPR_Using_CC_GPR:%[0-9]+]]:gpr = Select_GPR_Using_CC_GPR [[COPY3]], [[COPY2]], 3, [[COPY]], [[COPY1]]
161+
; CHECK-NEXT: [[Select_GPR_Using_CC_GPR:%[0-9]+]]:gpr = Select_GPR_Using_CC_GPR $x0, [[COPY2]], 3, [[COPY]], [[COPY1]]
164162
; CHECK-NEXT: $x10 = COPY [[Select_GPR_Using_CC_GPR]]
165163
; CHECK-NEXT: PseudoRET implicit $x10
166164
%0:gprb(s32) = COPY $x10

llvm/test/CodeGen/RISCV/GlobalISel/instruction-select/select-rv64.mir

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,7 @@ body: |
128128
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
129129
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
130130
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x12
131-
; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x0
132-
; CHECK-NEXT: [[Select_GPR_Using_CC_GPR:%[0-9]+]]:gpr = Select_GPR_Using_CC_GPR [[COPY2]], [[COPY3]], 3, [[COPY]], [[COPY1]]
131+
; CHECK-NEXT: [[Select_GPR_Using_CC_GPR:%[0-9]+]]:gpr = Select_GPR_Using_CC_GPR [[COPY2]], $x0, 3, [[COPY]], [[COPY1]]
133132
; CHECK-NEXT: $x10 = COPY [[Select_GPR_Using_CC_GPR]]
134133
; CHECK-NEXT: PseudoRET implicit $x10
135134
%0:gprb(s64) = COPY $x10
@@ -159,8 +158,7 @@ body: |
159158
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x10
160159
; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr = COPY $x11
161160
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr = COPY $x12
162-
; CHECK-NEXT: [[COPY3:%[0-9]+]]:gpr = COPY $x0
163-
; CHECK-NEXT: [[Select_GPR_Using_CC_GPR:%[0-9]+]]:gpr = Select_GPR_Using_CC_GPR [[COPY3]], [[COPY2]], 3, [[COPY]], [[COPY1]]
161+
; CHECK-NEXT: [[Select_GPR_Using_CC_GPR:%[0-9]+]]:gpr = Select_GPR_Using_CC_GPR $x0, [[COPY2]], 3, [[COPY]], [[COPY1]]
164162
; CHECK-NEXT: $x10 = COPY [[Select_GPR_Using_CC_GPR]]
165163
; CHECK-NEXT: PseudoRET implicit $x10
166164
%0:gprb(s64) = COPY $x10

0 commit comments

Comments
 (0)