Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions llvm/test/CodeGen/AMDGPU/srl64_reduce_sgpr_return.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
;; Test reduction of:
;;
;; DST = lshr i64 X, Y
;;
;; where Y is in the range [63-32] to:
;;
;; DST = [srl i32 X, (Y & 0x1F), 0]
;;
;; on target where result is returned in a sgpr.

; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx900 < %s | FileCheck %s

define amdgpu_ps i64 @srl_metadata_sgpr(i64 inreg %arg0, ptr %arg1.ptr) {
; CHECK-LABEL: srl_metadata_sgpr:
; CHECK: ; %bb.0:
; CHECK-NEXT: flat_load_dword v0, v[0:1]
; CHECK-NEXT: s_waitcnt vmcnt(0) lgkmcnt(0)
; CHECK-NEXT: v_lshrrev_b64 v[0:1], v0, s[0:1]
; CHECK-NEXT: s_mov_b32 s1, 0
; CHECK-NEXT: v_readfirstlane_b32 s0, v0
; CHECK-NEXT: ; return to shader part epilog
%shift.amt = load i64, ptr %arg1.ptr, !range !0, !noundef !{}
%srl = lshr i64 %arg0, %shift.amt
ret i64 %srl
}

!0 = !{i64 32, i64 64}

define amdgpu_ps i64 @srl_or16_sgpr(i64 inreg %arg0, i64 inreg %shift_amt) {
; CHECK-LABEL: srl_or16_sgpr:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_or_b32 s2, s2, 16
; CHECK-NEXT: s_lshr_b64 s[0:1], s[0:1], s2
; CHECK-NEXT: ; return to shader part epilog
%or = or i64 %shift_amt, 16
%srl = lshr i64 %arg0, %or
ret i64 %srl
}

define amdgpu_ps i64 @srl_or32_sgpr(i64 inreg %arg0, i64 inreg %shift_amt) {
; CHECK-LABEL: srl_or32_sgpr:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_or_b32 s2, s2, 32
; CHECK-NEXT: s_lshr_b64 s[0:1], s[0:1], s2
; CHECK-NEXT: s_mov_b32 s1, 0
; CHECK-NEXT: ; return to shader part epilog
%or = or i64 %shift_amt, 32
%srl = lshr i64 %arg0, %or
ret i64 %srl
}
Loading