@@ -405,15 +405,28 @@ Value AtomicRMWEmitter::atomicIntraWaveReduce(RewriterBase &rewriter,
405405 Value done = b.icmp_eq (chosen, rmwPtr);
406406 Value mask = targetInfo.ballot (rewriter, loc, i64_ty, done);
407407 Value start = loopBody->getArgument (0 );
408+ NamedAttribute noundef = rewriter.getNamedAttr (
409+ LLVM::LLVMDialect::getNoUndefAttrName (), rewriter.getUnitAttr ());
410+ NamedAttribute lowRange = rewriter.getNamedAttr (
411+ LLVM::LLVMDialect::getRangeAttrName (),
412+ LLVM::ConstantRangeAttr::get (rewriter.getContext (), APInt::getZero (32 ),
413+ APInt (32 , 32 )));
414+ NamedAttribute highRange = rewriter.getNamedAttr (
415+ LLVM::LLVMDialect::getRangeAttrName (),
416+ LLVM::ConstantRangeAttr::get (rewriter.getContext (), APInt::getZero (32 ),
417+ APInt (32 , 64 )));
408418 Value cnt = b.trunc (i32_ty, generatePopcount64 (rewriter, mask));
409419 Value maskLo = b.trunc (i32_ty, mask);
410- Value mbcntLoRes =
411- ROCDL::MbcntLoOp::create (rewriter, loc, i32_ty, maskLo, b.i32_val (0 ),
412- /* arg_attrs=*/ {}, /* res_attrs=*/ {});
420+ Value mbcntLoRes = ROCDL::MbcntLoOp::create (
421+ rewriter, loc, i32_ty, maskLo, b.i32_val (0 ),
422+ /* arg_attrs=*/ {}, /* res_attrs=*/
423+ rewriter.getArrayAttr (rewriter.getDictionaryAttr ({noundef, lowRange})));
413424 Value maskHi = b.trunc (i32_ty, b.lshr (mask, b.i64_val (32 )));
414- Value idx =
415- ROCDL::MbcntHiOp::create (rewriter, loc, i32_ty, maskHi, mbcntLoRes,
416- /* arg_attrs=*/ {}, /* res_attrs=*/ {});
425+ Value idx = ROCDL::MbcntHiOp::create (
426+ rewriter, loc, i32_ty, maskHi, mbcntLoRes,
427+ /* arg_attrs=*/ {},
428+ /* res_attrs=*/
429+ rewriter.getArrayAttr (rewriter.getDictionaryAttr ({noundef, highRange})));
417430 Value base = b.add (start, cnt);
418431 Value leader = b.icmp_eq (idx, b.i32_val (0 ));
419432 cnt = b.sub (cnt, idx);
0 commit comments