Skip to content

Commit 147aba3

Browse files
committed
apply setRegTo checks
1 parent ef605a1 commit 147aba3

File tree

1 file changed

+25
-39
lines changed

1 file changed

+25
-39
lines changed

llvm/tools/llvm-exegesis/lib/RISCV/Target.cpp

Lines changed: 25 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ static std::vector<MCInst> loadFP64RegBits32(const MCSubtargetInfo &STI,
149149
MCInstBuilder(RISCV::FCVT_D_W).addReg(Reg).addReg(ScratchIntReg));
150150
return Instrs;
151151
}
152+
=======
153+
>>>>>>>
152154

153155
static MCInst nop() {
154156
// ADDI X0, X0, 0
@@ -771,13 +773,8 @@ class ExegesisRISCVTarget : public ExegesisTarget {
771773

772774
bool matchesArch(Triple::ArchType Arch) const override;
773775

774-
<<<<<<<
775776
std::vector<MCInst> setRegTo(const MCSubtargetInfo &STI, MCRegister Reg,
776777
const APInt &Value) const override;
777-
=======
778-
std::vector<MCInst> setRegTo(const MCSubtargetInfo &STI, unsigned Reg,
779-
const APInt &Value) const override;
780-
>>>>>>>
781778

782779
MCRegister getDefaultLoopCounterRegister(const Triple &) const override;
783780

@@ -894,21 +891,43 @@ bool ExegesisRISCVTarget::matchesArch(Triple::ArchType Arch) const {
894891
return Arch == Triple::riscv32 || Arch == Triple::riscv64;
895892
}
896893

897-
<<<<<<<
898894
std::vector<MCInst> ExegesisRISCVTarget::setRegTo(const MCSubtargetInfo &STI,
899895
MCRegister Reg,
900896
const APInt &Value) const {
901897
if (RISCV::GPRRegClass.contains(Reg))
902898
return loadIntReg(STI, Reg, Value);
903899
if (RISCV::FPR16RegClass.contains(Reg))
904900
return loadFPRegBits(STI, Reg, Value, RISCV::FMV_H_X);
901+
<<<<<<<
905902
if (RISCV::FPR32RegClass.contains(Reg))
906903
return loadFPRegBits(STI, Reg, Value, RISCV::FMV_W_X);
904+
=======
905+
if (RISCV::FPR32RegClass.contains(Reg) &&
906+
STI.hasFeature(RISCV::FeatureStdExtF))
907+
return loadFPImmediate(32, STI, Reg, Value);
908+
>>>>>>>
909+
<<<<<<<
907910
if (RISCV::FPR64RegClass.contains(Reg)) {
908911
if (STI.hasFeature(RISCV::Feature64Bit))
909912
return loadFPRegBits(STI, Reg, Value, RISCV::FMV_D_X);
910913
return loadFP64RegBits32(STI, Reg, Value);
911914
}
915+
=======
916+
if (RISCV::FPR64RegClass.contains(Reg) &&
917+
STI.hasFeature(RISCV::FeatureStdExtD))
918+
return loadFPImmediate(64, STI, Reg, Value);
919+
>>>>>>>
920+
// MERGEME: does this check really required?
921+
if (Reg == RISCV::X0) {
922+
if (Value == 0U)
923+
return {nop()};
924+
errs() << "Cannot write non-zero values to X0\n";
925+
return {};
926+
}
927+
if (RISCV::GPRNoX0RegClass.contains(Reg))
928+
return loadIntImmediate(STI, Reg, Value);
929+
// MERGEME: remove redundant case already presented upper.
930+
// should we skip VectorRegList?
912931
if (Reg == RISCV::FRM || Reg == RISCV::VL || Reg == RISCV::VLENB ||
913932
Reg == RISCV::VTYPE || RISCV::GPRPairRegClass.contains(Reg) ||
914933
RISCV::VRRegClass.contains(Reg) || isVectorRegList(Reg)) {
@@ -925,47 +944,14 @@ std::vector<MCInst> ExegesisRISCVTarget::setRegTo(const MCSubtargetInfo &STI,
925944
<< ", results will be unreliable\n";
926945
return {};
927946
}
928-
=======
929-
std::vector<MCInst> ExegesisRISCVTarget::setRegTo(const MCSubtargetInfo &STI,
930-
unsigned Reg,
931-
const APInt &Value) const {
932-
if (Reg == RISCV::X0) {
933-
if (Value == 0U)
934-
// NOP
935-
return {MCInstBuilder(RISCV::ADDI)
936-
.addReg(RISCV::X0)
937-
.addReg(RISCV::X0)
938-
.addImm(0U)};
939-
errs() << "Cannot write non-zero values to X0\n";
940-
return {};
941-
}
942-
943-
if (RISCV::GPRNoX0RegClass.contains(Reg))
944-
return loadIntImmediate(STI, Reg, Value);
945-
if (RISCV::FPR32RegClass.contains(Reg) &&
946-
STI.hasFeature(RISCV::FeatureStdExtF))
947-
return loadFPImmediate(32, STI, Reg, Value);
948-
if (RISCV::FPR64RegClass.contains(Reg) &&
949-
STI.hasFeature(RISCV::FeatureStdExtD))
950-
return loadFPImmediate(64, STI, Reg, Value);
951-
return {};
952-
}
953-
>>>>>>>
954947

955-
<<<<<<<
956948
const MCPhysReg DefaultLoopCounterReg = RISCV::X31; // t6
957949
const MCPhysReg ScratchMemoryReg = RISCV::X10; // a0
958950

959951
MCRegister
960952
ExegesisRISCVTarget::getDefaultLoopCounterRegister(const Triple &) const {
961953
return DefaultLoopCounterReg;
962954
}
963-
=======
964-
unsigned
965-
ExegesisRISCVTarget::getDefaultLoopCounterRegister(const Triple &TT) const {
966-
return RISCV::X5;
967-
}
968-
>>>>>>>
969955

970956
<<<<<<<
971957
void ExegesisRISCVTarget::decrementLoopCounterAndJump(

0 commit comments

Comments
 (0)