blob: d509e252daf010409a92dd803ed4e17101edddcf [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc -mtriple=amdgpu6.00 < %s | FileCheck %s
; Test scalarization of a vector load wrapped in a single-use freeze.
define i32 @one_use_of_freeze(ptr addrspace(1) %p) {
; CHECK-LABEL: one_use_of_freeze:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; CHECK-NEXT: s_mov_b32 s6, 0
; CHECK-NEXT: s_mov_b32 s7, 0xf000
; CHECK-NEXT: s_mov_b32 s4, s6
; CHECK-NEXT: s_mov_b32 s5, s6
; CHECK-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
; CHECK-NEXT: s_waitcnt vmcnt(0)
; CHECK-NEXT: s_setpc_b64 s[30:31]
%load = load <2 x i32>, ptr addrspace(1) %p
%freeze = freeze <2 x i32> %load
%extract = extractelement <2 x i32> %freeze, i64 0
ret i32 %extract
}
define i32 @no_use_of_freeze(ptr addrspace(1) %p) {
; CHECK-LABEL: no_use_of_freeze:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; CHECK-NEXT: s_mov_b32 s6, 0
; CHECK-NEXT: s_mov_b32 s7, 0xf000
; CHECK-NEXT: s_mov_b32 s4, s6
; CHECK-NEXT: s_mov_b32 s5, s6
; CHECK-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
; CHECK-NEXT: s_waitcnt vmcnt(0)
; CHECK-NEXT: s_setpc_b64 s[30:31]
%load = load <2 x i32>, ptr addrspace(1) %p
%extract = extractelement <2 x i32> %load, i64 0
ret i32 %extract
}
define i32 @multiple_use_of_freeze(ptr addrspace(1) %p) {
; CHECK-LABEL: multiple_use_of_freeze:
; CHECK: ; %bb.0:
; CHECK-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; CHECK-NEXT: s_mov_b32 s6, 0
; CHECK-NEXT: s_mov_b32 s7, 0xf000
; CHECK-NEXT: s_mov_b32 s4, s6
; CHECK-NEXT: s_mov_b32 s5, s6
; CHECK-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
; CHECK-NEXT: s_waitcnt vmcnt(0)
; CHECK-NEXT: v_add_i32_e32 v0, vcc, v0, v1
; CHECK-NEXT: s_setpc_b64 s[30:31]
%load = load <2 x i32>, ptr addrspace(1) %p
%freeze = freeze <2 x i32> %load
%extract1 = extractelement <2 x i32> %freeze, i64 0
%extract2 = extractelement <2 x i32> %freeze, i64 1
%sum = add i32 %extract1, %extract2
ret i32 %sum
}