[llvm] [SandboxIR] Implement CmpInst, FCmpInst, and ICmpInst (PR #106301)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 30 11:23:38 PDT 2024
================
@@ -1439,6 +1439,49 @@ define void @foo(i8 %arg0, i8 %arg1, i8 %arg2) {
EXPECT_EQ(PHI->getIncomingValue(1), Arg1);
}
+void checkCmpInst(sandboxir::Context &Ctx, sandboxir::CmpInst *Cmp) {
+ Ctx.save();
+ auto OrigP = Cmp->getPredicate();
+ auto NewP = Cmp->getSwappedPredicate();
+ Cmp->setPredicate(NewP);
+ EXPECT_EQ(Cmp->getPredicate(), NewP);
+ Ctx.revert();
+ EXPECT_EQ(Cmp->getPredicate(), OrigP);
+
+ Ctx.save();
+ auto OrigOp0 = Cmp->getOperand(0);
+ auto OrigOp1 = Cmp->getOperand(1);
+ Cmp->swapOperands();
+ EXPECT_EQ(Cmp->getPredicate(), NewP);
+ EXPECT_EQ(Cmp->getOperand(0), OrigOp1);
+ EXPECT_EQ(Cmp->getOperand(1), OrigOp0);
+ Ctx.revert();
+ EXPECT_EQ(Cmp->getPredicate(), OrigP);
+ EXPECT_EQ(Cmp->getOperand(0), OrigOp0);
+ EXPECT_EQ(Cmp->getOperand(1), OrigOp1);
+}
+
+TEST_F(TrackerTest, CmpInst) {
+ SCOPED_TRACE("TrackerTest sandboxir::CmpInst tests");
+ parseIR(C, R"IR(
+define void @foo(i64 %i0, i64 %i1, float %f0, float %f1) {
+ %foeq = fcmp ogt float %f0, %f1
+ %ioeq = icmp uge i64 %i0, %i1
+
+ ret void
+}
+)IR");
+ Function &LLVMF = *M->getFunction("foo");
+ sandboxir::Context Ctx(C);
+ auto &F = *Ctx.createFunction(&LLVMF);
+ auto *BB = &*F.begin();
+ auto It = BB->begin();
+ auto *FCmp = cast<sandboxir::FCmpInst>(&*It++);
+ checkCmpInst(Ctx, FCmp);
+ auto *ICmp = cast<sandboxir::ICmpInst>(&*It++);
+ checkCmpInst(Ctx, ICmp);
+}
----------------
Sterling-Augustine wrote:
Done in SandboxIRTest.
https://github.com/llvm/llvm-project/pull/106301
More information about the llvm-commits
mailing list