Changeset View
Changeset View
Standalone View
Standalone View
llvm/trunk/unittests/IR/IRBuilderTest.cpp
Show First 20 Lines • Show All 116 Lines • ▼ Show 20 Lines | TEST_F(IRBuilderTest, Intrinsics) { | ||||
Call = Builder.CreateIntrinsic(Intrinsic::fma, {V->getType()}, {V, V, V}, I); | Call = Builder.CreateIntrinsic(Intrinsic::fma, {V->getType()}, {V, V, V}, I); | ||||
II = cast<IntrinsicInst>(Call); | II = cast<IntrinsicInst>(Call); | ||||
EXPECT_EQ(II->getIntrinsicID(), Intrinsic::fma); | EXPECT_EQ(II->getIntrinsicID(), Intrinsic::fma); | ||||
EXPECT_TRUE(II->hasNoInfs()); | EXPECT_TRUE(II->hasNoInfs()); | ||||
EXPECT_FALSE(II->hasNoNaNs()); | EXPECT_FALSE(II->hasNoNaNs()); | ||||
} | } | ||||
TEST_F(IRBuilderTest, ConstrainedFP) { | |||||
IRBuilder<> Builder(BB); | |||||
Value *V; | |||||
CallInst *Call; | |||||
IntrinsicInst *II; | |||||
V = Builder.CreateLoad(GV); | |||||
// See if we get constrained intrinsics instead of non-constrained | |||||
// instructions. | |||||
Builder.setIsFPConstrained(true); | |||||
V = Builder.CreateFAdd(V, V); | |||||
ASSERT_TRUE(isa<IntrinsicInst>(V)); | |||||
II = cast<IntrinsicInst>(V); | |||||
EXPECT_EQ(II->getIntrinsicID(), Intrinsic::experimental_constrained_fadd); | |||||
V = Builder.CreateFSub(V, V); | |||||
ASSERT_TRUE(isa<IntrinsicInst>(V)); | |||||
II = cast<IntrinsicInst>(V); | |||||
EXPECT_EQ(II->getIntrinsicID(), Intrinsic::experimental_constrained_fsub); | |||||
V = Builder.CreateFMul(V, V); | |||||
ASSERT_TRUE(isa<IntrinsicInst>(V)); | |||||
II = cast<IntrinsicInst>(V); | |||||
EXPECT_EQ(II->getIntrinsicID(), Intrinsic::experimental_constrained_fmul); | |||||
V = Builder.CreateFDiv(V, V); | |||||
ASSERT_TRUE(isa<IntrinsicInst>(V)); | |||||
II = cast<IntrinsicInst>(V); | |||||
EXPECT_EQ(II->getIntrinsicID(), Intrinsic::experimental_constrained_fdiv); | |||||
V = Builder.CreateFRem(V, V); | |||||
ASSERT_TRUE(isa<IntrinsicInst>(V)); | |||||
II = cast<IntrinsicInst>(V); | |||||
EXPECT_EQ(II->getIntrinsicID(), Intrinsic::experimental_constrained_frem); | |||||
// Verify the codepaths for setting and overriding the default metadata. | |||||
V = Builder.CreateFAdd(V, V); | |||||
ASSERT_TRUE(isa<ConstrainedFPIntrinsic>(V)); | |||||
auto *CII = cast<ConstrainedFPIntrinsic>(V); | |||||
ASSERT_TRUE(CII->getExceptionBehavior() == ConstrainedFPIntrinsic::ebStrict); | |||||
ASSERT_TRUE(CII->getRoundingMode() == ConstrainedFPIntrinsic::rmDynamic); | |||||
Builder.setDefaultConstrainedExcept(ConstrainedFPIntrinsic::ebIgnore); | |||||
Builder.setDefaultConstrainedRounding(ConstrainedFPIntrinsic::rmUpward); | |||||
V = Builder.CreateFAdd(V, V); | |||||
CII = cast<ConstrainedFPIntrinsic>(V); | |||||
ASSERT_TRUE(CII->getExceptionBehavior() == ConstrainedFPIntrinsic::ebIgnore); | |||||
ASSERT_TRUE(CII->getRoundingMode() == ConstrainedFPIntrinsic::rmUpward); | |||||
// Now override the defaults. | |||||
Call = Builder.CreateConstrainedFPBinOp( | |||||
Intrinsic::experimental_constrained_fadd, V, V, nullptr, "", nullptr, | |||||
ConstrainedFPIntrinsic::rmDownward, ConstrainedFPIntrinsic::ebMayTrap); | |||||
CII = cast<ConstrainedFPIntrinsic>(Call); | |||||
EXPECT_EQ(CII->getIntrinsicID(), Intrinsic::experimental_constrained_fadd); | |||||
ASSERT_TRUE(CII->getExceptionBehavior() == ConstrainedFPIntrinsic::ebMayTrap); | |||||
ASSERT_TRUE(CII->getRoundingMode() == ConstrainedFPIntrinsic::rmDownward); | |||||
Builder.CreateRetVoid(); | |||||
EXPECT_FALSE(verifyModule(*M)); | |||||
} | |||||
TEST_F(IRBuilderTest, Lifetime) { | TEST_F(IRBuilderTest, Lifetime) { | ||||
IRBuilder<> Builder(BB); | IRBuilder<> Builder(BB); | ||||
AllocaInst *Var1 = Builder.CreateAlloca(Builder.getInt8Ty()); | AllocaInst *Var1 = Builder.CreateAlloca(Builder.getInt8Ty()); | ||||
AllocaInst *Var2 = Builder.CreateAlloca(Builder.getInt32Ty()); | AllocaInst *Var2 = Builder.CreateAlloca(Builder.getInt32Ty()); | ||||
AllocaInst *Var3 = Builder.CreateAlloca(Builder.getInt8Ty(), | AllocaInst *Var3 = Builder.CreateAlloca(Builder.getInt8Ty(), | ||||
Builder.getInt32(123)); | Builder.getInt32(123)); | ||||
CallInst *Start1 = Builder.CreateLifetimeStart(Var1); | CallInst *Start1 = Builder.CreateLifetimeStart(Var1); | ||||
▲ Show 20 Lines • Show All 615 Lines • Show Last 20 Lines |