Skip to content

Commit

Permalink
add tail loop execution test
Browse files Browse the repository at this point in the history
  • Loading branch information
ss2165 committed Dec 11, 2024
1 parent c179e0a commit 2b8fd1b
Show file tree
Hide file tree
Showing 5 changed files with 474 additions and 269 deletions.
80 changes: 35 additions & 45 deletions hugr-llvm/src/emit/snapshots/[email protected]
Original file line number Diff line number Diff line change
Expand Up @@ -5,67 +5,57 @@ expression: mod_str
; ModuleID = 'test_context'
source_filename = "test_context"

define { { {} }, i64 } @_hl.main.1(i64 %0, i64 %1) {
define i64 @_hl.main.1() {
alloca_block:
br label %entry_block

entry_block: ; preds = %alloca_block
br label %loop_body

loop_body: ; preds = %20, %entry_block
%"5_0.0" = phi i64 [ %0, %entry_block ], [ %22, %20 ]
%"5_1.0" = phi i64 [ %1, %entry_block ], [ %"19.0", %20 ]
%2 = insertvalue { i64 } undef, i64 %"5_0.0", 0
%3 = insertvalue { i32, { i64 }, { { {} } } } { i32 0, { i64 } poison, { { {} } } poison }, { i64 } %2, 1
%4 = extractvalue { i32, { i64 }, { { {} } } } %3, 0
switch i32 %4, label %5 [
i32 1, label %8
loop_body: ; preds = %12, %entry_block
%"9_0.0" = phi i64 [ 3, %entry_block ], [ %14, %12 ]
%"9_1.0" = phi i64 [ 7, %entry_block ], [ %0, %12 ]
%0 = mul i64 %"9_1.0", 2
%1 = icmp eq i64 %"9_0.0", 0
%2 = select i1 %1, { i32, {}, {} } { i32 1, {} poison, {} undef }, { i32, {}, {} } { i32 0, {} undef, {} poison }
%3 = extractvalue { i32, {}, {} } %2, 0
switch i32 %3, label %4 [
i32 1, label %6
]

5: ; preds = %loop_body
%6 = extractvalue { i32, { i64 }, { { {} } } } %3, 1
%7 = extractvalue { i64 } %6, 0
br label %cond_12_case_0
4: ; preds = %loop_body
%5 = extractvalue { i32, {}, {} } %2, 1
br label %cond_17_case_0

8: ; preds = %loop_body
%9 = extractvalue { i32, { i64 }, { { {} } } } %3, 2
%10 = extractvalue { { {} } } %9, 0
br label %cond_12_case_1
6: ; preds = %loop_body
%7 = extractvalue { i32, {}, {} } %2, 2
br label %cond_17_case_1

loop_out: ; preds = %23
%mrv = insertvalue { { {} }, i64 } undef, { {} } %25, 0
%mrv40 = insertvalue { { {} }, i64 } %mrv, i64 %"19.0", 1
ret { { {} }, i64 } %mrv40
loop_out: ; preds = %15
ret i64 %0

cond_12_case_0: ; preds = %5
%11 = mul i64 %"5_1.0", 2
%12 = sub i64 %7, 1
%13 = insertvalue { i64 } undef, i64 %12, 0
%14 = insertvalue { i32, { i64 }, { { {} } } } { i32 0, { i64 } poison, { { {} } } poison }, { i64 } %13, 1
br label %cond_exit_12
cond_17_case_0: ; preds = %4
%8 = sub i64 %"9_0.0", 1
%9 = insertvalue { i64 } undef, i64 %8, 0
%10 = insertvalue { i32, { i64 }, {} } { i32 0, { i64 } poison, {} poison }, { i64 } %9, 1
br label %cond_exit_17

cond_12_case_1: ; preds = %8
%15 = insertvalue { { {} } } undef, { {} } undef, 0
%16 = insertvalue { i32, { i64 }, { { {} } } } { i32 1, { i64 } poison, { { {} } } poison }, { { {} } } %15, 2
br label %cond_exit_12
cond_17_case_1: ; preds = %6
br label %cond_exit_17

cond_exit_12: ; preds = %cond_12_case_1, %cond_12_case_0
%"08.0" = phi { i32, { i64 }, { { {} } } } [ %14, %cond_12_case_0 ], [ %16, %cond_12_case_1 ]
%"19.0" = phi i64 [ %11, %cond_12_case_0 ], [ %"5_1.0", %cond_12_case_1 ]
%17 = icmp ule i64 %"5_0.0", 0
%18 = select i1 %17, { i32, {}, {} } { i32 1, {} poison, {} undef }, { i32, {}, {} } { i32 0, {} undef, {} poison }
%19 = extractvalue { i32, { i64 }, { { {} } } } %"08.0", 0
switch i32 %19, label %20 [
i32 1, label %23
cond_exit_17: ; preds = %cond_17_case_1, %cond_17_case_0
%"011.0" = phi { i32, { i64 }, {} } [ %10, %cond_17_case_0 ], [ { i32 1, { i64 } poison, {} undef }, %cond_17_case_1 ]
%11 = extractvalue { i32, { i64 }, {} } %"011.0", 0
switch i32 %11, label %12 [
i32 1, label %15
]

20: ; preds = %cond_exit_12
%21 = extractvalue { i32, { i64 }, { { {} } } } %"08.0", 1
%22 = extractvalue { i64 } %21, 0
12: ; preds = %cond_exit_17
%13 = extractvalue { i32, { i64 }, {} } %"011.0", 1
%14 = extractvalue { i64 } %13, 0
br label %loop_body

23: ; preds = %cond_exit_12
%24 = extractvalue { i32, { i64 }, { { {} } } } %"08.0", 2
%25 = extractvalue { { {} } } %24, 0
15: ; preds = %cond_exit_17
%16 = extractvalue { i32, { i64 }, {} } %"011.0", 2
br label %loop_out
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,164 +5,125 @@ expression: mod_str
; ModuleID = 'test_context'
source_filename = "test_context"

define { { {} }, i64 } @_hl.main.1(i64 %0, i64 %1) {
define i64 @_hl.main.1() {
alloca_block:
%"0" = alloca { {} }, align 8
%"1" = alloca i64, align 8
%"2_0" = alloca i64, align 8
%"2_1" = alloca i64, align 8
%"4_0" = alloca { {} }, align 8
%"4_1" = alloca i64, align 8
%"0" = alloca i64, align 8
%"7_0" = alloca i64, align 8
%"5_0" = alloca i64, align 8
%"5_1" = alloca i64, align 8
%"12_0" = alloca { i32, { i64 }, { { {} } } }, align 8
%"12_1" = alloca i64, align 8
%"8_0" = alloca i64, align 8
%"10_0" = alloca { i32, { i64 }, { { {} } } }, align 8
%"08" = alloca { i32, { i64 }, { { {} } } }, align 8
%"19" = alloca i64, align 8
%"012" = alloca i64, align 8
%"113" = alloca i64, align 8
%"19_0" = alloca i64, align 8
%"17_0" = alloca i64, align 8
%"14_0" = alloca i64, align 8
%"14_1" = alloca i64, align 8
%"9_0" = alloca i64, align 8
%"9_1" = alloca i64, align 8
%"17_0" = alloca { i32, { i64 }, {} }, align 8
%"16_0" = alloca i64, align 8
%"15_0" = alloca i64, align 8
%"12_0" = alloca i64, align 8
%"13_0" = alloca { i32, {}, {} }, align 8
%"011" = alloca { i32, { i64 }, {} }, align 8
%"013" = alloca i64, align 8
%"23_0" = alloca i64, align 8
%"20_0" = alloca i64, align 8
%"21_0" = alloca i64, align 8
%"22_0" = alloca { i32, { i64 }, { { {} } } }, align 8
%"023" = alloca { {} }, align 8
%"124" = alloca i64, align 8
%"27_0" = alloca { {} }, align 8
%"28_0" = alloca { i32, { i64 }, { { {} } } }, align 8
%"24_0" = alloca { {} }, align 8
%"24_1" = alloca i64, align 8
%"9_0" = alloca { i32, {}, {} }, align 8
%"24_0" = alloca i64, align 8
%"25_0" = alloca { i32, { i64 }, {} }, align 8
%"019" = alloca i64, align 8
%"29_0" = alloca { i32, { i64 }, {} }, align 8
%"27_0" = alloca i64, align 8
br label %entry_block

entry_block: ; preds = %alloca_block
store i64 %0, i64* %"2_0", align 4
store i64 %1, i64* %"2_1", align 4
%"2_01" = load i64, i64* %"2_0", align 4
%"2_12" = load i64, i64* %"2_1", align 4
store i64 %"2_01", i64* %"5_0", align 4
store i64 %"2_12", i64* %"5_1", align 4
store i64 7, i64* %"7_0", align 4
store i64 3, i64* %"5_0", align 4
%"5_01" = load i64, i64* %"5_0", align 4
%"7_02" = load i64, i64* %"7_0", align 4
store i64 %"5_01", i64* %"9_0", align 4
store i64 %"7_02", i64* %"9_1", align 4
br label %loop_body

loop_body: ; preds = %20, %entry_block
%"5_03" = load i64, i64* %"5_0", align 4
%"5_14" = load i64, i64* %"5_1", align 4
store i64 0, i64* %"8_0", align 4
store i64 %"5_03", i64* %"5_0", align 4
store i64 %"5_14", i64* %"5_1", align 4
%"5_05" = load i64, i64* %"5_0", align 4
%2 = insertvalue { i64 } undef, i64 %"5_05", 0
%3 = insertvalue { i32, { i64 }, { { {} } } } { i32 0, { i64 } poison, { { {} } } poison }, { i64 } %2, 1
store { i32, { i64 }, { { {} } } } %3, { i32, { i64 }, { { {} } } }* %"10_0", align 4
%"10_06" = load { i32, { i64 }, { { {} } } }, { i32, { i64 }, { { {} } } }* %"10_0", align 4
%"5_17" = load i64, i64* %"5_1", align 4
%4 = extractvalue { i32, { i64 }, { { {} } } } %"10_06", 0
switch i32 %4, label %5 [
i32 1, label %8
loop_body: ; preds = %12, %entry_block
%"9_03" = load i64, i64* %"9_0", align 4
%"9_14" = load i64, i64* %"9_1", align 4
store i64 2, i64* %"15_0", align 4
store i64 0, i64* %"12_0", align 4
store i64 %"9_03", i64* %"9_0", align 4
store i64 %"9_14", i64* %"9_1", align 4
%"9_15" = load i64, i64* %"9_1", align 4
%"15_06" = load i64, i64* %"15_0", align 4
%0 = mul i64 %"9_15", %"15_06"
store i64 %0, i64* %"16_0", align 4
%"9_07" = load i64, i64* %"9_0", align 4
%"12_08" = load i64, i64* %"12_0", align 4
%1 = icmp eq i64 %"9_07", %"12_08"
%2 = select i1 %1, { i32, {}, {} } { i32 1, {} poison, {} undef }, { i32, {}, {} } { i32 0, {} undef, {} poison }
store { i32, {}, {} } %2, { i32, {}, {} }* %"13_0", align 4
%"13_09" = load { i32, {}, {} }, { i32, {}, {} }* %"13_0", align 4
%"9_010" = load i64, i64* %"9_0", align 4
%3 = extractvalue { i32, {}, {} } %"13_09", 0
switch i32 %3, label %4 [
i32 1, label %6
]

5: ; preds = %loop_body
%6 = extractvalue { i32, { i64 }, { { {} } } } %"10_06", 1
%7 = extractvalue { i64 } %6, 0
store i64 %7, i64* %"012", align 4
store i64 %"5_17", i64* %"113", align 4
br label %cond_12_case_0
4: ; preds = %loop_body
%5 = extractvalue { i32, {}, {} } %"13_09", 1
store i64 %"9_010", i64* %"013", align 4
br label %cond_17_case_0

8: ; preds = %loop_body
%9 = extractvalue { i32, { i64 }, { { {} } } } %"10_06", 2
%10 = extractvalue { { {} } } %9, 0
store { {} } %10, { {} }* %"023", align 1
store i64 %"5_17", i64* %"124", align 4
br label %cond_12_case_1
6: ; preds = %loop_body
%7 = extractvalue { i32, {}, {} } %"13_09", 2
store i64 %"9_010", i64* %"019", align 4
br label %cond_17_case_1

loop_out: ; preds = %23
%"4_036" = load { {} }, { {} }* %"4_0", align 1
%"4_137" = load i64, i64* %"4_1", align 4
store { {} } %"4_036", { {} }* %"0", align 1
store i64 %"4_137", i64* %"1", align 4
%"038" = load { {} }, { {} }* %"0", align 1
%"139" = load i64, i64* %"1", align 4
%mrv = insertvalue { { {} }, i64 } undef, { {} } %"038", 0
%mrv40 = insertvalue { { {} }, i64 } %mrv, i64 %"139", 1
ret { { {} }, i64 } %mrv40
loop_out: ; preds = %15
%"8_026" = load i64, i64* %"8_0", align 4
store i64 %"8_026", i64* %"0", align 4
%"027" = load i64, i64* %"0", align 4
ret i64 %"027"

cond_12_case_0: ; preds = %5
%"014" = load i64, i64* %"012", align 4
%"115" = load i64, i64* %"113", align 4
store i64 2, i64* %"19_0", align 4
store i64 1, i64* %"17_0", align 4
store i64 %"014", i64* %"14_0", align 4
store i64 %"115", i64* %"14_1", align 4
%"14_116" = load i64, i64* %"14_1", align 4
%"19_017" = load i64, i64* %"19_0", align 4
%11 = mul i64 %"14_116", %"19_017"
store i64 %11, i64* %"20_0", align 4
%"14_018" = load i64, i64* %"14_0", align 4
%"17_019" = load i64, i64* %"17_0", align 4
%12 = sub i64 %"14_018", %"17_019"
store i64 %12, i64* %"21_0", align 4
%"21_020" = load i64, i64* %"21_0", align 4
%13 = insertvalue { i64 } undef, i64 %"21_020", 0
%14 = insertvalue { i32, { i64 }, { { {} } } } { i32 0, { i64 } poison, { { {} } } poison }, { i64 } %13, 1
store { i32, { i64 }, { { {} } } } %14, { i32, { i64 }, { { {} } } }* %"22_0", align 4
%"22_021" = load { i32, { i64 }, { { {} } } }, { i32, { i64 }, { { {} } } }* %"22_0", align 4
%"20_022" = load i64, i64* %"20_0", align 4
store { i32, { i64 }, { { {} } } } %"22_021", { i32, { i64 }, { { {} } } }* %"08", align 4
store i64 %"20_022", i64* %"19", align 4
br label %cond_exit_12
cond_17_case_0: ; preds = %4
%"014" = load i64, i64* %"013", align 4
store i64 1, i64* %"23_0", align 4
store i64 %"014", i64* %"20_0", align 4
%"20_015" = load i64, i64* %"20_0", align 4
%"23_016" = load i64, i64* %"23_0", align 4
%8 = sub i64 %"20_015", %"23_016"
store i64 %8, i64* %"24_0", align 4
%"24_017" = load i64, i64* %"24_0", align 4
%9 = insertvalue { i64 } undef, i64 %"24_017", 0
%10 = insertvalue { i32, { i64 }, {} } { i32 0, { i64 } poison, {} poison }, { i64 } %9, 1
store { i32, { i64 }, {} } %10, { i32, { i64 }, {} }* %"25_0", align 4
%"25_018" = load { i32, { i64 }, {} }, { i32, { i64 }, {} }* %"25_0", align 4
store { i32, { i64 }, {} } %"25_018", { i32, { i64 }, {} }* %"011", align 4
br label %cond_exit_17

cond_12_case_1: ; preds = %8
%"025" = load { {} }, { {} }* %"023", align 1
%"126" = load i64, i64* %"124", align 4
store { {} } undef, { {} }* %"27_0", align 1
%"27_027" = load { {} }, { {} }* %"27_0", align 1
%15 = insertvalue { { {} } } undef, { {} } %"27_027", 0
%16 = insertvalue { i32, { i64 }, { { {} } } } { i32 1, { i64 } poison, { { {} } } poison }, { { {} } } %15, 2
store { i32, { i64 }, { { {} } } } %16, { i32, { i64 }, { { {} } } }* %"28_0", align 4
store { {} } %"025", { {} }* %"24_0", align 1
store i64 %"126", i64* %"24_1", align 4
%"28_028" = load { i32, { i64 }, { { {} } } }, { i32, { i64 }, { { {} } } }* %"28_0", align 4
%"24_129" = load i64, i64* %"24_1", align 4
store { i32, { i64 }, { { {} } } } %"28_028", { i32, { i64 }, { { {} } } }* %"08", align 4
store i64 %"24_129", i64* %"19", align 4
br label %cond_exit_12
cond_17_case_1: ; preds = %6
%"020" = load i64, i64* %"019", align 4
store { i32, { i64 }, {} } { i32 1, { i64 } poison, {} undef }, { i32, { i64 }, {} }* %"29_0", align 4
%"29_021" = load { i32, { i64 }, {} }, { i32, { i64 }, {} }* %"29_0", align 4
store { i32, { i64 }, {} } %"29_021", { i32, { i64 }, {} }* %"011", align 4
store i64 %"020", i64* %"27_0", align 4
br label %cond_exit_17

cond_exit_12: ; preds = %cond_12_case_1, %cond_12_case_0
%"010" = load { i32, { i64 }, { { {} } } }, { i32, { i64 }, { { {} } } }* %"08", align 4
%"111" = load i64, i64* %"19", align 4
store { i32, { i64 }, { { {} } } } %"010", { i32, { i64 }, { { {} } } }* %"12_0", align 4
store i64 %"111", i64* %"12_1", align 4
%"12_030" = load { i32, { i64 }, { { {} } } }, { i32, { i64 }, { { {} } } }* %"12_0", align 4
%"12_131" = load i64, i64* %"12_1", align 4
store { i32, { i64 }, { { {} } } } %"12_030", { i32, { i64 }, { { {} } } }* %"12_0", align 4
store i64 %"12_131", i64* %"12_1", align 4
%"5_032" = load i64, i64* %"5_0", align 4
%"8_033" = load i64, i64* %"8_0", align 4
%17 = icmp ule i64 %"5_032", %"8_033"
%18 = select i1 %17, { i32, {}, {} } { i32 1, {} poison, {} undef }, { i32, {}, {} } { i32 0, {} undef, {} poison }
store { i32, {}, {} } %18, { i32, {}, {} }* %"9_0", align 4
%"12_034" = load { i32, { i64 }, { { {} } } }, { i32, { i64 }, { { {} } } }* %"12_0", align 4
%"12_135" = load i64, i64* %"12_1", align 4
%19 = extractvalue { i32, { i64 }, { { {} } } } %"12_034", 0
switch i32 %19, label %20 [
i32 1, label %23
cond_exit_17: ; preds = %cond_17_case_1, %cond_17_case_0
%"012" = load { i32, { i64 }, {} }, { i32, { i64 }, {} }* %"011", align 4
store { i32, { i64 }, {} } %"012", { i32, { i64 }, {} }* %"17_0", align 4
%"17_022" = load { i32, { i64 }, {} }, { i32, { i64 }, {} }* %"17_0", align 4
%"16_023" = load i64, i64* %"16_0", align 4
store { i32, { i64 }, {} } %"17_022", { i32, { i64 }, {} }* %"17_0", align 4
store i64 %"16_023", i64* %"16_0", align 4
%"17_024" = load { i32, { i64 }, {} }, { i32, { i64 }, {} }* %"17_0", align 4
%"16_025" = load i64, i64* %"16_0", align 4
%11 = extractvalue { i32, { i64 }, {} } %"17_024", 0
switch i32 %11, label %12 [
i32 1, label %15
]

20: ; preds = %cond_exit_12
%21 = extractvalue { i32, { i64 }, { { {} } } } %"12_034", 1
%22 = extractvalue { i64 } %21, 0
store i64 %22, i64* %"5_0", align 4
store i64 %"12_135", i64* %"5_1", align 4
12: ; preds = %cond_exit_17
%13 = extractvalue { i32, { i64 }, {} } %"17_024", 1
%14 = extractvalue { i64 } %13, 0
store i64 %14, i64* %"9_0", align 4
store i64 %"16_025", i64* %"9_1", align 4
br label %loop_body

23: ; preds = %cond_exit_12
%24 = extractvalue { i32, { i64 }, { { {} } } } %"12_034", 2
%25 = extractvalue { { {} } } %24, 0
store { {} } %25, { {} }* %"4_0", align 1
store i64 %"12_135", i64* %"4_1", align 4
15: ; preds = %cond_exit_17
%16 = extractvalue { i32, { i64 }, {} } %"17_024", 2
store i64 %"16_025", i64* %"8_0", align 4
br label %loop_out
}
Loading

0 comments on commit 2b8fd1b

Please sign in to comment.