diff options
| author | Andy Kaylor <akaylor@nvidia.com> | 2025-10-22 15:47:00 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-22 15:47:00 -0700 |
| commit | 095c178b8b1c3e8d880cb831354294fefae24aed (patch) | |
| tree | 4e1da630415109c4c574c78206e0c8ce785c49b2 /clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp | |
| parent | d46ef863d9549ddcea3e592b44bab0fc03edc5d5 (diff) | |
[CIR] Add support for exact dynamic casts (#164007)
This adds support for handling exact dynamic casts when optimizations
are enabled.
Diffstat (limited to 'clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp')
| -rw-r--r-- | clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp index 61660db7f96f..a30ae02c895c 100644 --- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp +++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp @@ -2411,6 +2411,15 @@ mlir::LogicalResult CIRToLLVMCmpOpLowering::matchAndRewrite( return mlir::success(); } + if (auto vptrTy = mlir::dyn_cast<cir::VPtrType>(type)) { + // !cir.vptr is a special case, but it's just a pointer to LLVM. + auto kind = convertCmpKindToICmpPredicate(cmpOp.getKind(), + /* isSigned=*/false); + rewriter.replaceOpWithNewOp<mlir::LLVM::ICmpOp>( + cmpOp, kind, adaptor.getLhs(), adaptor.getRhs()); + return mlir::success(); + } + if (mlir::isa<cir::FPTypeInterface>(type)) { mlir::LLVM::FCmpPredicate kind = convertCmpKindToFCmpPredicate(cmpOp.getKind()); |
