From: Peter Rong Date: Fri, 21 Apr 2023 23:50:39 +0000 (-0700) Subject: [FuzzMutate] Correct type cast and add unit test for FCmp X-Git-Tag: upstream/17.0.6~10417 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0f9b1c8872ef0bb041b301f9932d3f0be180f425;p=platform%2Fupstream%2Fllvm.git [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 --- 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\