[unittests] Make some parseIR calls more readable, NFC

llvm-svn: 326620
This commit is contained in:
Vedant Kumar 2018-03-02 21:36:33 +00:00
parent 8dad0e6cce
commit 1425e04146
1 changed files with 140 additions and 146 deletions

View File

@ -113,37 +113,31 @@ TEST(Local, ReplaceDbgDeclare) {
// Original C source to get debug info for a local variable:
// void f() { int x; }
std::unique_ptr<Module> M = parseIR(
C,
"define void @f() !dbg !8 {\n"
"entry:\n"
" %x = alloca i32, align 4\n"
" call void @llvm.dbg.declare(metadata i32* %x, metadata !11, metadata "
"!DIExpression()), !dbg !13\n"
" call void @llvm.dbg.declare(metadata i32* %x, metadata !11, metadata "
"!DIExpression()), !dbg !13\n"
" ret void, !dbg !14\n"
"}\n"
"declare void @llvm.dbg.declare(metadata, metadata, metadata)\n"
"!llvm.dbg.cu = !{!0}\n"
"!llvm.module.flags = !{!3, !4}\n"
"!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "
"\"clang version 6.0.0 \", isOptimized: false, runtimeVersion: 0, "
"emissionKind: FullDebug, enums: !2)\n"
"!1 = !DIFile(filename: \"t2.c\", directory: \"foo\")\n"
"!2 = !{}\n"
"!3 = !{i32 2, !\"Dwarf Version\", i32 4}\n"
"!4 = !{i32 2, !\"Debug Info Version\", i32 3}\n"
"!8 = distinct !DISubprogram(name: \"f\", scope: !1, file: !1, line: 1, "
"type: !9, isLocal: false, isDefinition: true, scopeLine: 1, "
"isOptimized: false, unit: !0, variables: !2)\n"
"!9 = !DISubroutineType(types: !10)\n"
"!10 = !{null}\n"
"!11 = !DILocalVariable(name: \"x\", scope: !8, file: !1, line: 2, type: "
"!12)\n"
"!12 = !DIBasicType(name: \"int\", size: 32, encoding: DW_ATE_signed)\n"
"!13 = !DILocation(line: 2, column: 7, scope: !8)\n"
"!14 = !DILocation(line: 3, column: 1, scope: !8)\n");
std::unique_ptr<Module> M = parseIR(C,
R"(
define void @f() !dbg !8 {
entry:
%x = alloca i32, align 4
call void @llvm.dbg.declare(metadata i32* %x, metadata !11, metadata !DIExpression()), !dbg !13
call void @llvm.dbg.declare(metadata i32* %x, metadata !11, metadata !DIExpression()), !dbg !13
ret void, !dbg !14
}
declare void @llvm.dbg.declare(metadata, metadata, metadata)
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!3, !4}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 6.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
!1 = !DIFile(filename: "t2.c", directory: "foo")
!2 = !{}
!3 = !{i32 2, !"Dwarf Version", i32 4}
!4 = !{i32 2, !"Debug Info Version", i32 3}
!8 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, unit: !0, variables: !2)
!9 = !DISubroutineType(types: !10)
!10 = !{null}
!11 = !DILocalVariable(name: "x", scope: !8, file: !1, line: 2, type: !12)
!12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!13 = !DILocation(line: 2, column: 7, scope: !8)
!14 = !DILocation(line: 3, column: 1, scope: !8)
)");
auto *GV = M->getNamedValue("f");
ASSERT_TRUE(GV);
auto *F = dyn_cast<Function>(GV);
@ -182,23 +176,24 @@ static void runWithDomTree(
TEST(Local, MergeBasicBlockIntoOnlyPred) {
LLVMContext C;
std::unique_ptr<Module> M = parseIR(
C,
"define i32 @f(i8* %str) {\n"
"entry:\n"
" br label %bb2.i\n"
"bb2.i: ; preds = %bb4.i, %entry\n"
" br i1 false, label %bb4.i, label %base2flt.exit204\n"
"bb4.i: ; preds = %bb2.i\n"
" br i1 false, label %base2flt.exit204, label %bb2.i\n"
"bb10.i196.bb7.i197_crit_edge: ; No predecessors!\n"
" br label %bb7.i197\n"
"bb7.i197: ; preds = %bb10.i196.bb7.i197_crit_edge\n"
" %.reg2mem.0 = phi i32 [ %.reg2mem.0, %bb10.i196.bb7.i197_crit_edge ]\n"
" br i1 undef, label %base2flt.exit204, label %base2flt.exit204\n"
"base2flt.exit204: ; preds = %bb7.i197, %bb7.i197, %bb2.i, %bb4.i\n"
" ret i32 0\n"
"}\n");
std::unique_ptr<Module> M = parseIR(C,
R"(
define i32 @f(i8* %str) {
entry:
br label %bb2.i
bb2.i: ; preds = %bb4.i, %entry
br i1 false, label %bb4.i, label %base2flt.exit204
bb4.i: ; preds = %bb2.i
br i1 false, label %base2flt.exit204, label %bb2.i
bb10.i196.bb7.i197_crit_edge: ; No predecessors!
br label %bb7.i197
bb7.i197: ; preds = %bb10.i196.bb7.i197_crit_edge
%.reg2mem.0 = phi i32 [ %.reg2mem.0, %bb10.i196.bb7.i197_crit_edge ]
br i1 undef, label %base2flt.exit204, label %base2flt.exit204
base2flt.exit204: ; preds = %bb7.i197, %bb7.i197, %bb2.i, %bb4.i
ret i32 0
}
)");
runWithDomTree(
*M, "f", [&](Function &F, DominatorTree *DT) {
for (Function::iterator I = F.begin(), E = F.end(); I != E;) {
@ -216,104 +211,103 @@ TEST(Local, MergeBasicBlockIntoOnlyPred) {
TEST(Local, ConstantFoldTerminator) {
LLVMContext C;
std::unique_ptr<Module> M = parseIR(
C,
"define void @br_same_dest() {\n"
"entry:\n"
" br i1 false, label %bb0, label %bb0\n"
"bb0:\n"
" ret void\n"
"}\n"
"\n"
"define void @br_different_dest() {\n"
"entry:\n"
" br i1 true, label %bb0, label %bb1\n"
"bb0:\n"
" br label %exit\n"
"bb1:\n"
" br label %exit\n"
"exit:\n"
" ret void\n"
"}\n"
"\n"
"define void @switch_2_different_dest() {\n"
"entry:\n"
" switch i32 0, label %default [ i32 0, label %bb0 ]\n"
"default:\n"
" ret void\n"
"bb0:\n"
" ret void\n"
"}\n"
"define void @switch_2_different_dest_default() {\n"
"entry:\n"
" switch i32 1, label %default [ i32 0, label %bb0 ]\n"
"default:\n"
" ret void\n"
"bb0:\n"
" ret void\n"
"}\n"
"define void @switch_3_different_dest() {\n"
"entry:\n"
" switch i32 0, label %default [ i32 0, label %bb0\n"
" i32 1, label %bb1 ]\n"
"default:\n"
" ret void\n"
"bb0:\n"
" ret void\n"
"bb1:\n"
" ret void\n"
"}\n"
"\n"
"define void @switch_variable_2_default_dest(i32 %arg) {\n"
"entry:\n"
" switch i32 %arg, label %default [ i32 0, label %default ]\n"
"default:\n"
" ret void\n"
"}\n"
"\n"
"define void @switch_constant_2_default_dest() {\n"
"entry:\n"
" switch i32 1, label %default [ i32 0, label %default ]\n"
"default:\n"
" ret void\n"
"}\n"
"\n"
"define void @switch_constant_3_repeated_dest() {\n"
"entry:\n"
" switch i32 0, label %default [ i32 0, label %bb0\n"
" i32 1, label %bb0 ]\n"
" bb0:\n"
" ret void\n"
"default:\n"
" ret void\n"
"}\n"
"\n"
"define void @indirectbr() {\n"
"entry:\n"
" indirectbr i8* blockaddress(@indirectbr, %bb0), [label %bb0, label %bb1]\n"
"bb0:\n"
" ret void\n"
"bb1:\n"
" ret void\n"
"}\n"
"\n"
"define void @indirectbr_repeated() {\n"
"entry:\n"
" indirectbr i8* blockaddress(@indirectbr_repeated, %bb0), [label %bb0, label %bb0]\n"
"bb0:\n"
" ret void\n"
"}\n"
"\n"
"define void @indirectbr_unreachable() {\n"
"entry:\n"
" indirectbr i8* blockaddress(@indirectbr_unreachable, %bb0), [label %bb1]\n"
"bb0:\n"
" ret void\n"
"bb1:\n"
" ret void\n"
"}\n"
"\n"
);
std::unique_ptr<Module> M = parseIR(C,
R"(
define void @br_same_dest() {
entry:
br i1 false, label %bb0, label %bb0
bb0:
ret void
}
define void @br_different_dest() {
entry:
br i1 true, label %bb0, label %bb1
bb0:
br label %exit
bb1:
br label %exit
exit:
ret void
}
define void @switch_2_different_dest() {
entry:
switch i32 0, label %default [ i32 0, label %bb0 ]
default:
ret void
bb0:
ret void
}
define void @switch_2_different_dest_default() {
entry:
switch i32 1, label %default [ i32 0, label %bb0 ]
default:
ret void
bb0:
ret void
}
define void @switch_3_different_dest() {
entry:
switch i32 0, label %default [ i32 0, label %bb0
i32 1, label %bb1 ]
default:
ret void
bb0:
ret void
bb1:
ret void
}
define void @switch_variable_2_default_dest(i32 %arg) {
entry:
switch i32 %arg, label %default [ i32 0, label %default ]
default:
ret void
}
define void @switch_constant_2_default_dest() {
entry:
switch i32 1, label %default [ i32 0, label %default ]
default:
ret void
}
define void @switch_constant_3_repeated_dest() {
entry:
switch i32 0, label %default [ i32 0, label %bb0
i32 1, label %bb0 ]
bb0:
ret void
default:
ret void
}
define void @indirectbr() {
entry:
indirectbr i8* blockaddress(@indirectbr, %bb0), [label %bb0, label %bb1]
bb0:
ret void
bb1:
ret void
}
define void @indirectbr_repeated() {
entry:
indirectbr i8* blockaddress(@indirectbr_repeated, %bb0), [label %bb0, label %bb0]
bb0:
ret void
}
define void @indirectbr_unreachable() {
entry:
indirectbr i8* blockaddress(@indirectbr_unreachable, %bb0), [label %bb1]
bb0:
ret void
bb1:
ret void
}
)");
auto CFAllTerminators = [&](Function &F, DominatorTree *DT) {
DeferredDominance DDT(*DT);