mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
AMDGPU/GlobalISel: Mark 1-bit integer constants as legal
Summary: These are mostly legal, but will probably need special lowering for some cases. Reviewers: arsenm Reviewed By: arsenm Subscribers: kzhuravl, wdng, nhaehnle, yaxunl, rovka, kristof.beyls, igorb, dstuttard, tpr, llvm-commits, t-tye Differential Revision: https://reviews.llvm.org/D33791 llvm-svn: 304628
This commit is contained in:
parent
df0fc08844
commit
6a773e4535
@ -28,11 +28,16 @@ using namespace llvm;
|
||||
AMDGPULegalizerInfo::AMDGPULegalizerInfo() {
|
||||
using namespace TargetOpcode;
|
||||
|
||||
const LLT S1= LLT::scalar(1);
|
||||
const LLT S32 = LLT::scalar(32);
|
||||
const LLT S64 = LLT::scalar(64);
|
||||
const LLT P1 = LLT::pointer(1, 64);
|
||||
const LLT P2 = LLT::pointer(2, 64);
|
||||
|
||||
// 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.
|
||||
setAction({G_CONSTANT, S1}, Legal);
|
||||
setAction({G_CONSTANT, S32}, Legal);
|
||||
setAction({G_CONSTANT, S64}, Legal);
|
||||
|
||||
|
@ -10,18 +10,27 @@
|
||||
entry:
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @llvm.amdgcn.exp.f32(i32, i32, float, float, float, float, i1, i1) #1
|
||||
|
||||
attributes #1 = { nounwind }
|
||||
|
||||
...
|
||||
|
||||
---
|
||||
name: test_constant
|
||||
registers:
|
||||
- { id: 0, class: _ }
|
||||
- { id: 1, class: _ }
|
||||
body: |
|
||||
bb.0.entry:
|
||||
; CHECK-LABEL: name: test_constant
|
||||
; CHECK: %0(s32) = G_CONSTANT i32 5
|
||||
; CHECK: %1(s1) = G_CONSTANT i1 false
|
||||
|
||||
%0(s32) = G_CONSTANT i32 5
|
||||
%1(s1) = G_CONSTANT i1 0
|
||||
G_INTRINSIC_W_SIDE_EFFECTS intrinsic(@llvm.amdgcn.exp.f32), %0, %0, %0, %0, %0, %0, %1, %1;
|
||||
...
|
||||
|
||||
---
|
||||
|
Loading…
Reference in New Issue
Block a user