From 0f9b1c8872ef0bb041b301f9932d3f0be180f425 Mon Sep 17 00:00:00 2001 From: Peter Rong Date: Fri, 21 Apr 2023 16:50:39 -0700 Subject: [PATCH] [FuzzMutate] Correct type cast and add unit test for FCmp This revision fixes an incorrect type cast from Instruction to ICmpInstr, which should have been to FCmpInstr instead. It turns out that StrategiesTest.cpp was missing a test case for InstModificationIRStrategy and FCmp, which is also now implemented in this revision. After this revision, [[ https://reviews.llvm.org/D148854 | llvm-stress in D148854 ]] no longer crashes randomly. Reviewed By: Peter Differential Revision: https://reviews.llvm.org/D148972 --- llvm/lib/FuzzMutate/IRMutator.cpp | 2 +- llvm/unittests/FuzzMutate/StrategiesTest.cpp | 25 ------------------------- 2 files changed, 1 insertion(+), 26 deletions(-) diff --git a/llvm/lib/FuzzMutate/IRMutator.cpp b/llvm/lib/FuzzMutate/IRMutator.cpp index 2d6c83e..b896e3c 100644 --- a/llvm/lib/FuzzMutate/IRMutator.cpp +++ b/llvm/lib/FuzzMutate/IRMutator.cpp @@ -243,7 +243,7 @@ void InstModificationIRStrategy::mutate(Instruction &Inst, break; case Instruction::FCmp: - CI = cast(&Inst); + CI = cast(&Inst); for (unsigned p = CmpInst::FIRST_FCMP_PREDICATE; p <= CmpInst::LAST_FCMP_PREDICATE; p++) { Modifications.push_back( diff --git a/llvm/unittests/FuzzMutate/StrategiesTest.cpp b/llvm/unittests/FuzzMutate/StrategiesTest.cpp index 1de027c..5b87b9c 100644 --- a/llvm/unittests/FuzzMutate/StrategiesTest.cpp +++ b/llvm/unittests/FuzzMutate/StrategiesTest.cpp @@ -245,31 +245,6 @@ TEST(InstModificationIRStrategyTest, ICmp) { EXPECT_TRUE(FoundNE); } -TEST(InstModificationIRStrategyTest, FCmp) { - LLVMContext Ctx; - StringRef Source = "\n\ - define i1 @test(float %x) {\n\ - %a = fcmp oeq float %x, 10.0\n\ - ret i1 %a\n\ - }"; - - auto Mutator = createMutator(); - ASSERT_TRUE(Mutator); - - auto M = parseAssembly(Source.data(), Ctx); - auto &F = *M->begin(); - CmpInst *CI = cast(&*F.begin()->begin()); - ASSERT_TRUE(M && !verifyModule(*M, &errs())); - bool FoundONE = false; - for (int i = 0; i < 100; ++i) { - Mutator->mutateModule(*M, Seed + i, Source.size(), Source.size() + 100); - EXPECT_TRUE(!verifyModule(*M, &errs())); - FoundONE |= CI->getPredicate() == CmpInst::FCMP_ONE; - } - - EXPECT_TRUE(FoundONE); -} - TEST(InstModificationIRStrategyTest, GEP) { LLVMContext Ctx; StringRef Source = "\n\ -- 2.7.4