diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-02-22 20:37:12 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-02-22 20:37:12 +0000 |
commit | 61ec6a03ca6af9adf2b76714195e3cf152b089a1 (patch) | |
tree | 6fd994ae36d46cc31835b2bc1b289b02bcc4d8c8 | |
parent | 4f5a98570f7c6b13bd00fc6d125d7ba025258082 (diff) | |
download | bcm5719-llvm-61ec6a03ca6af9adf2b76714195e3cf152b089a1.tar.gz bcm5719-llvm-61ec6a03ca6af9adf2b76714195e3cf152b089a1.zip |
AMDGPU: Change exp with compr bit printing
llvm-svn: 295873
-rw-r--r-- | llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp | 14 | ||||
-rw-r--r-- | llvm/test/CodeGen/AMDGPU/llvm.amdgcn.exp.compr.ll | 70 |
2 files changed, 55 insertions, 29 deletions
diff --git a/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp b/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp index 208b5e22162..3aea3d6f361 100644 --- a/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp +++ b/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp @@ -672,11 +672,19 @@ template <unsigned N> void AMDGPUInstPrinter::printExpSrcN(const MCInst *MI, unsigned OpNo, const MCSubtargetInfo &STI, raw_ostream &O) { - int EnIdx = AMDGPU::getNamedOperandIdx(MI->getOpcode(), AMDGPU::OpName::en); + unsigned Opc = MI->getOpcode(); + int EnIdx = AMDGPU::getNamedOperandIdx(Opc, AMDGPU::OpName::en); unsigned En = MI->getOperand(EnIdx).getImm(); - // FIXME: What do we do with compr? The meaning of en changes depending on if - // compr is set. + int ComprIdx = AMDGPU::getNamedOperandIdx(Opc, AMDGPU::OpName::compr); + + // If compr is set, print as src0, src0, src1, src1 + if (MI->getOperand(ComprIdx).getImm()) { + if (N == 1 || N == 2) + --OpNo; + else if (N == 3) + OpNo -= 2; + } if (En & (1 << N)) printRegOperand(MI->getOperand(OpNo).getReg(), O, MRI); diff --git a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.exp.compr.ll b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.exp.compr.ll index 0b5b20be334..37ad164b773 100644 --- a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.exp.compr.ll +++ b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.exp.compr.ll @@ -16,27 +16,45 @@ define void @test_export_compr_zeroes_v2f16() #0 { ; GCN-LABEL: {{^}}test_export_compr_en_src0_v2f16: ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x40003c00 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x44003800 -; GCN: exp mrt0 [[SRC0]], off, off, off done compr{{$}} +; GCN: exp mrt0 [[SRC0]], [[SRC0]], off, off done compr{{$}} define void @test_export_compr_en_src0_v2f16() #0 { - call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 1, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false) + call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 3, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false) ret void } ; GCN-LABEL: {{^}}test_export_compr_en_src1_v2f16: ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x40003c00 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x44003800 -; GCN: exp mrt0 off, [[SRC1]], off, off done compr{{$}} +; GCN: exp mrt0 off, off, [[SRC1]], [[SRC1]] done compr{{$}} define void @test_export_compr_en_src1_v2f16() #0 { - call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 2, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false) + call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 12, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false) ret void } ; GCN-LABEL: {{^}}test_export_compr_en_src0_src1_v2f16: ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x40003c00 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x44003800 -; GCN: exp mrt0 [[SRC0]], [[SRC1]], off, off done compr{{$}} +; GCN: exp mrt0 [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] done compr{{$}} define void @test_export_compr_en_src0_src1_v2f16() #0 { - call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 3, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false) + call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 15, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false) + ret void +} + +; GCN-LABEL: {{^}}test_export_compr_en_invalid2_v2f16: +; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x40003c00 +; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x44003800 +; GCN: exp mrt0 off, [[SRC0]], off, off done compr{{$}} +define void @test_export_compr_en_invalid2_v2f16() #0 { + call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 2, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false) + ret void +} + +; GCN-LABEL: {{^}}test_export_compr_en_invalid10_v2f16: +; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x40003c00 +; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x44003800 +; GCN: exp mrt0 off, [[SRC0]], off, [[SRC1]] done compr{{$}} +define void @test_export_compr_en_invalid10_v2f16() #0 { + call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 10, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false) ret void } @@ -53,22 +71,22 @@ define void @test_export_compr_mrt7_v2f16() #0 { ; GCN-LABEL: {{^}}test_export_compr_z_v2f16: ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x40003c00 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x44003800 -; GCN: exp mrtz [[SRC0]], [[SRC1]], off, off compr{{$}} -; GCN: exp mrtz [[SRC0]], [[SRC1]], off, off done compr{{$}} +; GCN: exp mrtz [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] compr{{$}} +; GCN: exp mrtz [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] done compr{{$}} define void @test_export_compr_z_v2f16() #0 { - call void @llvm.amdgcn.exp.compr.v2f16(i32 8, i32 3, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 false, i1 false) - call void @llvm.amdgcn.exp.compr.v2f16(i32 8, i32 3, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false) + call void @llvm.amdgcn.exp.compr.v2f16(i32 8, i32 15, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 false, i1 false) + call void @llvm.amdgcn.exp.compr.v2f16(i32 8, i32 15, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false) ret void } ; GCN-LABEL: {{^}}test_export_compr_vm_v2f16: ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x40003c00 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x44003800 -; GCN: exp mrt0 [[SRC0]], [[SRC1]], off, off compr vm{{$}} -; GCN: exp mrt0 [[SRC0]], [[SRC1]], off, off done compr vm{{$}} +; GCN: exp mrt0 [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] compr vm{{$}} +; GCN: exp mrt0 [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] done compr vm{{$}} define void @test_export_compr_vm_v2f16() #0 { - call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 3, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 false, i1 true) - call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 3, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 true) + call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 15, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 false, i1 true) + call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 15, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 true) ret void } @@ -93,18 +111,18 @@ define void @test_export_compr_en_src0_v2i16() #0 { ; GCN-LABEL: {{^}}test_export_compr_en_src1_v2i16: ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x20001 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x40005 -; GCN: exp mrt0 off, [[SRC1]], off, off done compr{{$}} +; GCN: exp mrt0 off, off, [[SRC1]], [[SRC1]] done compr{{$}} define void @test_export_compr_en_src1_v2i16() #0 { - call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 2, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 true, i1 false) + call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 12, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 true, i1 false) ret void } ; GCN-LABEL: {{^}}test_export_compr_en_src0_src1_v2i16: ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x20001 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x40005 -; GCN: exp mrt0 [[SRC0]], [[SRC1]], off, off done compr{{$}} +; GCN: exp mrt0 [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] done compr{{$}} define void @test_export_compr_en_src0_src1_v2i16() #0 { - call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 3, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 true, i1 false) + call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 15, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 true, i1 false) ret void } @@ -121,22 +139,22 @@ define void @test_export_compr_mrt7_v2i16() #0 { ; GCN-LABEL: {{^}}test_export_compr_z_v2i16: ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x20001 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x40005 -; GCN: exp mrtz [[SRC0]], [[SRC1]], off, off compr{{$}} -; GCN: exp mrtz [[SRC0]], [[SRC1]], off, off done compr{{$}} +; GCN: exp mrtz [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] compr{{$}} +; GCN: exp mrtz [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] done compr{{$}} define void @test_export_compr_z_v2i16() #0 { - call void @llvm.amdgcn.exp.compr.v2i16(i32 8, i32 3, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 false, i1 false) - call void @llvm.amdgcn.exp.compr.v2i16(i32 8, i32 3, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 true, i1 false) + call void @llvm.amdgcn.exp.compr.v2i16(i32 8, i32 15, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 false, i1 false) + call void @llvm.amdgcn.exp.compr.v2i16(i32 8, i32 15, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 true, i1 false) ret void } ; GCN-LABEL: {{^}}test_export_compr_vm_v2i16: ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x20001 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x40005 -; GCN: exp mrt0 [[SRC0]], [[SRC1]], off, off compr vm{{$}} -; GCN: exp mrt0 [[SRC0]], [[SRC1]], off, off done compr vm{{$}} +; GCN: exp mrt0 [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] compr vm{{$}} +; GCN: exp mrt0 [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] done compr vm{{$}} define void @test_export_compr_vm_v2i16() #0 { - call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 3, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 false, i1 true) - call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 3, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 true, i1 true) + call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 15, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 false, i1 true) + call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 15, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 true, i1 true) ret void } |