@@ -22,15 +22,12 @@ entry:
22
22
call void @longjmp (ptr %buf , i32 1 ) #1
23
23
unreachable
24
24
; 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
28
26
; CHECK-NEXT: br label %entry.split
29
27
30
28
; CHECK: entry.split
31
29
; 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)
34
31
; CHECK-NEXT: br label %entry.split.split
35
32
36
33
; CHECK: entry.split.split:
51
48
52
49
; CHECK: if.then1:
53
50
; 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)
56
52
; CHECK-NEXT: %[[CMP:.*]] = icmp eq i32 %[[LABEL]], 0
57
53
; CHECK-NEXT: br i1 %[[CMP]], label %call.em.longjmp, label %if.end2
58
54
69
65
; CHECK: call.em.longjmp:
70
66
; CHECK-NEXT: %threw.phi = phi [[PTR]] [ %[[__THREW__VAL]], %if.then1 ]
71
67
; CHECK-NEXT: %threwvalue.phi = phi i32 [ %[[THREWVALUE_VAL]], %if.then1 ]
72
- ; CHECK-NEXT: tail call void @free(ptr %[[SETJMP_TABLE1]])
73
68
; CHECK-NEXT: call void @emscripten_longjmp([[PTR]] %threw.phi, i32 %threwvalue.phi)
74
69
; CHECK-NEXT: unreachable
75
70
@@ -87,13 +82,12 @@ entry:
87
82
call void @foo ()
88
83
ret void
89
84
; CHECK: entry:
90
- ; CHECK: %[[SETJMP_TABLE:.*]] = call ptr @saveSetjmp (
85
+ ; CHECK: call void @__wasm_setjmp (
91
86
92
87
; CHECK: entry.split.split:
93
88
; CHECK: @__invoke_void(ptr @foo)
94
89
95
90
; CHECK: entry.split.split.split:
96
- ; CHECK-NEXT: tail call void @free(ptr %[[SETJMP_TABLE]])
97
91
; CHECK-NEXT: ret void
98
92
}
99
93
@@ -110,9 +104,8 @@ entry:
110
104
call void @foo ()
111
105
ret void
112
106
; 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 ]
116
109
; CHECK-NEXT: call void @emscripten_longjmp([[PTR]] %threw.phi, i32 %threwvalue.phi)
117
110
; CHECK-NEXT: unreachable
118
111
}
@@ -145,7 +138,6 @@ entry:
145
138
%cmp = icmp sgt i32 %n , 5
146
139
br i1 %cmp , label %if.then , label %if.end
147
140
; CHECK: entry:
148
- ; CHECK: %[[SETJMP_TABLE_SIZE0:.*]] = add i32 4, 0
149
141
150
142
if.then: ; preds = %entry
151
143
%0 = load i32 , ptr @global_var , align 4
@@ -154,22 +146,17 @@ if.then: ; preds = %entry
154
146
br label %if.end
155
147
; CHECK: if.then:
156
148
; 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(
159
150
160
151
; 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 ]
164
153
; CHECK: store i32 %[[VAR1]], ptr @global_var, align 4
165
154
166
155
if.end: ; preds = %if.then, %entry
167
156
call void @longjmp (ptr %buf , i32 5 ) #1
168
157
unreachable
169
158
; CHECK: if.end:
170
159
; 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 ]
173
160
}
174
161
175
162
; Test a case when a function only calls other functions that are neither setjmp nor longjmp
@@ -296,8 +283,8 @@ declare void @free(ptr)
296
283
; JS glue functions and invoke wrappers declaration
297
284
; CHECK-DAG: declare i32 @getTempRet0()
298
285
; 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 )
301
288
; CHECK-DAG: declare void @emscripten_longjmp([[PTR]], i32)
302
289
; CHECK-DAG: declare void @__invoke_void(ptr)
303
290
@@ -308,8 +295,8 @@ attributes #3 = { allocsize(0) }
308
295
; CHECK-DAG: attributes #{{[0-9]+}} = { nounwind "wasm-import-module"="env" "wasm-import-name"="getTempRet0" }
309
296
; CHECK-DAG: attributes #{{[0-9]+}} = { nounwind "wasm-import-module"="env" "wasm-import-name"="setTempRet0" }
310
297
; 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 " }
313
300
; CHECK-DAG: attributes #{{[0-9]+}} = { noreturn "wasm-import-module"="env" "wasm-import-name"="emscripten_longjmp" }
314
301
; CHECK-DAG: attributes #{{[0-9]+}} = { "wasm-import-module"="env" "wasm-import-name"="__invoke_ptr_i32_ptr" }
315
302
; CHECK-DAG: attributes #[[ALLOCSIZE_ATTR]] = { allocsize(1) }
0 commit comments