34TEST(FNegTests, TestFNegScalar)
36 auto Setup = [](llvm::LLVMContext & context)
40 std::unique_ptr<Module> module(
new Module(
"module", context));
42 auto doubleType = Type::getDoubleTy(context);
44 auto functionArguments = std::vector<Type *>({ doubleType });
45 auto functionType = FunctionType::get(doubleType, functionArguments,
false);
46 auto function = Function::Create(functionType, GlobalValue::ExternalLinkage,
"f", module.get());
48 auto basicBlock = BasicBlock::Create(context,
"basicBlock", function);
50 IRBuilder<> builder(basicBlock);
51 auto returnValue = builder.CreateFNeg(function->arg_begin());
52 builder.CreateRet(returnValue);
57 llvm::LLVMContext context;
58 auto llvmModule = Setup(context);
59 llvmModule->print(llvm::errs(),
nullptr);
62 print(*ipgModule, stdout);
64 EXPECT_TRUE(Contains<jlm::llvm::FNegOperation>(*ipgModule,
"f"));
67TEST(FNegTests, TestFNegVector)
69 auto Setup = [](llvm::LLVMContext & context)
73 std::unique_ptr<Module> module(
new Module(
"module", context));
75 auto vectorType = VectorType::get(Type::getDoubleTy(context), 2,
false);
77 auto functionArguments = std::vector<Type *>({ vectorType });
78 auto functionType = FunctionType::get(vectorType, functionArguments,
false);
79 auto function = Function::Create(functionType, GlobalValue::ExternalLinkage,
"f", module.get());
81 auto basicBlock = BasicBlock::Create(context,
"basicBlock", function);
83 IRBuilder<> builder(basicBlock);
84 auto returnValue = builder.CreateFNeg(function->arg_begin());
85 builder.CreateRet(returnValue);
90 llvm::LLVMContext context;
91 auto llvmModule = Setup(context);
92 llvmModule->print(llvm::errs(),
nullptr);
95 print(*ipgModule, stdout);
97 EXPECT_TRUE(Contains<jlm::llvm::VectorUnaryOperation>(*ipgModule,
"f"));