================ @@ -961,6 +961,18 @@ GCNTTIImpl::instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const { return IC.replaceInstUsesWith(II, Constant::getNullValue(II.getType())); } } + if (ST->isWave32() && II.getType()->getIntegerBitWidth() == 64) { + // %b64 = call i64 ballot.i64(...) + // => + // %b32 = call i32 ballot.i32(...) + // %b64 = zext i32 %b32 to i64 + Function *NewF = Intrinsic::getDeclaration( + II.getModule(), Intrinsic::amdgcn_ballot, {IC.Builder.getInt32Ty()}); + CallInst *NewCall = IC.Builder.CreateCall(NewF, {II.getArgOperand(0)}); + Value *CastedCall = IC.Builder.CreateZExtOrBitCast(NewCall, II.getType()); + CastedCall->takeName(&II); + return IC.replaceInstUsesWith(II, CastedCall); ---------------- vpykhtin wrote:
Thanks, changed to `IC.Builder.CreateIntrinsic`. I decided to use it as a temp for `CreateZExtOrBitCast`. https://github.com/llvm/llvm-project/pull/71556 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits