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