Index: llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp =================================================================== --- llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp +++ llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUInstPrinter.cpp @@ -422,8 +422,8 @@ O<< "4.0"; else if (Imm == 0xC400) O<< "-4.0"; - else if (Imm == 0x3118) { - assert(STI.getFeatureBits()[AMDGPU::FeatureInv2PiInlineImm]); + else if (Imm == 0x3118 && + STI.getFeatureBits()[AMDGPU::FeatureInv2PiInlineImm]) { O << "0.15915494"; } else O << formatHex(static_cast(Imm)); Index: llvm/test/MC/AMDGPU/inline-imm-inv2pi.s =================================================================== --- /dev/null +++ llvm/test/MC/AMDGPU/inline-imm-inv2pi.s @@ -0,0 +1,10 @@ +// RUN: llvm-mc -arch=amdgcn -mcpu=tahiti -show-encoding %s | FileCheck -check-prefix=SI %s +// RUN: llvm-mc -arch=amdgcn -mcpu=tonga -show-encoding %s | FileCheck -check-prefix=VI %s + +// The value inv2pi should not assert on any targets, but is +// printed differently depending on whether it's a legal inline +// immediate or not. + +// SI: v_cvt_f32_f16_e32 v0, 0x3118 ; encoding: [0xff,0x16,0x00,0x7e,0x18,0x31,0x00,0x00] +// VI: v_cvt_f32_f16_e32 v0, 0.15915494 ; encoding: [0xf8,0x16,0x00,0x7e] +v_cvt_f32_f16_e32 v0, 0x3118