[llvm] [GISel] Add more FP opcodes to CSE (PR #123624)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 21 03:44:01 PST 2025
================
@@ -80,31 +80,106 @@ TEST_F(AArch64GISelMITest, TestCSE) {
auto MIBFAdd2 = CSEB.buildFAdd(s32, Copies[0], Copies[1]);
EXPECT_TRUE(&*MIBFAdd == &*MIBFAdd2);
+ MIBFAdd2.setFlag(MachineInstr::FmNsz);
+ EXPECT_FALSE(&*MIBFAdd == &*MIBFAdd2);
+
+ MIBFAdd2.clearFlag(MachineInstr::FmNsz);
+ EXPECT_TRUE(&*MIBFAdd == &*MIBFAdd2);
+
// Check G_FSUB
auto MIBFSub = CSEB.buildFSub(s32, Copies[0], Copies[1]);
auto MIBFSub2 = CSEB.buildFSub(s32, Copies[0], Copies[1]);
EXPECT_TRUE(&*MIBFSub == &*MIBFSub2);
+ MIBFSub2.setFlag(MachineInstr::FmNoNans);
+ EXPECT_FALSE(&*MIBFSub == &*MIBFSub2);
+
+ MIBFSub2.clearFlag(MachineInstr::FmNoNans);
+ EXPECT_TRUE(&*MIBFSub == &*MIBFSub2);
+
// Check G_FMUL
auto MIBFMul = CSEB.buildFMul(s32, Copies[0], Copies[1]);
auto MIBFMul2 = CSEB.buildFMul(s32, Copies[0], Copies[1]);
EXPECT_TRUE(&*MIBFMul == &*MIBFMul2);
+ MIBFMul2.setFlag(MachineInstr::FmNoNans);
+ EXPECT_FALSE(&*MIBFMul == &*MIBFMul2);
+
+ MIBFMul2.clearFlag(MachineInstr::FmNoNans);
+ EXPECT_TRUE(&*MIBFMul == &*MIBFMul2);
+
// Check G_FDIV
auto MIBFDiv = CSEB.buildFDiv(s32, Copies[0], Copies[1]);
auto MIBFDiv2 = CSEB.buildFDiv(s32, Copies[0], Copies[1]);
EXPECT_TRUE(&*MIBFDiv == &*MIBFDiv2);
- // // Check G_FNEG
- // auto MIBFNeg = CSEB.buildFNeg(s32, Copies[0]);
- // auto MIBFNeg2 = CSEB.buildFNeg(s32, Copies[0]);
- // EXPECT_TRUE(&*MIBFNeg == &*MIBFNeg2);
+ MIBFDiv2.setFlag(MachineInstr::FmNoNans);
+ EXPECT_FALSE(&*MIBFDiv == &*MIBFDiv2);
+
+ MIBFDiv2.clearFlag(MachineInstr::FmNoNans);
+ EXPECT_TRUE(&*MIBFDiv == &*MIBFDiv2);
// Check G_FABS
auto MIBFAbs = CSEB.buildFAbs(s32, Copies[0]);
auto MIBFAbs2 = CSEB.buildFAbs(s32, Copies[0]);
EXPECT_TRUE(&*MIBFAbs == &*MIBFAbs2);
+ MIBFAbs2.setFlag(MachineInstr::FmNsz);
+ EXPECT_FALSE(&*MIBFAbs == &*MIBFAbs2);
+
+ MIBFAbs2.clearFlag(MachineInstr::FmNsz);
+ EXPECT_TRUE(&*MIBFAbs == &*MIBFAbs2);
+
+ // Check G_FMINNUM/F_MAXNUM:
+ auto MIBFMinNum = CSEB.buildInstr(TargetOpcode::G_FMINNUM, {s32},
+ {Copies[0], Copies[1]});
+ auto MIBFMinNum2 = CSEB.buildInstr(TargetOpcode::G_FMINNUM, {s32},
+ {Copies[0], Copies[1]});
+ EXPECT_TRUE(&*MIBFMinNum == &*MIBFMinNum2);
+
+ MIBFMinNum2.setFlag(MachineInstr::FmNsz);
+ EXPECT_FALSE(&*MIBFMinNum == &*MIBFMinNum2);
+
+ MIBFMinNum2.clearFlag(MachineInstr::FmNsz);
+ EXPECT_TRUE(&*MIBFMinNum == &*MIBFMinNum2);
+
+ auto MIBFMaxNum = CSEB.buildInstr(TargetOpcode::G_FMAXNUM, {s32},
----------------
arsenm wrote:
If we don't have wrappers around buildInstr for these, they should be added
https://github.com/llvm/llvm-project/pull/123624
More information about the llvm-commits
mailing list