diff options
| author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2022-01-15 14:37:34 -0500 |
|---|---|---|
| committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2022-01-18 14:08:36 -0500 |
| commit | 82de129ab8f723ba94d0026b54d76b11b2a9e4f9 (patch) | |
| tree | 5faad9b1501af4433ac826a015166a9c0588bece | |
| parent | ea27adb45b780e32d996d9c85f932a71f3e068ba (diff) | |
| download | llvm-82de129ab8f723ba94d0026b54d76b11b2a9e4f9.zip llvm-82de129ab8f723ba94d0026b54d76b11b2a9e4f9.tar.gz llvm-82de129ab8f723ba94d0026b54d76b11b2a9e4f9.tar.bz2 | |
AMDGPU: Remove llvm.amdgcn.alignbit and handle bitcode upgrade to fshr
| -rw-r--r-- | llvm/include/llvm/IR/IntrinsicsAMDGPU.td | 6 | ||||
| -rw-r--r-- | llvm/lib/IR/AutoUpgrade.cpp | 7 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp | 1 | ||||
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 3 | ||||
| -rw-r--r-- | llvm/test/Bitcode/amdgcn-alignbit.ll | 12 | ||||
| -rw-r--r-- | llvm/test/CodeGen/AMDGPU/llvm.amdgcn.alignbyte.ll (renamed from llvm/test/CodeGen/AMDGPU/llvm.amdgcn.alignb.ll) | 9 |
6 files changed, 19 insertions, 19 deletions
diff --git a/llvm/include/llvm/IR/IntrinsicsAMDGPU.td b/llvm/include/llvm/IR/IntrinsicsAMDGPU.td index 2f25647..861545b 100644 --- a/llvm/include/llvm/IR/IntrinsicsAMDGPU.td +++ b/llvm/include/llvm/IR/IntrinsicsAMDGPU.td @@ -1514,12 +1514,6 @@ def int_amdgcn_writelane : [IntrNoMem, IntrConvergent, IntrWillReturn] >; -// FIXME: Deprecated. This is equivalent to llvm.fshr -def int_amdgcn_alignbit : Intrinsic<[llvm_i32_ty], - [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], - [IntrNoMem, IntrSpeculatable, IntrWillReturn] ->; - def int_amdgcn_alignbyte : GCCBuiltin<"__builtin_amdgcn_alignbyte">, Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], [IntrNoMem, IntrSpeculatable, IntrWillReturn] diff --git a/llvm/lib/IR/AutoUpgrade.cpp b/llvm/lib/IR/AutoUpgrade.cpp index 6dd607a..5aa3b30 100644 --- a/llvm/lib/IR/AutoUpgrade.cpp +++ b/llvm/lib/IR/AutoUpgrade.cpp @@ -727,6 +727,13 @@ static bool UpgradeIntrinsicFunction1(Function *F, Function *&NewFn) { Name == "arm.cde.vcx3qa.predicated.v2i64.v4i1") return true; + if (Name == "amdgcn.alignbit") { + // Target specific intrinsic became redundant + NewFn = Intrinsic::getDeclaration(F->getParent(), Intrinsic::fshr, + {F->getReturnType()}); + return true; + } + break; } diff --git a/llvm/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp b/llvm/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp index 18c1a0e..262b8a1 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp @@ -4083,7 +4083,6 @@ AMDGPURegisterBankInfo::getInstrMapping(const MachineInstr &MI) const { case Intrinsic::amdgcn_mqsad_pk_u16_u8: case Intrinsic::amdgcn_mqsad_u32_u8: case Intrinsic::amdgcn_cvt_pk_u8_f32: - case Intrinsic::amdgcn_alignbit: case Intrinsic::amdgcn_alignbyte: case Intrinsic::amdgcn_perm: case Intrinsic::amdgcn_fdot2: diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp index 13fe4d3..5176ba4 100644 --- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp @@ -6941,9 +6941,6 @@ SDValue SITargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op, DAG.getConstant(1, SL, MVT::i32)); return DAG.getSetCC(SL, MVT::i1, SrcHi, Aperture, ISD::SETEQ); } - case Intrinsic::amdgcn_alignbit: - return DAG.getNode(ISD::FSHR, DL, VT, - Op.getOperand(1), Op.getOperand(2), Op.getOperand(3)); case Intrinsic::amdgcn_perm: return DAG.getNode(AMDGPUISD::PERM, DL, MVT::i32, Op.getOperand(1), Op.getOperand(2), Op.getOperand(3)); diff --git a/llvm/test/Bitcode/amdgcn-alignbit.ll b/llvm/test/Bitcode/amdgcn-alignbit.ll new file mode 100644 index 0000000..c9215be --- /dev/null +++ b/llvm/test/Bitcode/amdgcn-alignbit.ll @@ -0,0 +1,12 @@ +; RUN: llvm-as < %s | llvm-dis | FileCheck %s + +define i32 @user(i32 %a, i32 %b, i32 %c) { + ; CHECK: %call = call i32 @llvm.fshr.i32(i32 %a, i32 %b, i32 %c) + ; CHECK-NOT: amdgcn.alignbit + %call = call i32 @llvm.amdgcn.alignbit(i32 %a, i32 %b, i32 %c) + ret i32 %call +} + +declare i32 @llvm.amdgcn.alignbit(i32, i32, i32) +; CHECK: declare i32 @llvm.fshr.i32(i32, i32, i32) #0 +; CHECK-NOT: amdgcn.alignbit diff --git a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.alignb.ll b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.alignbyte.ll index 873a3f0..71a599a 100644 --- a/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.alignb.ll +++ b/llvm/test/CodeGen/AMDGPU/llvm.amdgcn.alignbyte.ll @@ -1,16 +1,7 @@ ; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s -declare i32 @llvm.amdgcn.alignbit(i32, i32, i32) #0 declare i32 @llvm.amdgcn.alignbyte(i32, i32, i32) #0 -; GCN-LABEL: {{^}}v_alignbit_b32: -; GCN: v_alignbit_b32 {{[vs][0-9]+}}, {{[vs][0-9]+}}, {{[vs][0-9]+}} -define amdgpu_kernel void @v_alignbit_b32(i32 addrspace(1)* %out, i32 %src1, i32 %src2, i32 %src3) #1 { - %val = call i32 @llvm.amdgcn.alignbit(i32 %src1, i32 %src2, i32 %src3) #0 - store i32 %val, i32 addrspace(1)* %out - ret void -} - ; GCN-LABEL: {{^}}v_alignbyte_b32: ; GCN: v_alignbyte_b32 {{[vs][0-9]+}}, {{[vs][0-9]+}}, {{[vs][0-9]+}} define amdgpu_kernel void @v_alignbyte_b32(i32 addrspace(1)* %out, i32 %src1, i32 %src2, i32 %src3) #1 { |
