================
@@ -820,8 +820,13 @@ mlir::LogicalResult 
CIRToLLVMSignBitOpLowering::matchAndRewrite(
 mlir::LogicalResult CIRToLLVMAssumeOpLowering::matchAndRewrite(
     cir::AssumeOp op, OpAdaptor adaptor,
     mlir::ConversionPatternRewriter &rewriter) const {
-  auto cond = adaptor.getPredicate();
-  rewriter.replaceOpWithNewOp<mlir::LLVM::AssumeOp>(op, cond);
+  mlir::Value cond = adaptor.getPredicate();
+  if (std::optional<llvm::StringRef> tag = op.getBundleTag()) {
+    rewriter.replaceOpWithNewOp<mlir::LLVM::AssumeOp>(op, cond, *tag,
+                                                      adaptor.getBundleArgs());
+  } else {
+    rewriter.replaceOpWithNewOp<mlir::LLVM::AssumeOp>(op, cond);
----------------
adams381 wrote:

Done -- under the new parallel-array bundle shape the lowering is a single 
`replaceOpWithNewOp` forward of `(predicate, materialized 
SmallVector<ValueRange>, op_bundle_tags ArrayAttr)`.  Couldn't literally use 
`value_or("")` because `llvm.assume`'s `(cond, StringRef tag, ValueRange args)` 
builder always wraps into a one-bundle form (LLVMDialect.cpp:4321-4324), so an 
empty tag would mean "one bundle with an empty tag," not "no bundle."  
Forwarding the three parallel fields sidesteps that.


https://github.com/llvm/llvm-project/pull/197262
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to