@@ -1033,6 +1033,27 @@ void AMDGPUAsmPrinter::EmitProgramInfoSI(const MachineFunction &MF,
1033
1033
OutStreamer->emitInt32 (MFI->getNumSpilledVGPRs ());
1034
1034
}
1035
1035
1036
+ // Helper function to add common PAL Metadata 3.0+
1037
+ static void EmitPALMetadataCommon (AMDGPUPALMetadata *MD,
1038
+ const SIProgramInfo &CurrentProgramInfo,
1039
+ CallingConv::ID CC, const GCNSubtarget &ST) {
1040
+ if (ST.hasIEEEMode ())
1041
+ MD->setHwStage (CC, " .ieee_mode" , (bool )CurrentProgramInfo.IEEEMode );
1042
+
1043
+ MD->setHwStage (CC, " .wgp_mode" , (bool )CurrentProgramInfo.WgpMode );
1044
+ MD->setHwStage (CC, " .mem_ordered" , (bool )CurrentProgramInfo.MemOrdered );
1045
+
1046
+ if (AMDGPU::isCompute (CC)) {
1047
+ MD->setHwStage (CC, " .trap_present" ,
1048
+ (bool )CurrentProgramInfo.TrapHandlerEnable );
1049
+ MD->setHwStage (CC, " .excp_en" , CurrentProgramInfo.EXCPEnable );
1050
+
1051
+ MD->setHwStage (CC, " .lds_size" ,
1052
+ (unsigned )(CurrentProgramInfo.LdsSize *
1053
+ getLdsDwGranularity (ST) * sizeof (uint32_t )));
1054
+ }
1055
+ }
1056
+
1036
1057
// This is the equivalent of EmitProgramInfoSI above, but for when the OS type
1037
1058
// is AMDPAL. It stores each compute/SPI register setting and other PAL
1038
1059
// metadata items into the PALMD::Metadata, combining with any provided by the
@@ -1064,24 +1085,8 @@ void AMDGPUAsmPrinter::EmitPALMetadata(const MachineFunction &MF,
1064
1085
}
1065
1086
} else {
1066
1087
MD->setHwStage (CC, " .debug_mode" , (bool )CurrentProgramInfo.DebugMode );
1067
- MD->setHwStage (CC, " .ieee_mode" , (bool )CurrentProgramInfo.IEEEMode );
1068
- MD->setHwStage (CC, " .wgp_mode" , (bool )CurrentProgramInfo.WgpMode );
1069
- MD->setHwStage (CC, " .mem_ordered" , (bool )CurrentProgramInfo.MemOrdered );
1070
-
1071
- if (AMDGPU::isCompute (CC)) {
1072
- MD->setHwStage (CC, " .scratch_en" , (bool )CurrentProgramInfo.ScratchEnable );
1073
- MD->setHwStage (CC, " .trap_present" ,
1074
- (bool )CurrentProgramInfo.TrapHandlerEnable );
1075
-
1076
- // EXCPEnMSB?
1077
- const unsigned LdsDwGranularity = 128 ;
1078
- MD->setHwStage (CC, " .lds_size" ,
1079
- (unsigned )(CurrentProgramInfo.LdsSize * LdsDwGranularity *
1080
- sizeof (uint32_t )));
1081
- MD->setHwStage (CC, " .excp_en" , CurrentProgramInfo.EXCPEnable );
1082
- } else {
1083
- MD->setHwStage (CC, " .scratch_en" , (bool )CurrentProgramInfo.ScratchEnable );
1084
- }
1088
+ MD->setHwStage (CC, " .scratch_en" , (bool )CurrentProgramInfo.ScratchEnable );
1089
+ EmitPALMetadataCommon (MD, CurrentProgramInfo, CC, STM);
1085
1090
}
1086
1091
1087
1092
// ScratchSize is in bytes, 16 aligned.
@@ -1135,10 +1140,15 @@ void AMDGPUAsmPrinter::emitPALFunctionMetadata(const MachineFunction &MF) {
1135
1140
MD->setFunctionScratchSize (FnName, MFI.getStackSize ());
1136
1141
const GCNSubtarget &ST = MF.getSubtarget <GCNSubtarget>();
1137
1142
1138
- // Set compute registers
1139
- MD->setRsrc1 (CallingConv::AMDGPU_CS,
1140
- CurrentProgramInfo.getPGMRSrc1 (CallingConv::AMDGPU_CS, ST));
1141
- MD->setRsrc2 (CallingConv::AMDGPU_CS, CurrentProgramInfo.getComputePGMRSrc2 ());
1143
+ if (MD->getPALMajorVersion () < 3 ) {
1144
+ // Set compute registers
1145
+ MD->setRsrc1 (CallingConv::AMDGPU_CS,
1146
+ CurrentProgramInfo.getPGMRSrc1 (CallingConv::AMDGPU_CS, ST));
1147
+ MD->setRsrc2 (CallingConv::AMDGPU_CS,
1148
+ CurrentProgramInfo.getComputePGMRSrc2 ());
1149
+ } else {
1150
+ EmitPALMetadataCommon (MD, CurrentProgramInfo, CallingConv::AMDGPU_CS, ST);
1151
+ }
1142
1152
1143
1153
// Set optional info
1144
1154
MD->setFunctionLdsSize (FnName, CurrentProgramInfo.LDSSize );
0 commit comments