1 //===- unittests/Passes/PassBuilderBindingsTest.cpp -----------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "llvm-c/Core.h"
10 #include "llvm-c/Transforms/PassBuilder.h"
11 #include "llvm-c/Types.h"
12 #include "gtest/gtest.h"
16 class PassBuilderCTest
: public testing::Test
{
17 void SetUp() override
{
18 LLVMInitializeAllTargetInfos();
19 char *Triple
= LLVMGetDefaultTargetTriple();
22 if (LLVMGetTargetFromTriple(Triple
, &Target
, &Err
)) {
23 FAIL() << "Failed to create target from default triple (" << Triple
26 TM
= LLVMCreateTargetMachine(Target
, Triple
, "generic", "",
27 LLVMCodeGenLevelDefault
, LLVMRelocDefault
,
28 LLVMCodeModelDefault
);
29 LLVMDisposeMessage(Triple
);
30 Context
= LLVMContextCreate();
31 Module
= LLVMModuleCreateWithNameInContext("test", Context
);
34 void TearDown() override
{
35 LLVMDisposeTargetMachine(TM
);
36 LLVMDisposeModule(Module
);
37 LLVMContextDispose(Context
);
41 LLVMTargetMachineRef TM
;
43 LLVMContextRef Context
;
46 TEST_F(PassBuilderCTest
, Basic
) {
47 LLVMPassBuilderOptionsRef Options
= LLVMCreatePassBuilderOptions();
48 LLVMPassBuilderOptionsSetLoopUnrolling(Options
, 1);
49 LLVMPassBuilderOptionsSetVerifyEach(Options
, 1);
50 LLVMPassBuilderOptionsSetDebugLogging(Options
, 0);
51 if (LLVMErrorRef E
= LLVMRunPasses(Module
, "default<O2>", TM
, Options
)) {
52 char *Msg
= LLVMGetErrorMessage(E
);
54 LLVMDisposePassBuilderOptions(Options
);
55 FAIL() << "Failed to run passes: " << Msg
;
57 LLVMDisposePassBuilderOptions(Options
);
60 TEST_F(PassBuilderCTest
, InvalidPassIsError
) {
61 LLVMPassBuilderOptionsRef Options
= LLVMCreatePassBuilderOptions();
62 LLVMErrorRef E1
= LLVMRunPasses(Module
, "", TM
, Options
);
63 LLVMErrorRef E2
= LLVMRunPasses(Module
, "does-not-exist-pass", TM
, Options
);
68 LLVMDisposePassBuilderOptions(Options
);