v_permlane16_b32 and v_permlanex16_b32 should not set abs and neg src modifiers on any input, but they can set op_sel on src0 or src1 to represent fi or bc when desired. The ISel patterns were setting the src_modifier bits to -1, effectively setting abs and neg as well, whenever it was intended to set op_sel, due to an error in ISel. ISel should now correctly only set the op_sel bits. Reviewed By: arsenm Differential Revision: https://reviews.llvm.org/D144519
16 lines
780 B
LLVM
16 lines
780 B
LLVM
; RUN: llc -march=amdgcn -mcpu=gfx1030 -filetype=obj < %s | llvm-objdump --triple=amdgcn--amdhsa --mcpu=gfx1030 -d - | FileCheck -check-prefix=OBJ %s
|
|
; RUN: llc -march=amdgcn -mcpu=gfx1030 -show-mc-encoding < %s | FileCheck -check-prefix=ASM %s
|
|
|
|
declare i32 @llvm.amdgcn.permlane16(i32, i32, i32, i32, i1, i1)
|
|
|
|
; OBJ-LABEL: <permlane_op_sel>:
|
|
; OBJ: v_permlane16_b32 v0, v0, s7, s0 op_sel:[1,0]
|
|
|
|
; ASM-LABEL: permlane_op_sel:
|
|
; ASM: v_permlane16_b32 v0, v0, s7, s0 op_sel:[1,0] ; encoding: [0x00,0x08,0x77,0xd7,0x00,0x0f,0x00,0x00]
|
|
define amdgpu_kernel void @permlane_op_sel(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
|
|
%v = call i32 @llvm.amdgcn.permlane16(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 1, i1 0)
|
|
store i32 %v, ptr addrspace(1) %out
|
|
ret void
|
|
}
|