Index: lib/Target/AMDGPU/BUFInstructions.td =================================================================== --- lib/Target/AMDGPU/BUFInstructions.td +++ lib/Target/AMDGPU/BUFInstructions.td @@ -1535,7 +1535,7 @@ defm : MUBUFScratchLoadPat ; defm : MUBUFScratchLoadPat ; -foreach vt = [i32, f32, v2i16, v2f16, p2, p3, p5, p6] in { +foreach vt = Reg32Types.types in { defm : MUBUFScratchLoadPat ; } defm : MUBUFScratchLoadPat ; @@ -1613,7 +1613,7 @@ defm : MUBUFScratchStorePat ; defm : MUBUFScratchStorePat ; -foreach vt = [i32, f32, v2i16, v2f16, p2, p3, p5, p6] in { +foreach vt = Reg32Types.types in { defm : MUBUFScratchStorePat ; } Index: lib/Target/AMDGPU/DSInstructions.td =================================================================== --- lib/Target/AMDGPU/DSInstructions.td +++ lib/Target/AMDGPU/DSInstructions.td @@ -640,7 +640,7 @@ defm : DSReadPat_mc ; defm : DSReadPat_mc ; -foreach vt = [i32, f32, v2i16, v2f16, p2, p3, p5, p6] in { +foreach vt = Reg32Types.types in { defm : DSReadPat_mc ; } Index: lib/Target/AMDGPU/FLATInstructions.td =================================================================== --- lib/Target/AMDGPU/FLATInstructions.td +++ lib/Target/AMDGPU/FLATInstructions.td @@ -786,7 +786,7 @@ def : FlatStorePat ; def : FlatStorePat ; -foreach vt = [i32, f32, v2i16, v2f16, p2, p3, p5, p6] in { +foreach vt = Reg32Types.types in { def : FlatLoadPat ; def : FlatStorePat ; } @@ -867,7 +867,7 @@ def : FlatLoadSignedPat ; def : FlatLoadSignedPat ; -foreach vt = [i32, f32, v2i16, v2f16, p2, p3, p5, p6] in { +foreach vt = Reg32Types.types in { def : FlatLoadSignedPat ; def : FlatStoreSignedPat ; } Index: lib/Target/AMDGPU/SIRegisterInfo.td =================================================================== --- lib/Target/AMDGPU/SIRegisterInfo.td +++ lib/Target/AMDGPU/SIRegisterInfo.td @@ -350,9 +350,17 @@ TTMP8_gfx9_gfx10, TTMP9_gfx9_gfx10, TTMP10_gfx9_gfx10, TTMP11_gfx9_gfx10, TTMP12_gfx9_gfx10, TTMP13_gfx9_gfx10, TTMP14_gfx9_gfx10, TTMP15_gfx9_gfx10]>; +class RegisterTypes reg_types> { + list types = reg_types; +} + +def Reg16Types : RegisterTypes<[i16, f16]>; +def Reg32Types : RegisterTypes<[i32, f32, v2i16, v2f16, p2, p3, p5, p6]>; + + // VGPR 32-bit registers // i16/f16 only on VI+ -def VGPR_32 : RegisterClass<"AMDGPU", [i32, f32, i16, f16, v2i16, v2f16, p2, p3, p5, p6], 32, +def VGPR_32 : RegisterClass<"AMDGPU", !listconcat(Reg32Types.types, Reg16Types.types), 32, (add (sequence "VGPR%u", 0, 255))> { let AllocationPriority = 1; let Size = 32;