X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=unittests%2FIR%2FIRBuilderTest.cpp;h=e0da018d7bfe5638df642415b79b56b8ab19a0e3;hp=0c602ed2b789e6f47e2c651e5160a4457fef2bd5;hb=a3a48d96c997f098f504a250ccd38dcb773c233c;hpb=49f241bc5a4725b7a2493a17bb92e7480c46a54e diff --git a/unittests/IR/IRBuilderTest.cpp b/unittests/IR/IRBuilderTest.cpp index 0c602ed2b78..e0da018d7bf 100644 --- a/unittests/IR/IRBuilderTest.cpp +++ b/unittests/IR/IRBuilderTest.cpp @@ -131,7 +131,7 @@ TEST_F(IRBuilderTest, GetIntTy) { TEST_F(IRBuilderTest, FastMathFlags) { IRBuilder<> Builder(BB); Value *F, *FC; - Instruction *FDiv, *FAdd, *FCmp; + Instruction *FDiv, *FAdd, *FCmp, *FCall; F = Builder.CreateLoad(GV); F = Builder.CreateFAdd(F, F); @@ -206,6 +206,26 @@ TEST_F(IRBuilderTest, FastMathFlags) { FCmp = cast(FC); EXPECT_TRUE(FCmp->hasAllowReciprocal()); + Builder.clearFastMathFlags(); + + // Test a call with FMF. + auto CalleeTy = FunctionType::get(Type::getFloatTy(Ctx), + /*isVarArg=*/false); + auto Callee = + Function::Create(CalleeTy, Function::ExternalLinkage, "", M.get()); + + FCall = Builder.CreateCall(Callee, None); + EXPECT_FALSE(FCall->hasNoNaNs()); + + FMF.clear(); + FMF.setNoNaNs(); + Builder.SetFastMathFlags(FMF); + + FCall = Builder.CreateCall(Callee, None); + EXPECT_TRUE(Builder.getFastMathFlags().any()); + EXPECT_TRUE(Builder.getFastMathFlags().NoNaNs); + EXPECT_TRUE(FCall->hasNoNaNs()); + Builder.clearFastMathFlags(); // To test a copy, make sure that a '0' and a '1' change state.