[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