[AMDGPU][GlobalISel] Fix mapping G_FREEZE
authorMirko Brkusanin <Mirko.Brkusanin@amd.com>
Wed, 21 Dec 2022 14:05:30 +0000 (15:05 +0100)
committerMirko Brkusanin <Mirko.Brkusanin@amd.com>
Wed, 21 Dec 2022 14:25:04 +0000 (15:25 +0100)
Differential Revision: https://reviews.llvm.org/D140416

llvm/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp
llvm/test/CodeGen/AMDGPU/GlobalISel/regbankselect-freeze.mir

index 1e75440..9985d88 100644 (file)
@@ -3512,7 +3512,8 @@ AMDGPURegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
       DstBank = SrcBank;
 
     unsigned Size = getSizeInBits(MI.getOperand(0).getReg(), MRI, *TRI);
-    if (cannotCopy(*DstBank, *SrcBank, Size))
+    if (MI.getOpcode() != AMDGPU::G_FREEZE &&
+        cannotCopy(*DstBank, *SrcBank, Size))
       return getInvalidInstructionMapping();
 
     const ValueMapping &ValMap = getValueMapping(0, Size, *DstBank);
index a3f64e4..5bf1fc4 100644 (file)
@@ -50,6 +50,29 @@ body: |
 ...
 
 ---
+name: test_freeze_s1_sgpr_to_sgpr
+legalized: true
+body:             |
+  bb.0:
+    liveins: $sgpr0
+
+    ; CHECK-LABEL: name: test_freeze_s1_sgpr_to_sgpr
+    ; CHECK: liveins: $sgpr0
+    ; CHECK-NEXT: {{  $}}
+    ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
+    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
+    ; CHECK-NEXT: [[FREEZE:%[0-9]+]]:sgpr(s1) = G_FREEZE [[TRUNC]]
+    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:sgpr(s32) = G_ANYEXT [[FREEZE]](s1)
+    ; CHECK-NEXT: $sgpr0 = COPY [[ANYEXT]](s32)
+    %0:_(s32) = COPY $sgpr0
+    %1:_(s1) = G_TRUNC %0(s32)
+    %2:_(s1) = G_FREEZE %1
+    %3:_(s32) = G_ANYEXT %2(s1)
+    $sgpr0 = COPY %3(s32)
+
+...
+
+---
 name: test_freeze_s1_vcc
 legalized: true