[PATCH] D119639: [NVPTX] Fix bug with int_nvvm_rotate_b64 when operand immediate

Dmitry Vassiliev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Feb 12 10:43:48 PST 2022


slydiman created this revision.
slydiman added reviewers: JackAKirk, c-rhodes, steffenlarsen, nyalloc, asavonic, krisb.
slydiman added a project: LLVM.
Herald added subscribers: hiraditya, jholewinski.
slydiman requested review of this revision.
Herald added subscribers: llvm-commits, jdoerfert.

Need to subract from 64, not 32.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D119639

Files:
  llvm/lib/Target/NVPTX/NVPTXIntrinsics.td
  llvm/test/CodeGen/NVPTX/rotate_64.ll


Index: llvm/test/CodeGen/NVPTX/rotate_64.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/NVPTX/rotate_64.ll
@@ -0,0 +1,25 @@
+; RUN: llc < %s -march=nvptx | FileCheck %s
+
+
+declare i64 @llvm.nvvm.rotate.b64(i64, i32)
+declare i64 @llvm.nvvm.rotate.right.b64(i64, i32)
+
+; CHECK: rotate64
+define i64 @rotate64(i64 %a, i32 %b) {
+; CHECK: shl.b64         [[LHS:%.*]], [[RD1:%.*]], 3;
+; CHECK: shr.b64         [[RHS:%.*]], [[RD1]], 61;
+; CHECK: add.u64         [[RD2:%.*]], [[LHS]], [[RHS]];
+; CHECK: ret
+  %val = tail call i64 @llvm.nvvm.rotate.b64(i64 %a, i32 3)
+  ret i64 %val
+}
+
+; CHECK: rotateright64
+define i64 @rotateright64(i64 %a, i32 %b) {
+; CHECK: shl.b64         [[LHS:%.*]], [[RD1:%.*]], 61;
+; CHECK: shr.b64         [[RHS:%.*]], [[RD1]], 3;
+; CHECK: add.u64         [[RD2:%.*]], [[LHS]], [[RHS]];
+; CHECK: ret
+  %val = tail call i64 @llvm.nvvm.rotate.right.b64(i64 %a, i32 3)
+  ret i64 %val
+}
Index: llvm/lib/Target/NVPTX/NVPTXIntrinsics.td
===================================================================
--- llvm/lib/Target/NVPTX/NVPTXIntrinsics.td
+++ llvm/lib/Target/NVPTX/NVPTXIntrinsics.td
@@ -2473,7 +2473,7 @@
 
 // SW version of rotate 64
 def : Pat<(int_nvvm_rotate_b64 Int64Regs:$src, (i32 imm:$amt)),
-          (ROT64imm_sw Int64Regs:$src, imm:$amt, (SUB_FRM_32 node:$amt))>,
+          (ROT64imm_sw Int64Regs:$src, imm:$amt, (SUB_FRM_64 node:$amt))>,
       Requires<[noHWROT32]>;
 def : Pat<(int_nvvm_rotate_b64 Int64Regs:$src, Int32Regs:$amt),
           (ROTL64reg_sw Int64Regs:$src, Int32Regs:$amt)>,


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D119639.408195.patch
Type: text/x-patch
Size: 1612 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220212/63e6667b/attachment.bin>


More information about the llvm-commits mailing list