From 4996bfe87783bea0d414071f31298ce353adbbf4 Mon Sep 17 00:00:00 2001 From: yotto3s Date: Sun, 28 Sep 2025 00:06:57 +0900 Subject: [PATCH 01/11] [CIR] added test for lowering longjmp --- clang/test/CIR/Lowering/setjmp-longjmp.cir | 9 +++++++++ .../CIR/Transforms/setjmp-longjmp-lower.c | 20 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/clang/test/CIR/Lowering/setjmp-longjmp.cir b/clang/test/CIR/Lowering/setjmp-longjmp.cir index 627a573e5051..58bdfef1e055 100644 --- a/clang/test/CIR/Lowering/setjmp-longjmp.cir +++ b/clang/test/CIR/Lowering/setjmp-longjmp.cir @@ -23,6 +23,15 @@ module { %0 = cir.eh.setjmp %arg0 : (!p32) -> !s32i cir.return %0 : !s32i } + cir.func @test_longjmp(%arg0 : !p32) { + + // MLIR: llvm.func @test_longjmp([[ARG0:%.*]]: !llvm.ptr) + // MLIR-NEXT: llvm.call_intrinsic "llvm.eh.sjlj.longjmp"([[ARG0]]) : (!llvm.ptr) -> () + // MLIR-NEXT: llvm.unreachable + // MLIR-NEXT: } + cir.eh.longjmp %arg0 : (!p32) -> () + cir.unreachable + } // MLIR: } } diff --git a/clang/test/CIR/Transforms/setjmp-longjmp-lower.c b/clang/test/CIR/Transforms/setjmp-longjmp-lower.c index 883e3d6a0bf2..a69b361a8d17 100644 --- a/clang/test/CIR/Transforms/setjmp-longjmp-lower.c +++ b/clang/test/CIR/Transforms/setjmp-longjmp-lower.c @@ -52,3 +52,23 @@ void test_setjmp2(void *env) { // AFTER-LOWERING-PREPARE-NEXT: cir.eh.setjmp [[CAST]] : (!cir.ptr>) -> !s32i _setjmp (env); } +void test_longjmp(void *env) { + // BEFORE-LOWERING-PREPARE-LABEL: test_longjmp + // BEFORE-LOWERING-PREPARE-SAME: [[ENV:%.*]]: + // BEFORE-LOWERING-PREPARE-NEXT: [[ENV_ALLOCA:%.*]] = cir.alloca + // BEFORE-LOWERING-PREPARE-NEXT: cir.store [[ENV]], [[ENV_ALLOCA]] + // BEFORE-LOWERING-PREPARE-NEXT: [[ENV_LOAD:%.*]] = cir.load align(8) [[ENV_ALLOCA]] + // BEFORE-LOWERING-PREPARE-NEXT: [[CAST:%.*]] = cir.cast(bitcast, [[ENV_LOAD]] + // BEFORE-LOWERING-PREPARE-NEXT: cir.eh.longjmp [[CAST]] : (!cir.ptr>) -> () + // BEFORE-LOWERING-PREPARE-NEXT: cir.unreachable + + // AFTER-LOWERING-PREPARE-LABEL: test_longjmp + // AFTER-LOWERING-PREPARE-SAME: [[ENV:%.*]]: + // AFTER-LOWERING-PREPARE-NEXT: [[ENV_ALLOCA:%.*]] = cir.alloca + // AFTER-LOWERING-PREPARE-NEXT: cir.store [[ENV]], [[ENV_ALLOCA]] + // AFTER-LOWERING-PREPARE-NEXT: [[ENV_LOAD:%.*]] = cir.load align(8) [[ENV_ALLOCA]] + // AFTER-LOWERING-PREPARE-NEXT: [[CAST:%.*]] = cir.cast(bitcast, [[ENV_LOAD]] + // AFTER-LOWERING-PREPARE-NEXT: cir.eh.longjmp [[CAST]] : (!cir.ptr>) + // AFTER-LOWERING-PREPARE-NEXT: cir.unreachable + __builtin_longjmp(env, 1); +} From e2fafec35b3256611450363bb4813d037bce5282 Mon Sep 17 00:00:00 2001 From: yotto3s Date: Sun, 28 Sep 2025 02:49:34 +0900 Subject: [PATCH 02/11] [CIR] add definition for LongjmpOp --- clang/include/clang/CIR/Dialect/IR/CIROps.td | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/clang/include/clang/CIR/Dialect/IR/CIROps.td b/clang/include/clang/CIR/Dialect/IR/CIROps.td index cc40bf2fc291..17c9ab804e86 100644 --- a/clang/include/clang/CIR/Dialect/IR/CIROps.td +++ b/clang/include/clang/CIR/Dialect/IR/CIROps.td @@ -4768,6 +4768,24 @@ def CIR_EhSetjmpOp : CIR_Op<"eh.setjmp"> { }]; } +def CIR_EhLongjmpOp : CIR_Op<"eh.longjmp"> { + let summary = "CIR longjmp operation"; + let description = [{ + Restore the environment (e.g., stack pointer, instruction pointer, signal mask, and other registers) + at the time of setjmp() call, by using the information saved in `env` by setjmp(). + + Examples: + ```mlir + cir.eh.longjmp %arg0 : (!cir.ptr) -> () + ``` + }]; + let arguments = (ins CIR_PointerType:$env); + + let assemblyFormat = [{ + $env `:` functional-type($env, results) attr-dict + }]; +} + //===----------------------------------------------------------------------===// // CopyOp //===----------------------------------------------------------------------===// From b0e6c3a2d996c6468e83568b0d3469c88cfb7e9d Mon Sep 17 00:00:00 2001 From: yotto3s Date: Sun, 28 Sep 2025 02:51:47 +0900 Subject: [PATCH 03/11] [CIR] implemented a lowering function for CIR longjump op --- clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp | 9 +++++++++ clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.h | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp index 21b17142d8fe..bf9109c0737f 100644 --- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp +++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp @@ -4331,6 +4331,14 @@ mlir::LogicalResult CIRToLLVMEhSetjmpOpLowering::matchAndRewrite( return mlir::success(); } +mlir::LogicalResult CIRToLLVMEhLongjmpOpLowering::matchAndRewrite( + cir::EhLongjmpOp op, OpAdaptor adaptor, + mlir::ConversionPatternRewriter &rewriter) const { + replaceOpWithCallLLVMIntrinsicOp(rewriter, op, "llvm.eh.sjlj.longjmp", {}, + adaptor.getOperands()); + return mlir::success(); +} + mlir::LogicalResult CIRToLLVMCatchParamOpLowering::matchAndRewrite( cir::CatchParamOp op, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const { @@ -4635,6 +4643,7 @@ void populateCIRToLLVMConversionPatterns( CIRToLLVMEhInflightOpLowering, CIRToLLVMEhTypeIdOpLowering, CIRToLLVMEhSetjmpOpLowering, + CIRToLLVMEhLongjmpOpLowering, CIRToLLVMExpectOpLowering, CIRToLLVMExtractMemberOpLowering, CIRToLLVMFrameAddrOpLowering, diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.h b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.h index f13c37106665..445249311996 100644 --- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.h +++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.h @@ -1273,6 +1273,16 @@ class CIRToLLVMEhSetjmpOpLowering mlir::ConversionPatternRewriter &) const override; }; +class CIRToLLVMEhLongjmpOpLowering + : public mlir::OpConversionPattern { +public: + using mlir::OpConversionPattern::OpConversionPattern; + + mlir::LogicalResult + matchAndRewrite(cir::EhLongjmpOp op, OpAdaptor, + mlir::ConversionPatternRewriter &) const override; +}; + class CIRToLLVMCatchParamOpLowering : public mlir::OpConversionPattern { public: From 8d9aba36cc97d3f2a7eada5a4c6f2f545b5ab753 Mon Sep 17 00:00:00 2001 From: yotto3s Date: Sun, 28 Sep 2025 02:54:01 +0900 Subject: [PATCH 04/11] [CIR] added codegen test for CIR longjmp op --- .../test/CIR/CodeGen/builtin-setjmp-longjmp.c | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c b/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c index b63f3a75da5a..d44dd0b2ded0 100644 --- a/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c +++ b/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c @@ -61,3 +61,26 @@ void test_setjmp2(void *env) { // OGCG: call i32 @_setjmp(ptr noundef [[ENV]]) _setjmp (env); } + +void test_longjmp(void *env) { + // CIR-LABEL: test_longjmp + // CIR-SAME: [[ENV:%.*]]: + // CIR-NEXT: [[ENV_ALLOCA:%[0-9]+]] = cir.alloca !cir.ptr, !cir.ptr>, + // CIR-NEXT: cir.store [[ENV]], [[ENV_ALLOCA]] : !cir.ptr, !cir.ptr> + // CIR-NEXT: [[ENV_LOAD:%[0-9]+]] = cir.load align(8) [[ENV_ALLOCA]] + // CIR-NEXT: [[CAST:%[0-9]+]] = cir.cast(bitcast, [[ENV_LOAD]] : !cir.ptr), !cir.ptr> + // CIR-NEXT: cir.eh.longjmp [[CAST]] : (!cir.ptr>) -> () + // CIR-NEXT: cir.unreachable + + + // LLVM-LABEL: test_longjmp + // LLVM-SAME: (ptr{{.*}}[[ENV:%.*]]) + // LLVM-NEXT: @llvm.eh.sjlj.longjmp(ptr{{.*}}[[ENV]]) + // LLVM-NEXT: unreachable + + // OGCG-LABEL: test_longjmp + // OGCG-SAME: (ptr{{.*}}[[ENV:%.*]]) + // OGCG: @llvm.eh.sjlj.longjmp(ptr{{.*}}[[ENV]]) + // OGCG-NEXT: unreachable + __builtin_longjmp(env, 1); +} From 6eb037f3b5538b52d869d29a39fba1148f035bc0 Mon Sep 17 00:00:00 2001 From: yotto3s Date: Sun, 28 Sep 2025 02:54:22 +0900 Subject: [PATCH 05/11] [CIR] implemented codegen for CIR longjmp op --- clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp index 192f2233fcd8..8feb872b5115 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp @@ -1963,8 +1963,16 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, cir::EhSetjmpOp::create(builder, loc, castBuf, /*is_builtin=*/true); return RValue::get(op); } - case Builtin::BI__builtin_longjmp: - llvm_unreachable("BI__builtin_longjmp NYI"); + case Builtin::BI__builtin_longjmp: { + Address buf = emitPointerWithAlignment(E->getArg(0)); + mlir::Location loc = getLoc(E->getExprLoc()); + + cir::PointerType ppTy = builder.getPointerTo(builder.getVoidPtrTy()); + mlir::Value castBuf = builder.createBitcast(buf.getPointer(), ppTy); + cir::EhLongjmpOp::create(builder, loc, castBuf); + builder.create(loc); + return RValue::get(nullptr); + } case Builtin::BI__builtin_launder: { const clang::Expr *arg = E->getArg(0); clang::QualType argTy = arg->getType()->getPointeeType(); From a352f35dc169b402f5e54325ddef6cd1ea99c8b8 Mon Sep 17 00:00:00 2001 From: toyoyou11 Date: Sun, 28 Sep 2025 14:59:59 +0900 Subject: [PATCH 06/11] [CIR] add comment --- clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp index bf9109c0737f..7798ee5093bb 100644 --- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp +++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp @@ -4334,8 +4334,8 @@ mlir::LogicalResult CIRToLLVMEhSetjmpOpLowering::matchAndRewrite( mlir::LogicalResult CIRToLLVMEhLongjmpOpLowering::matchAndRewrite( cir::EhLongjmpOp op, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const { - replaceOpWithCallLLVMIntrinsicOp(rewriter, op, "llvm.eh.sjlj.longjmp", {}, - adaptor.getOperands()); + replaceOpWithCallLLVMIntrinsicOp(rewriter, op, "llvm.eh.sjlj.longjmp", + /*resultTy=*/{}, adaptor.getOperands()); return mlir::success(); } From 9a395ad0ff2c23f87abc91e575e039aae9b2e552 Mon Sep 17 00:00:00 2001 From: toyoyou11 Date: Sun, 28 Sep 2025 21:49:02 +0900 Subject: [PATCH 07/11] [CIR] updated longjmp assembly format --- clang/include/clang/CIR/Dialect/IR/CIROps.td | 5 +++-- clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c | 2 +- clang/test/CIR/Lowering/setjmp-longjmp.cir | 2 +- clang/test/CIR/Transforms/setjmp-longjmp-lower.c | 4 ++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/clang/include/clang/CIR/Dialect/IR/CIROps.td b/clang/include/clang/CIR/Dialect/IR/CIROps.td index 17c9ab804e86..888190782695 100644 --- a/clang/include/clang/CIR/Dialect/IR/CIROps.td +++ b/clang/include/clang/CIR/Dialect/IR/CIROps.td @@ -4776,13 +4776,14 @@ def CIR_EhLongjmpOp : CIR_Op<"eh.longjmp"> { Examples: ```mlir - cir.eh.longjmp %arg0 : (!cir.ptr) -> () + cir.eh.longjmp %arg0 : !cir.ptr ``` }]; + let arguments = (ins CIR_PointerType:$env); let assemblyFormat = [{ - $env `:` functional-type($env, results) attr-dict + $env `:` qualified(type($env)) attr-dict }]; } diff --git a/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c b/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c index d44dd0b2ded0..d5410f9695a0 100644 --- a/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c +++ b/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c @@ -69,7 +69,7 @@ void test_longjmp(void *env) { // CIR-NEXT: cir.store [[ENV]], [[ENV_ALLOCA]] : !cir.ptr, !cir.ptr> // CIR-NEXT: [[ENV_LOAD:%[0-9]+]] = cir.load align(8) [[ENV_ALLOCA]] // CIR-NEXT: [[CAST:%[0-9]+]] = cir.cast(bitcast, [[ENV_LOAD]] : !cir.ptr), !cir.ptr> - // CIR-NEXT: cir.eh.longjmp [[CAST]] : (!cir.ptr>) -> () + // CIR-NEXT: cir.eh.longjmp [[CAST]] : !cir.ptr> // CIR-NEXT: cir.unreachable diff --git a/clang/test/CIR/Lowering/setjmp-longjmp.cir b/clang/test/CIR/Lowering/setjmp-longjmp.cir index 58bdfef1e055..1a441ce494e0 100644 --- a/clang/test/CIR/Lowering/setjmp-longjmp.cir +++ b/clang/test/CIR/Lowering/setjmp-longjmp.cir @@ -29,7 +29,7 @@ module { // MLIR-NEXT: llvm.call_intrinsic "llvm.eh.sjlj.longjmp"([[ARG0]]) : (!llvm.ptr) -> () // MLIR-NEXT: llvm.unreachable // MLIR-NEXT: } - cir.eh.longjmp %arg0 : (!p32) -> () + cir.eh.longjmp %arg0 : !p32 cir.unreachable } // MLIR: } diff --git a/clang/test/CIR/Transforms/setjmp-longjmp-lower.c b/clang/test/CIR/Transforms/setjmp-longjmp-lower.c index a69b361a8d17..0976431f5d70 100644 --- a/clang/test/CIR/Transforms/setjmp-longjmp-lower.c +++ b/clang/test/CIR/Transforms/setjmp-longjmp-lower.c @@ -59,7 +59,7 @@ void test_longjmp(void *env) { // BEFORE-LOWERING-PREPARE-NEXT: cir.store [[ENV]], [[ENV_ALLOCA]] // BEFORE-LOWERING-PREPARE-NEXT: [[ENV_LOAD:%.*]] = cir.load align(8) [[ENV_ALLOCA]] // BEFORE-LOWERING-PREPARE-NEXT: [[CAST:%.*]] = cir.cast(bitcast, [[ENV_LOAD]] - // BEFORE-LOWERING-PREPARE-NEXT: cir.eh.longjmp [[CAST]] : (!cir.ptr>) -> () + // BEFORE-LOWERING-PREPARE-NEXT: cir.eh.longjmp [[CAST]] : !cir.ptr> // BEFORE-LOWERING-PREPARE-NEXT: cir.unreachable // AFTER-LOWERING-PREPARE-LABEL: test_longjmp @@ -68,7 +68,7 @@ void test_longjmp(void *env) { // AFTER-LOWERING-PREPARE-NEXT: cir.store [[ENV]], [[ENV_ALLOCA]] // AFTER-LOWERING-PREPARE-NEXT: [[ENV_LOAD:%.*]] = cir.load align(8) [[ENV_ALLOCA]] // AFTER-LOWERING-PREPARE-NEXT: [[CAST:%.*]] = cir.cast(bitcast, [[ENV_LOAD]] - // AFTER-LOWERING-PREPARE-NEXT: cir.eh.longjmp [[CAST]] : (!cir.ptr>) + // AFTER-LOWERING-PREPARE-NEXT: cir.eh.longjmp [[CAST]] : !cir.ptr> // AFTER-LOWERING-PREPARE-NEXT: cir.unreachable __builtin_longjmp(env, 1); } From 719478cc8fee52b80b069623dbaadefaf9a0d847 Mon Sep 17 00:00:00 2001 From: toyoyou11 Date: Wed, 1 Oct 2025 21:01:50 +0900 Subject: [PATCH 08/11] [CIR] formatted longjmp op description --- clang/include/clang/CIR/Dialect/IR/CIROps.td | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/CIR/Dialect/IR/CIROps.td b/clang/include/clang/CIR/Dialect/IR/CIROps.td index 888190782695..57c6cd9171aa 100644 --- a/clang/include/clang/CIR/Dialect/IR/CIROps.td +++ b/clang/include/clang/CIR/Dialect/IR/CIROps.td @@ -4771,8 +4771,9 @@ def CIR_EhSetjmpOp : CIR_Op<"eh.setjmp"> { def CIR_EhLongjmpOp : CIR_Op<"eh.longjmp"> { let summary = "CIR longjmp operation"; let description = [{ - Restore the environment (e.g., stack pointer, instruction pointer, signal mask, and other registers) - at the time of setjmp() call, by using the information saved in `env` by setjmp(). + Restore the environment (e.g., stack pointer, instruction pointer, + signal mask, and other registers) at the time of setjmp() call, by using + the information saved in `env` by setjmp(). Examples: ```mlir From 399ce3b5a91b4314b139a879900df3e189b14606 Mon Sep 17 00:00:00 2001 From: toyoyou11 Date: Wed, 1 Oct 2025 21:31:18 +0900 Subject: [PATCH 09/11] [CIR] update longjmp op test --- clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c b/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c index d5410f9695a0..ffc55216b6a2 100644 --- a/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c +++ b/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c @@ -74,13 +74,11 @@ void test_longjmp(void *env) { // LLVM-LABEL: test_longjmp - // LLVM-SAME: (ptr{{.*}}[[ENV:%.*]]) - // LLVM-NEXT: @llvm.eh.sjlj.longjmp(ptr{{.*}}[[ENV]]) + // LLVM: @llvm.eh.sjlj.longjmp // LLVM-NEXT: unreachable // OGCG-LABEL: test_longjmp - // OGCG-SAME: (ptr{{.*}}[[ENV:%.*]]) - // OGCG: @llvm.eh.sjlj.longjmp(ptr{{.*}}[[ENV]]) + // OGCG: @llvm.eh.sjlj.longjmp // OGCG-NEXT: unreachable __builtin_longjmp(env, 1); } From f120ad1e0c9ee1dd1204fa4473dd6d5d41fa90dd Mon Sep 17 00:00:00 2001 From: toyoyou11 Date: Wed, 1 Oct 2025 22:33:06 +0900 Subject: [PATCH 10/11] [CIR] removed casting in longjmp codegen --- clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp index 8feb872b5115..62520ca17107 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp @@ -1964,12 +1964,10 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID, return RValue::get(op); } case Builtin::BI__builtin_longjmp: { - Address buf = emitPointerWithAlignment(E->getArg(0)); + mlir::Value buf = emitScalarExpr(E->getArg(0)); mlir::Location loc = getLoc(E->getExprLoc()); - cir::PointerType ppTy = builder.getPointerTo(builder.getVoidPtrTy()); - mlir::Value castBuf = builder.createBitcast(buf.getPointer(), ppTy); - cir::EhLongjmpOp::create(builder, loc, castBuf); + cir::EhLongjmpOp::create(builder, loc, buf); builder.create(loc); return RValue::get(nullptr); } From 37110ff917aa4c78619ba7095fffc95f2a6bddd8 Mon Sep 17 00:00:00 2001 From: toyoyou11 Date: Sat, 4 Oct 2025 12:50:43 +0900 Subject: [PATCH 11/11] [CIR] fixed bitcast format in longjmp test --- clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c | 2 +- clang/test/CIR/Transforms/setjmp-longjmp-lower.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c b/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c index ffc55216b6a2..2d96139c347f 100644 --- a/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c +++ b/clang/test/CIR/CodeGen/builtin-setjmp-longjmp.c @@ -68,7 +68,7 @@ void test_longjmp(void *env) { // CIR-NEXT: [[ENV_ALLOCA:%[0-9]+]] = cir.alloca !cir.ptr, !cir.ptr>, // CIR-NEXT: cir.store [[ENV]], [[ENV_ALLOCA]] : !cir.ptr, !cir.ptr> // CIR-NEXT: [[ENV_LOAD:%[0-9]+]] = cir.load align(8) [[ENV_ALLOCA]] - // CIR-NEXT: [[CAST:%[0-9]+]] = cir.cast(bitcast, [[ENV_LOAD]] : !cir.ptr), !cir.ptr> + // CIR-NEXT: [[CAST:%[0-9]+]] = cir.cast bitcast [[ENV_LOAD]] : !cir.ptr -> !cir.ptr> // CIR-NEXT: cir.eh.longjmp [[CAST]] : !cir.ptr> // CIR-NEXT: cir.unreachable diff --git a/clang/test/CIR/Transforms/setjmp-longjmp-lower.c b/clang/test/CIR/Transforms/setjmp-longjmp-lower.c index 0976431f5d70..33b4643eb081 100644 --- a/clang/test/CIR/Transforms/setjmp-longjmp-lower.c +++ b/clang/test/CIR/Transforms/setjmp-longjmp-lower.c @@ -58,7 +58,7 @@ void test_longjmp(void *env) { // BEFORE-LOWERING-PREPARE-NEXT: [[ENV_ALLOCA:%.*]] = cir.alloca // BEFORE-LOWERING-PREPARE-NEXT: cir.store [[ENV]], [[ENV_ALLOCA]] // BEFORE-LOWERING-PREPARE-NEXT: [[ENV_LOAD:%.*]] = cir.load align(8) [[ENV_ALLOCA]] - // BEFORE-LOWERING-PREPARE-NEXT: [[CAST:%.*]] = cir.cast(bitcast, [[ENV_LOAD]] + // BEFORE-LOWERING-PREPARE-NEXT: [[CAST:%.*]] = cir.cast bitcast [[ENV_LOAD]] // BEFORE-LOWERING-PREPARE-NEXT: cir.eh.longjmp [[CAST]] : !cir.ptr> // BEFORE-LOWERING-PREPARE-NEXT: cir.unreachable @@ -67,7 +67,7 @@ void test_longjmp(void *env) { // AFTER-LOWERING-PREPARE-NEXT: [[ENV_ALLOCA:%.*]] = cir.alloca // AFTER-LOWERING-PREPARE-NEXT: cir.store [[ENV]], [[ENV_ALLOCA]] // AFTER-LOWERING-PREPARE-NEXT: [[ENV_LOAD:%.*]] = cir.load align(8) [[ENV_ALLOCA]] - // AFTER-LOWERING-PREPARE-NEXT: [[CAST:%.*]] = cir.cast(bitcast, [[ENV_LOAD]] + // AFTER-LOWERING-PREPARE-NEXT: [[CAST:%.*]] = cir.cast bitcast [[ENV_LOAD]] // AFTER-LOWERING-PREPARE-NEXT: cir.eh.longjmp [[CAST]] : !cir.ptr> // AFTER-LOWERING-PREPARE-NEXT: cir.unreachable __builtin_longjmp(env, 1);