Index: lib/Target/AMDGPU/SIInstrInfo.cpp =================================================================== --- lib/Target/AMDGPU/SIInstrInfo.cpp +++ lib/Target/AMDGPU/SIInstrInfo.cpp @@ -4753,12 +4753,12 @@ if (DescSize != 0 && DescSize != 4) return DescSize; + if (isFixedSize(MI)) + return DescSize; + // 4-byte instructions may have a 32-bit literal encoded after them. Check // operands that coud ever be literals. if (isVALU(MI) || isSALU(MI)) { - if (isFixedSize(MI)) - return DescSize; - int Src0Idx = AMDGPU::getNamedOperandIdx(Opc, AMDGPU::OpName::src0); if (Src0Idx == -1) return 4; // No operands. Index: lib/Target/AMDGPU/SIInstructions.td =================================================================== --- lib/Target/AMDGPU/SIInstructions.td +++ lib/Target/AMDGPU/SIInstructions.td @@ -374,6 +374,7 @@ let isReturn = 1; let hasNoSchedulingInfo = 1; let DisableWQM = 1; + let FixedSize = 1; } // Return for returning function calls. Index: test/CodeGen/AMDGPU/ret.ll =================================================================== --- test/CodeGen/AMDGPU/ret.ll +++ test/CodeGen/AMDGPU/ret.ll @@ -241,6 +241,12 @@ ret { { float, i32 }, { i32, <2 x float> } } { { float, i32 } { float 1.000000e+00, i32 2 }, { i32, <2 x float> } { i32 3, <2 x float> } } } +; GCN-LABEL: {{^}}ret_return_to_epilog_pseudo_size: +; GCN: codeLenInByte = 0{{$}} +define amdgpu_ps float @ret_return_to_epilog_pseudo_size() #0 { + ret float undef +} + declare void @llvm.amdgcn.exp.f32(i32, i32, float, float, float, float, i1, i1) #0 attributes #0 = { nounwind }