@@ -22,15 +22,12 @@ entry:
2222 call void @longjmp (ptr %buf , i32 1 ) #1
2323 unreachable
2424; CHECK: entry:
25- ; CHECK-NEXT: %[[MALLOCCALL:.*]] = tail call ptr @malloc([[PTR]] 40)
26- ; CHECK-NEXT: store i32 0, ptr %[[MALLOCCALL]]
27- ; CHECK-NEXT: %[[SETJMP_TABLE_SIZE:.*]] = add i32 4, 0
25+ ; CHECK-NEXT: %functionInvocationId = alloca i32, align 4
2826; CHECK-NEXT: br label %entry.split
2927
3028; CHECK: entry.split
3129; CHECK-NEXT: %[[BUF:.*]] = alloca [1 x %struct.__jmp_buf_tag]
32- ; CHECK-NEXT: %[[SETJMP_TABLE1:.*]] = call ptr @saveSetjmp(ptr %[[BUF]], i32 1, ptr %[[MALLOCCALL]], i32 %[[SETJMP_TABLE_SIZE]])
33- ; CHECK-NEXT: %[[SETJMP_TABLE_SIZE1:.*]] = call i32 @getTempRet0()
30+ ; CHECK-NEXT: call void @__wasm_setjmp(ptr %[[BUF]], i32 1, ptr %functionInvocationId)
3431; CHECK-NEXT: br label %entry.split.split
3532
3633; CHECK: entry.split.split:
5148
5249; CHECK: if.then1:
5350; CHECK-NEXT: %[[__THREW__VAL_P:.*]] = inttoptr [[PTR]] %[[__THREW__VAL]] to ptr
54- ; CHECK-NEXT: %[[__THREW__VAL_P_LOADED:.*]] = load [[PTR]], ptr %[[__THREW__VAL_P]]
55- ; CHECK-NEXT: %[[LABEL:.*]] = call i32 @testSetjmp([[PTR]] %[[__THREW__VAL_P_LOADED]], ptr %[[SETJMP_TABLE1]], i32 %[[SETJMP_TABLE_SIZE1]])
51+ ; CHECK-NEXT: %[[LABEL:.*]] = call i32 @__wasm_setjmp_test(ptr %[[__THREW__VAL_P]], ptr %functionInvocationId)
5652; CHECK-NEXT: %[[CMP:.*]] = icmp eq i32 %[[LABEL]], 0
5753; CHECK-NEXT: br i1 %[[CMP]], label %call.em.longjmp, label %if.end2
5854
6965; CHECK: call.em.longjmp:
7066; CHECK-NEXT: %threw.phi = phi [[PTR]] [ %[[__THREW__VAL]], %if.then1 ]
7167; CHECK-NEXT: %threwvalue.phi = phi i32 [ %[[THREWVALUE_VAL]], %if.then1 ]
72- ; CHECK-NEXT: tail call void @free(ptr %[[SETJMP_TABLE1]])
7368; CHECK-NEXT: call void @emscripten_longjmp([[PTR]] %threw.phi, i32 %threwvalue.phi)
7469; CHECK-NEXT: unreachable
7570
@@ -87,13 +82,12 @@ entry:
8782 call void @foo ()
8883 ret void
8984; CHECK: entry:
90- ; CHECK: %[[SETJMP_TABLE:.*]] = call ptr @saveSetjmp (
85+ ; CHECK: call void @__wasm_setjmp (
9186
9287; CHECK: entry.split.split:
9388; CHECK: @__invoke_void(ptr @foo)
9489
9590; CHECK: entry.split.split.split:
96- ; CHECK-NEXT: tail call void @free(ptr %[[SETJMP_TABLE]])
9791; CHECK-NEXT: ret void
9892}
9993
@@ -110,9 +104,8 @@ entry:
110104 call void @foo ()
111105 ret void
112106; CHECK: call.em.longjmp:
113- ; CHECK-NEXT: %threw.phi = phi [[PTR]] [ %__THREW__.val, %if.then1 ], [ %__THREW__.val4, %if.then15 ]
114- ; CHECK-NEXT: %threwvalue.phi = phi i32 [ %__threwValue.val, %if.then1 ], [ %__threwValue.val8, %if.then15 ]
115- ; CHECK-NEXT: tail call void @free(ptr %[[SETJMP_TABLE1]])
107+ ; CHECK-NEXT: %threw.phi = phi [[PTR]] [ %__THREW__.val, %if.then1 ], [ %__THREW__.val2, %if.then13 ]
108+ ; CHECK-NEXT: %threwvalue.phi = phi i32 [ %__threwValue.val, %if.then1 ], [ %__threwValue.val6, %if.then13 ]
116109; CHECK-NEXT: call void @emscripten_longjmp([[PTR]] %threw.phi, i32 %threwvalue.phi)
117110; CHECK-NEXT: unreachable
118111}
@@ -145,7 +138,6 @@ entry:
145138 %cmp = icmp sgt i32 %n , 5
146139 br i1 %cmp , label %if.then , label %if.end
147140; CHECK: entry:
148- ; CHECK: %[[SETJMP_TABLE_SIZE0:.*]] = add i32 4, 0
149141
150142if.then: ; preds = %entry
151143 %0 = load i32 , ptr @global_var , align 4
@@ -154,22 +146,17 @@ if.then: ; preds = %entry
154146 br label %if.end
155147; CHECK: if.then:
156148; CHECK: %[[VAR0:.*]] = load i32, ptr @global_var, align 4
157- ; CHECK: %[[SETJMP_TABLE1:.*]] = call ptr @saveSetjmp(
158- ; CHECK-NEXT: %[[SETJMP_TABLE_SIZE1:.*]] = call i32 @getTempRet0()
149+ ; CHECK: call void @__wasm_setjmp(
159150
160151; CHECK: if.then.split:
161- ; CHECK: %[[VAR1:.*]] = phi i32 [ %[[VAR2:.*]], %if.end3 ], [ %[[VAR0]], %if.then ]
162- ; CHECK: %[[SETJMP_TABLE_SIZE2:.*]] = phi i32 [ %[[SETJMP_TABLE_SIZE1]], %if.then ], [ %[[SETJMP_TABLE_SIZE3:.*]], %if.end3 ]
163- ; CHECK: %[[SETJMP_TABLE2:.*]] = phi ptr [ %[[SETJMP_TABLE1]], %if.then ], [ %[[SETJMP_TABLE3:.*]], %if.end3 ]
152+ ; CHECK: %[[VAR1:.*]] = phi i32 [ %[[VAR2:.*]], %if.end1 ], [ %[[VAR0]], %if.then ]
164153; CHECK: store i32 %[[VAR1]], ptr @global_var, align 4
165154
166155if.end: ; preds = %if.then, %entry
167156 call void @longjmp (ptr %buf , i32 5 ) #1
168157 unreachable
169158; CHECK: if.end:
170159; CHECK: %[[VAR2]] = phi i32 [ %[[VAR1]], %if.then.split ], [ undef, %entry.split ]
171- ; CHECK: %[[SETJMP_TABLE_SIZE3]] = phi i32 [ %[[SETJMP_TABLE_SIZE2]], %if.then.split ], [ %[[SETJMP_TABLE_SIZE0]], %entry.split ]
172- ; CHECK: %[[SETJMP_TABLE3]] = phi ptr [ %[[SETJMP_TABLE2]], %if.then.split ], [ %setjmpTable, %entry.split ]
173160}
174161
175162; Test a case when a function only calls other functions that are neither setjmp nor longjmp
@@ -296,8 +283,8 @@ declare void @free(ptr)
296283; JS glue functions and invoke wrappers declaration
297284; CHECK-DAG: declare i32 @getTempRet0()
298285; CHECK-DAG: declare void @setTempRet0(i32)
299- ; CHECK-DAG: declare ptr @saveSetjmp (ptr, i32, ptr, i32 )
300- ; CHECK-DAG: declare i32 @testSetjmp([[PTR]], ptr, i32 )
286+ ; CHECK-DAG: declare void @__wasm_setjmp (ptr, i32, ptr)
287+ ; CHECK-DAG: declare i32 @__wasm_setjmp_test( ptr, ptr )
301288; CHECK-DAG: declare void @emscripten_longjmp([[PTR]], i32)
302289; CHECK-DAG: declare void @__invoke_void(ptr)
303290
@@ -308,8 +295,8 @@ attributes #3 = { allocsize(0) }
308295; CHECK-DAG: attributes #{{[0-9]+}} = { nounwind "wasm-import-module"="env" "wasm-import-name"="getTempRet0" }
309296; CHECK-DAG: attributes #{{[0-9]+}} = { nounwind "wasm-import-module"="env" "wasm-import-name"="setTempRet0" }
310297; CHECK-DAG: attributes #{{[0-9]+}} = { "wasm-import-module"="env" "wasm-import-name"="__invoke_void" }
311- ; CHECK-DAG: attributes #{{[0-9]+}} = { "wasm-import-module"="env" "wasm-import-name"="saveSetjmp " }
312- ; CHECK-DAG: attributes #{{[0-9]+}} = { "wasm-import-module"="env" "wasm-import-name"="testSetjmp " }
298+ ; CHECK-DAG: attributes #{{[0-9]+}} = { "wasm-import-module"="env" "wasm-import-name"="__wasm_setjmp " }
299+ ; CHECK-DAG: attributes #{{[0-9]+}} = { "wasm-import-module"="env" "wasm-import-name"="__wasm_setjmp_test " }
313300; CHECK-DAG: attributes #{{[0-9]+}} = { noreturn "wasm-import-module"="env" "wasm-import-name"="emscripten_longjmp" }
314301; CHECK-DAG: attributes #{{[0-9]+}} = { "wasm-import-module"="env" "wasm-import-name"="__invoke_ptr_i32_ptr" }
315302; CHECK-DAG: attributes #[[ALLOCSIZE_ATTR]] = { allocsize(1) }
0 commit comments