Skip to content

Commit c439e48

Browse files
committed
added test for lowering longjmp
1 parent 6ce3969 commit c439e48

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

clang/test/CIR/Lowering/setjmp-longjmp.cir

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,15 @@ module {
2323
%0 = cir.eh.setjmp %arg0 : (!p32) -> !s32i
2424
cir.return %0 : !s32i
2525
}
26+
cir.func @test_longjmp(%arg0 : !p32) {
27+
28+
// MLIR: llvm.func @test_longjmp([[ARG0:%.*]]: !llvm.ptr)
29+
// MLIR-NEXT: llvm.call_intrinsic "llvm.eh.sjlj.longjmp"([[ARG0]]) : (!llvm.ptr) -> ()
30+
// MLIR-NEXT: llvm.unreachable
31+
// MLIR-NEXT: }
32+
cir.eh.longjmp %arg0 : (!p32) -> ()
33+
cir.unreachable
34+
}
2635
// MLIR: }
2736
}
2837

clang/test/CIR/Transforms/setjmp-longjmp-lower.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,23 @@ void test_setjmp2(void *env) {
5252
// AFTER-LOWERING-PREPARE-NEXT: cir.eh.setjmp [[CAST]] : (!cir.ptr<!cir.ptr<!void>>) -> !s32i
5353
_setjmp (env);
5454
}
55+
void test_longjmp(void *env) {
56+
// BEFORE-LOWERING-PREPARE-LABEL: test_longjmp
57+
// BEFORE-LOWERING-PREPARE-SAME: [[ENV:%.*]]:
58+
// BEFORE-LOWERING-PREPARE-NEXT: [[ENV_ALLOCA:%.*]] = cir.alloca
59+
// BEFORE-LOWERING-PREPARE-NEXT: cir.store [[ENV]], [[ENV_ALLOCA]]
60+
// BEFORE-LOWERING-PREPARE-NEXT: [[ENV_LOAD:%.*]] = cir.load align(8) [[ENV_ALLOCA]]
61+
// BEFORE-LOWERING-PREPARE-NEXT: [[CAST:%.*]] = cir.cast(bitcast, [[ENV_LOAD]]
62+
// BEFORE-LOWERING-PREPARE-NEXT: cir.eh.longjmp [[CAST]] : (!cir.ptr<!cir.ptr<!void>>) -> ()
63+
// BEFORE-LOWERING-PREPARE-NEXT: cir.unreachable
64+
65+
// AFTER-LOWERING-PREPARE-LABEL: test_longjmp
66+
// AFTER-LOWERING-PREPARE-SAME: [[ENV:%.*]]:
67+
// AFTER-LOWERING-PREPARE-NEXT: [[ENV_ALLOCA:%.*]] = cir.alloca
68+
// AFTER-LOWERING-PREPARE-NEXT: cir.store [[ENV]], [[ENV_ALLOCA]]
69+
// AFTER-LOWERING-PREPARE-NEXT: [[ENV_LOAD:%.*]] = cir.load align(8) [[ENV_ALLOCA]]
70+
// AFTER-LOWERING-PREPARE-NEXT: [[CAST:%.*]] = cir.cast(bitcast, [[ENV_LOAD]]
71+
// AFTER-LOWERING-PREPARE-NEXT: cir.eh.longjmp [[CAST]] : (!cir.ptr<!cir.ptr<!void>>)
72+
// AFTER-LOWERING-PREPARE-NEXT: cir.unreachable
73+
__builtin_longjmp(env, 1);
74+
}

0 commit comments

Comments
 (0)