[llvm] r352975 - AMDGPU/GlobalISel: Legalize constant for pointer types

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Sat Feb 2 15:33:49 PST 2019


Author: arsenm
Date: Sat Feb  2 15:33:49 2019
New Revision: 352975

URL: http://llvm.org/viewvc/llvm-project?rev=352975&view=rev
Log:
AMDGPU/GlobalISel: Legalize constant for pointer types

Modified:
    llvm/trunk/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp
    llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/legalize-constant.mir

Modified: llvm/trunk/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp?rev=352975&r1=352974&r2=352975&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp Sat Feb  2 15:33:49 2019
@@ -134,11 +134,12 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo
   // FIXME: i1 operands to intrinsics should always be legal, but other i1
   // values may not be legal.  We need to figure out how to distinguish
   // between these two scenarios.
-  // FIXME: Pointer types
   getActionDefinitionsBuilder(G_CONSTANT)
-    .legalFor({S1, S32, S64})
+    .legalFor({S1, S32, S64, GlobalPtr,
+               LocalPtr, ConstantPtr, PrivatePtr, FlatPtr })
     .clampScalar(0, S32, S64)
-    .widenScalarToNextPow2(0);
+    .widenScalarToNextPow2(0)
+    .legalIf(isPointer(0));
 
   setAction({G_FRAME_INDEX, PrivatePtr}, Legal);
 

Modified: llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/legalize-constant.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/legalize-constant.mir?rev=352975&r1=352974&r2=352975&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/legalize-constant.mir (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/GlobalISel/legalize-constant.mir Sat Feb  2 15:33:49 2019
@@ -92,3 +92,87 @@ body: |
     %0:_(s128) = G_CONSTANT i128 5
     $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %0
 ...
+
+---
+name: test_constant_p0
+body: |
+  bb.0:
+
+    ; CHECK-LABEL: name: test_constant_p0
+    ; CHECK: [[C:%[0-9]+]]:_(p0) = G_CONSTANT i64 0
+    ; CHECK: $vgpr0_vgpr1 = COPY [[C]](p0)
+    %0:_(p0) = G_CONSTANT i64 0
+    $vgpr0_vgpr1 = COPY %0
+...
+
+---
+name: test_constant_p1
+body: |
+  bb.0:
+
+    ; CHECK-LABEL: name: test_constant_p1
+    ; CHECK: [[C:%[0-9]+]]:_(p1) = G_CONSTANT i64 0
+    ; CHECK: $vgpr0_vgpr1 = COPY [[C]](p1)
+    %0:_(p1) = G_CONSTANT i64 0
+    $vgpr0_vgpr1 = COPY %0
+...
+
+---
+name: test_constant_p2
+body: |
+  bb.0:
+
+    ; CHECK-LABEL: name: test_constant_p2
+    ; CHECK: [[C:%[0-9]+]]:_(p2) = G_CONSTANT i32 0
+    ; CHECK: $vgpr0 = COPY [[C]](p2)
+    %0:_(p2) = G_CONSTANT i32 0
+    $vgpr0 = COPY %0
+...
+
+---
+name: test_constant_p3
+body: |
+  bb.0:
+
+    ; CHECK-LABEL: name: test_constant_p3
+    ; CHECK: [[C:%[0-9]+]]:_(p2) = G_CONSTANT i32 0
+    ; CHECK: $vgpr0 = COPY [[C]](p2)
+    %0:_(p2) = G_CONSTANT i32 0
+    $vgpr0 = COPY %0
+...
+
+---
+name: test_constant_p4
+body: |
+  bb.0:
+
+    ; CHECK-LABEL: name: test_constant_p4
+    ; CHECK: [[C:%[0-9]+]]:_(p4) = G_CONSTANT i64 0
+    ; CHECK: $vgpr0_vgpr1 = COPY [[C]](p4)
+    %0:_(p4) = G_CONSTANT i64 0
+    $vgpr0_vgpr1 = COPY %0
+...
+
+---
+name: test_constant_p5
+body: |
+  bb.0:
+
+    ; CHECK-LABEL: name: test_constant_p5
+    ; CHECK: [[C:%[0-9]+]]:_(p5) = G_CONSTANT i32 0
+    ; CHECK: $vgpr0 = COPY [[C]](p5)
+    %0:_(p5) = G_CONSTANT i32 0
+    $vgpr0 = COPY %0
+...
+
+---
+name: test_constant_p999
+body: |
+  bb.0:
+
+    ; CHECK-LABEL: name: test_constant_p999
+    ; CHECK: [[C:%[0-9]+]]:_(p999) = G_CONSTANT i64 0
+    ; CHECK: $vgpr0_vgpr1 = COPY [[C]](p999)
+    %0:_(p999) = G_CONSTANT i64 0
+    $vgpr0_vgpr1 = COPY %0
+...




More information about the llvm-commits mailing list