[llvm] r349081 - AMDGPU/GlobalISel: Legalize/regbankselect block_addr

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 13 12:34:15 PST 2018


Author: arsenm
Date: Thu Dec 13 12:34:15 2018
New Revision: 349081

URL: http://llvm.org/viewvc/llvm-project?rev=349081&view=rev
Log:
AMDGPU/GlobalISel: Legalize/regbankselect block_addr

Added:
    llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/legalize-block-addr.mir
    llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/regbankselect-block-addr.mir
Modified:
    llvm/trunk/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp
    llvm/trunk/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp

Modified: llvm/trunk/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp?rev=349081&r1=349080&r2=349081&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp Thu Dec 13 12:34:15 2018
@@ -45,6 +45,8 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo
   const LLT FlatPtr = GetAddrSpacePtr(AMDGPUAS::FLAT_ADDRESS);
   const LLT PrivatePtr = GetAddrSpacePtr(AMDGPUAS::PRIVATE_ADDRESS);
 
+  const LLT CodePtr = FlatPtr;
+
   const LLT AddrSpaces[] = {
     GlobalPtr,
     ConstantPtr,
@@ -120,6 +122,8 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo
     setAction({G_GEP, 1, IdxTy}, Legal);
   }
 
+  setAction({G_BLOCK_ADDR, CodePtr}, Legal);
+
   setAction({G_ICMP, S1}, Legal);
   setAction({G_ICMP, 1, S32}, Legal);
 

Modified: llvm/trunk/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp?rev=349081&r1=349080&r2=349081&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp Thu Dec 13 12:34:15 2018
@@ -364,7 +364,8 @@ AMDGPURegisterBankInfo::getInstrMapping(
     break;
   }
   case AMDGPU::G_FCONSTANT:
-  case AMDGPU::G_CONSTANT: {
+  case AMDGPU::G_CONSTANT:
+  case AMDGPU::G_BLOCK_ADDR: {
     unsigned Size = MRI.getType(MI.getOperand(0).getReg()).getSizeInBits();
     OpdsMapping[0] = AMDGPU::getValueMapping(AMDGPU::SGPRRegBankID, Size);
     break;

Added: llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/legalize-block-addr.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/legalize-block-addr.mir?rev=349081&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/legalize-block-addr.mir (added)
+++ llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/legalize-block-addr.mir Thu Dec 13 12:34:15 2018
@@ -0,0 +1,28 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
+# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -O0 -run-pass=legalizer %s -o - | FileCheck %s
+--- |
+
+  @addr = global i8* null
+
+  define void @test_blockaddress() {
+    store i8* blockaddress(@test_blockaddress, %block), i8** @addr
+    indirectbr i8* blockaddress(@test_blockaddress, %block), [label %block]
+
+  block:
+    ret void
+  }
+
+...
+---
+name:            test_blockaddress
+alignment:       4
+tracksRegLiveness: true
+body:             |
+  bb.1 (%ir-block.0):
+    ; CHECK-LABEL: name: test_blockaddress
+    ; CHECK: [[BLOCK_ADDR:%[0-9]+]]:_(p0) = G_BLOCK_ADDR blockaddress(@test_blockaddress, %ir-block.block)
+    ; CHECK: S_ENDPGM implicit [[BLOCK_ADDR]](p0)
+    %0:_(p0) = G_BLOCK_ADDR blockaddress(@test_blockaddress, %ir-block.block)
+    S_ENDPGM implicit %0
+
+...

Added: llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/regbankselect-block-addr.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/regbankselect-block-addr.mir?rev=349081&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/regbankselect-block-addr.mir (added)
+++ llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/regbankselect-block-addr.mir Thu Dec 13 12:34:15 2018
@@ -0,0 +1,29 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
+# RUN: llc -O0 -march amdgcn -mcpu=fiji -run-pass=regbankselect %s -o - | FileCheck %s
+
+--- |
+
+  @addr = global i8* null
+
+  define void @test_blockaddress() {
+    store i8* blockaddress(@test_blockaddress, %block), i8** @addr
+    indirectbr i8* blockaddress(@test_blockaddress, %block), [label %block]
+
+  block:                                            ; preds = %0
+    ret void
+  }
+
+...
+---
+name:            test_blockaddress
+alignment:       4
+legalized: true
+body:             |
+  bb.1 (%ir-block.0):
+    ; CHECK-LABEL: name: test_blockaddress
+    ; CHECK: [[BLOCK_ADDR:%[0-9]+]]:sgpr(p0) = G_BLOCK_ADDR blockaddress(@test_blockaddress, %ir-block.block)
+    ; CHECK: S_ENDPGM implicit [[BLOCK_ADDR]](p0)
+    %0:_(p0) = G_BLOCK_ADDR blockaddress(@test_blockaddress, %ir-block.block)
+    S_ENDPGM implicit %0
+
+...




More information about the llvm-commits mailing list