@@ -285,6 +285,23 @@ define i256 @test_as6_large() {
285285 ret i256 %ret
286286}
287287
288+ define i256 @test_opt_staticcall (ptr addrspace (5 ) %ptr1 , ptr addrspace (6 ) %ptr2 ) {
289+ ; CHECK-LABEL: define noundef i256 @test_opt_staticcall
290+ ; CHECK-SAME: (ptr addrspace(5) nocapture writeonly [[PTR1:%.*]], ptr addrspace(6) nocapture writeonly [[PTR2:%.*]]) local_unnamed_addr #[[ATTR3]] {
291+ ; CHECK-NEXT: store i256 1, ptr addrspace(5) [[PTR1]], align 32
292+ ; CHECK-NEXT: store i256 2, ptr addrspace(6) [[PTR2]], align 32
293+ ; CHECK-NEXT: [[TMP1:%.*]] = tail call i256 @llvm.evm.staticcall(i256 1, i256 1, ptr addrspace(1) null, i256 1, ptr addrspace(1) null, i256 1)
294+ ; CHECK-NEXT: ret i256 3
295+ ;
296+ store i256 1 , ptr addrspace (5 ) %ptr1 , align 32
297+ store i256 2 , ptr addrspace (6 ) %ptr2 , align 32
298+ call i256 @llvm.evm.staticcall (i256 1 , i256 1 , ptr addrspace (1 ) null , i256 1 , ptr addrspace (1 ) null , i256 1 )
299+ %ret1 = load i256 , ptr addrspace (5 ) %ptr1
300+ %ret2 = load i256 , ptr addrspace (6 ) %ptr2
301+ %ret = add i256 %ret1 , %ret2
302+ ret i256 %ret
303+ }
304+
288305; Verify that in the following tests all load operations are preserved.
289306
290307define i256 @test_noopt_create (ptr addrspace (5 ) %ptr1 , ptr addrspace (6 ) %ptr2 ) {
@@ -347,26 +364,6 @@ define i256 @test_noopt_call(ptr addrspace(5) %ptr1, ptr addrspace(6) %ptr2) {
347364 ret i256 %ret
348365}
349366
350- define i256 @test_noopt_staticcall (ptr addrspace (5 ) %ptr1 , ptr addrspace (6 ) %ptr2 ) {
351- ; CHECK-LABEL: define i256 @test_noopt_staticcall
352- ; CHECK-SAME: (ptr addrspace(5) nocapture [[PTR1:%.*]], ptr addrspace(6) nocapture [[PTR2:%.*]]) local_unnamed_addr #[[ATTR3]] {
353- ; CHECK-NEXT: store i256 1, ptr addrspace(5) [[PTR1]], align 32
354- ; CHECK-NEXT: store i256 2, ptr addrspace(6) [[PTR2]], align 32
355- ; CHECK-NEXT: [[TMP1:%.*]] = tail call i256 @llvm.evm.staticcall(i256 1, i256 1, ptr addrspace(1) null, i256 1, ptr addrspace(1) null, i256 1)
356- ; CHECK-NEXT: [[RET1:%.*]] = load i256, ptr addrspace(5) [[PTR1]], align 32
357- ; CHECK-NEXT: [[RET2:%.*]] = load i256, ptr addrspace(6) [[PTR2]], align 32
358- ; CHECK-NEXT: [[RET:%.*]] = add i256 [[RET2]], [[RET1]]
359- ; CHECK-NEXT: ret i256 [[RET]]
360- ;
361- store i256 1 , ptr addrspace (5 ) %ptr1 , align 32
362- store i256 2 , ptr addrspace (6 ) %ptr2 , align 32
363- call i256 @llvm.evm.staticcall (i256 1 , i256 1 , ptr addrspace (1 ) null , i256 1 , ptr addrspace (1 ) null , i256 1 )
364- %ret1 = load i256 , ptr addrspace (5 ) %ptr1
365- %ret2 = load i256 , ptr addrspace (6 ) %ptr2
366- %ret = add i256 %ret1 , %ret2
367- ret i256 %ret
368- }
369-
370367define i256 @test_noopt_callcode (ptr addrspace (5 ) %ptr1 , ptr addrspace (6 ) %ptr2 ) {
371368; CHECK-LABEL: define i256 @test_noopt_callcode
372369; CHECK-SAME: (ptr addrspace(5) nocapture [[PTR1:%.*]], ptr addrspace(6) nocapture [[PTR2:%.*]]) local_unnamed_addr #[[ATTR3]] {
0 commit comments