diff --git a/llvm/lib/CodeGen/BranchFolding.cpp b/llvm/lib/CodeGen/BranchFolding.cpp --- a/llvm/lib/CodeGen/BranchFolding.cpp +++ b/llvm/lib/CodeGen/BranchFolding.cpp @@ -860,6 +860,19 @@ for (Register Reg : NewLiveIns) { if (!LiveRegs.available(*MRI, Reg)) continue; + + // Skip the register if we are about to add one of its super registers. + // TODO: Common this up with the same logic in addLineIns(). + bool ContainsSuperReg = false; + for (MCSuperRegIterator SReg(Reg, TRI); SReg.isValid(); ++SReg) { + if (NewLiveIns.contains(*SReg) && !MRI->isReserved(*SReg)) { + ContainsSuperReg = true; + break; + } + } + if (ContainsSuperReg) + continue; + DebugLoc DL; BuildMI(*Pred, InsertBefore, DL, TII->get(TargetOpcode::IMPLICIT_DEF), Reg); diff --git a/llvm/test/CodeGen/AMDGPU/resource-usage-agpr-hi16.ll b/llvm/test/CodeGen/AMDGPU/resource-usage-agpr-hi16.ll --- a/llvm/test/CodeGen/AMDGPU/resource-usage-agpr-hi16.ll +++ b/llvm/test/CodeGen/AMDGPU/resource-usage-agpr-hi16.ll @@ -37,20 +37,10 @@ ; GFX90A-NEXT: renamable $sgpr34_sgpr35 = S_MOV_B64 0 ; GFX90A-NEXT: renamable $vcc = S_AND_B64 $exec, renamable $sgpr30_sgpr31, implicit-def dead $scc ; GFX90A-NEXT: $vgpr24 = IMPLICIT_DEF - ; GFX90A-NEXT: $vgpr24_lo16 = IMPLICIT_DEF - ; GFX90A-NEXT: $vgpr24_hi16 = IMPLICIT_DEF ; GFX90A-NEXT: $agpr0 = IMPLICIT_DEF - ; GFX90A-NEXT: $agpr0_lo16 = IMPLICIT_DEF - ; GFX90A-NEXT: $agpr0_hi16 = IMPLICIT_DEF - ; GFX90A-NEXT: $vgpr26_lo16 = IMPLICIT_DEF - ; GFX90A-NEXT: $vgpr26_hi16 = IMPLICIT_DEF ; GFX90A-NEXT: $vgpr26 = IMPLICIT_DEF ; GFX90A-NEXT: $vgpr20 = IMPLICIT_DEF - ; GFX90A-NEXT: $vgpr20_lo16 = IMPLICIT_DEF - ; GFX90A-NEXT: $vgpr20_hi16 = IMPLICIT_DEF ; GFX90A-NEXT: $vgpr22 = IMPLICIT_DEF - ; GFX90A-NEXT: $vgpr22_lo16 = IMPLICIT_DEF - ; GFX90A-NEXT: $vgpr22_hi16 = IMPLICIT_DEF ; GFX90A-NEXT: S_CBRANCH_VCCNZ %bb.58, implicit $vcc ; GFX90A-NEXT: {{ $}} ; GFX90A-NEXT: bb.2: @@ -583,11 +573,7 @@ ; GFX90A-NEXT: renamable $vgpr63, dead renamable $vcc = V_ADDC_U32_e64 0, $vgpr41, killed $vcc, 0, implicit $exec ; GFX90A-NEXT: renamable $vcc = S_AND_B64 $exec, renamable $sgpr48_sgpr49, implicit-def dead $scc ; GFX90A-NEXT: $agpr0 = IMPLICIT_DEF - ; GFX90A-NEXT: $agpr0_lo16 = IMPLICIT_DEF - ; GFX90A-NEXT: $agpr0_hi16 = IMPLICIT_DEF ; GFX90A-NEXT: $vgpr14 = IMPLICIT_DEF - ; GFX90A-NEXT: $vgpr14_lo16 = IMPLICIT_DEF - ; GFX90A-NEXT: $vgpr14_hi16 = IMPLICIT_DEF ; GFX90A-NEXT: S_CBRANCH_VCCNZ %bb.48, implicit $vcc ; GFX90A-NEXT: {{ $}} ; GFX90A-NEXT: bb.44: