[llvm-branch-commits] [llvm] [AMDGPU] Fix disasm roundtrip for forced fp64 literal (PR #197583)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed May 13 15:52:58 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-amdgpu
Author: Stanislav Mekhanoshin (rampitec)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/197583.diff
2 Files Affected:
- (modified) llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp (+3-1)
- (modified) llvm/test/MC/AMDGPU/literals.s (+2-4)
``````````diff
diff --git a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
index ea928386b80c6..34f2bec387a93 100644
--- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
+++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
@@ -1681,7 +1681,9 @@ AMDGPUDisassembler::decodeLiteralConstant(const MCInstrDesc &Desc,
case AMDGPU::OPERAND_REG_IMM_FP64:
case AMDGPU::OPERAND_REG_INLINE_C_FP64:
case AMDGPU::OPERAND_REG_INLINE_AC_FP64:
- Val <<= 32;
+ UseLit = AMDGPU::isInlinableLiteral64(Val << 32, HasInv2Pi);
+ if (!UseLit)
+ Val <<= 32;
break;
case AMDGPU::OPERAND_REG_IMM_INT64:
case AMDGPU::OPERAND_REG_INLINE_C_INT64:
diff --git a/llvm/test/MC/AMDGPU/literals.s b/llvm/test/MC/AMDGPU/literals.s
index eb34ea0316945..d022b50297357 100644
--- a/llvm/test/MC/AMDGPU/literals.s
+++ b/llvm/test/MC/AMDGPU/literals.s
@@ -195,12 +195,11 @@ v_fract_f64_e32 v[0:1], 1.0
// SICI: v_fract_f64_e32 v[0:1], 1.0 ; encoding: [0xf2,0x7c,0x00,0x7e]
-// FIXME: Forced lit() encoding is not preserved after disasm
v_fract_f64_e32 v[0:1], lit(1.0)
// GFX11: v_fract_f64_e32 v[0:1], lit(0x3ff00000) ; encoding: [0xff,0x7c,0x00,0x7e,0x00,0x00,0xf0,0x3f]
// GFX12: v_fract_f64_e32 v[0:1], lit(0x3ff00000) ; encoding: [0xff,0x7c,0x00,0x7e,0x00,0x00,0xf0,0x3f]
// GFX1250-ASM: v_fract_f64_e32 v[0:1], lit(0x3ff00000) ; encoding: [0xff,0x7c,0x00,0x7e,0x00,0x00,0xf0,0x3f]
-// GFX1250-DIS: v_fract_f64_e32 v[0:1], 1.0 ; encoding: [0xf2,0x7c,0x00,0x7e]
+// GFX1250-DIS: v_fract_f64_e32 v[0:1], lit(0x3ff00000) ; encoding: [0xff,0x7c,0x00,0x7e,0x00,0x00,0xf0,0x3f]
// GFX89: v_fract_f64_e32 v[0:1], lit(0x3ff00000) ; encoding: [0xff,0x64,0x00,0x7e,0x00,0x00,0xf0,0x3f]
// SICI: v_fract_f64_e32 v[0:1], lit(0x3ff00000) ; encoding: [0xff,0x7c,0x00,0x7e,0x00,0x00,0xf0,0x3f]
@@ -1986,12 +1985,11 @@ v_add_f64 v[0:1], v[0:1], lit(1)
// GFX89: v_add_f64 v[0:1], v[0:1], lit(0x1) ; encoding: [0x00,0x00,0x80,0xd2,0x00,0xff,0x01,0x00]
// SICI: v_add_f64 v[0:1], v[0:1], lit(0x1) ; encoding: [0x00,0x00,0xc8,0xd2,0x00,0xff,0x01,0x00]
-// FIXME: Forced lit() encoding is not preserved after disasm
v_add_f64 v[0:1], v[0:1], lit(1.0)
// GFX11: v_add_f64 v[0:1], v[0:1], lit(0x3ff00000) ; encoding: [0x00,0x00,0x27,0xd7,0x00,0xff,0x01,0x02,0x00,0x00,0xf0,0x3f]
// GFX12: v_add_f64_e64 v[0:1], v[0:1], lit(0x3ff00000) ; encoding: [0x00,0x00,0x02,0xd5,0x00,0xff,0x01,0x02,0x00,0x00,0xf0,0x3f]
// GFX1250-ASM: v_add_f64_e64 v[0:1], v[0:1], lit(0x3ff00000) ; encoding: [0x00,0x00,0x02,0xd5,0x00,0xff,0x01,0x02,0x00,0x00,0xf0,0x3f]
-// GFX1250-DIS: v_add_f64_e64 v[0:1], v[0:1], 1.0 ; encoding: [0x00,0x00,0x02,0xd5,0x00,0xe5,0x01,0x02]
+// GFX1250-DIS: v_add_f64_e64 v[0:1], v[0:1], lit(0x3ff00000) ; encoding: [0x00,0x00,0x02,0xd5,0x00,0xff,0x01,0x02,0x00,0x00,0xf0,0x3f]
// NOGFX89: :[[@LINE-5]]:31: error: literal operands are not supported
// NOSICI: :[[@LINE-6]]:31: error: literal operands are not supported
``````````
</details>
https://github.com/llvm/llvm-project/pull/197583
More information about the llvm-branch-commits
mailing list