[llvm] [AMDGPU][GlobalISel] Add combines with or/and that only use half of 64bit values (PR #151519)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 1 02:07:16 PDT 2025
================
@@ -516,3 +516,29 @@ bool AMDGPUCombinerHelper::matchCombineFmulWithSelectToFldexp(
return true;
}
+
+void AMDGPUCombinerHelper::applyCombineOrS64S32(MachineInstr &MI,
+ Register SrcS64,
+ Register SrcS32) const {
+ Register DstReg = MI.getOperand(0).getReg();
+
+ auto UnmergeParts = Builder.buildUnmerge(LLT::scalar(32), SrcS64);
+ Register SrcS64Lo = UnmergeParts.getReg(0);
+ Register SrcS64Hi = UnmergeParts.getReg(1);
+
+ auto Or = Builder.buildOr(LLT::scalar(32), SrcS64Lo, SrcS32).getReg(0);
+ Builder.buildMergeValues(DstReg, {Or, SrcS64Hi});
+ MI.eraseFromParent();
----------------
arsenm wrote:
Why do you need to drop to c++ for this? This looks like you can directly write the output in the apply?
https://github.com/llvm/llvm-project/pull/151519
More information about the llvm-commits
mailing list