; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -global-isel -amdgpu-codegenprepare-widen-16-bit-ops=0 -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,GFX6 %s
; RUN: llc -global-isel -amdgpu-codegenprepare-widen-16-bit-ops=0 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9 %s
; RUN: llc -global-isel -amdgpu-codegenprepare-widen-16-bit-ops=0 -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10 %s

define amdgpu_ps i32 @s_orn2_i32(i32 inreg %src0, i32 inreg %src1) {
; GCN-LABEL: s_orn2_i32:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_orn2_b32 s0, s2, s3
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_i32:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b32 s0, s2, s3
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i32 %src1, -1
  %or = or i32 %src0, %not.src1
  ret i32 %or
}

define amdgpu_ps i32 @s_orn2_i32_commute(i32 inreg %src0, i32 inreg %src1) {
; GCN-LABEL: s_orn2_i32_commute:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_orn2_b32 s0, s2, s3
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_i32_commute:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b32 s0, s2, s3
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i32 %src1, -1
  %or = or i32 %not.src1, %src0
  ret i32 %or
}

define amdgpu_ps { i32, i32 } @s_orn2_i32_multi_use(i32 inreg %src0, i32 inreg %src1) {
; GCN-LABEL: s_orn2_i32_multi_use:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_not_b32 s1, s3
; GCN-NEXT:    s_orn2_b32 s0, s2, s3
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_i32_multi_use:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b32 s0, s2, s3
; GFX10-NEXT:    s_not_b32 s1, s3
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i32 %src1, -1
  %or = or i32 %src0, %not.src1
  %insert.0 = insertvalue { i32, i32 } undef, i32 %or, 0
  %insert.1 = insertvalue { i32, i32 } %insert.0, i32 %not.src1, 1
  ret { i32, i32 } %insert.1
}

define amdgpu_ps { i32, i32 } @s_orn2_i32_multi_foldable_use(i32 inreg %src0, i32 inreg %src1, i32 inreg %src2) {
; GCN-LABEL: s_orn2_i32_multi_foldable_use:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_orn2_b32 s0, s2, s4
; GCN-NEXT:    s_orn2_b32 s1, s3, s4
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_i32_multi_foldable_use:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b32 s0, s2, s4
; GFX10-NEXT:    s_orn2_b32 s1, s3, s4
; GFX10-NEXT:    ; return to shader part epilog
  %not.src2 = xor i32 %src2, -1
  %or0 = or i32 %src0, %not.src2
  %or1 = or i32 %src1, %not.src2
  %insert.0 = insertvalue { i32, i32 } undef, i32 %or0, 0
  %insert.1 = insertvalue { i32, i32 } %insert.0, i32 %or1, 1
  ret { i32, i32 } %insert.1
}

define i32 @v_orn2_i32(i32 %src0, i32 %src1) {
; GCN-LABEL: v_orn2_i32:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GCN-NEXT:    v_xor_b32_e32 v1, -1, v1
; GCN-NEXT:    v_or_b32_e32 v0, v0, v1
; GCN-NEXT:    s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_orn2_i32:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
; GFX10-NEXT:    v_xor_b32_e32 v1, -1, v1
; GFX10-NEXT:    v_or_b32_e32 v0, v0, v1
; GFX10-NEXT:    s_setpc_b64 s[30:31]
  %not.src1 = xor i32 %src1, -1
  %or = or i32 %src0, %not.src1
  ret i32 %or
}

define amdgpu_ps float @v_orn2_i32_sv(i32 inreg %src0, i32 %src1) {
; GCN-LABEL: v_orn2_i32_sv:
; GCN:       ; %bb.0:
; GCN-NEXT:    v_xor_b32_e32 v0, -1, v0
; GCN-NEXT:    v_or_b32_e32 v0, s2, v0
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: v_orn2_i32_sv:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    v_xor_b32_e32 v0, -1, v0
; GFX10-NEXT:    v_or_b32_e32 v0, s2, v0
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i32 %src1, -1
  %or = or i32 %src0, %not.src1
  %cast = bitcast i32 %or to float
  ret float %cast
}

define amdgpu_ps float @v_orn2_i32_vs(i32 %src0, i32 inreg %src1) {
; GCN-LABEL: v_orn2_i32_vs:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_not_b32 s0, s2
; GCN-NEXT:    v_or_b32_e32 v0, s0, v0
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: v_orn2_i32_vs:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_not_b32 s0, s2
; GFX10-NEXT:    v_or_b32_e32 v0, s0, v0
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i32 %src1, -1
  %or = or i32 %src0, %not.src1
  %cast = bitcast i32 %or to float
  ret float %cast
}

define amdgpu_ps i64 @s_orn2_i64(i64 inreg %src0, i64 inreg %src1) {
; GCN-LABEL: s_orn2_i64:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_orn2_b64 s[0:1], s[2:3], s[4:5]
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_i64:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b64 s[0:1], s[2:3], s[4:5]
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i64 %src1, -1
  %or = or i64 %src0, %not.src1
  ret i64 %or
}

define amdgpu_ps i64 @s_orn2_i64_commute(i64 inreg %src0, i64 inreg %src1) {
; GCN-LABEL: s_orn2_i64_commute:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_orn2_b64 s[0:1], s[2:3], s[4:5]
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_i64_commute:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b64 s[0:1], s[2:3], s[4:5]
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i64 %src1, -1
  %or = or i64 %not.src1, %src0
  ret i64 %or
}

define amdgpu_ps { i64, i64 } @s_orn2_i64_multi_foldable_use(i64 inreg %src0, i64 inreg %src1, i64 inreg %src2) {
; GCN-LABEL: s_orn2_i64_multi_foldable_use:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_orn2_b64 s[0:1], s[2:3], s[6:7]
; GCN-NEXT:    s_orn2_b64 s[2:3], s[4:5], s[6:7]
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_i64_multi_foldable_use:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b64 s[0:1], s[2:3], s[6:7]
; GFX10-NEXT:    s_orn2_b64 s[2:3], s[4:5], s[6:7]
; GFX10-NEXT:    ; return to shader part epilog
  %not.src2 = xor i64 %src2, -1
  %or0 = or i64 %src0, %not.src2
  %or1 = or i64 %src1, %not.src2
  %insert.0 = insertvalue { i64, i64 } undef, i64 %or0, 0
  %insert.1 = insertvalue { i64, i64 } %insert.0, i64 %or1, 1
  ret { i64, i64 } %insert.1
}

define amdgpu_ps { i64, i64 } @s_orn2_i64_multi_use(i64 inreg %src0, i64 inreg %src1) {
; GCN-LABEL: s_orn2_i64_multi_use:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_not_b64 s[6:7], s[4:5]
; GCN-NEXT:    s_orn2_b64 s[0:1], s[2:3], s[4:5]
; GCN-NEXT:    s_mov_b32 s2, s6
; GCN-NEXT:    s_mov_b32 s3, s7
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_i64_multi_use:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b64 s[0:1], s[2:3], s[4:5]
; GFX10-NEXT:    s_not_b64 s[2:3], s[4:5]
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i64 %src1, -1
  %or = or i64 %src0, %not.src1
  %insert.0 = insertvalue { i64, i64 } undef, i64 %or, 0
  %insert.1 = insertvalue { i64, i64 } %insert.0, i64 %not.src1, 1
  ret { i64, i64 } %insert.1
}

define i64 @v_orn2_i64(i64 %src0, i64 %src1) {
; GCN-LABEL: v_orn2_i64:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GCN-NEXT:    v_xor_b32_e32 v2, -1, v2
; GCN-NEXT:    v_xor_b32_e32 v3, -1, v3
; GCN-NEXT:    v_or_b32_e32 v0, v0, v2
; GCN-NEXT:    v_or_b32_e32 v1, v1, v3
; GCN-NEXT:    s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_orn2_i64:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
; GFX10-NEXT:    v_xor_b32_e32 v2, -1, v2
; GFX10-NEXT:    v_xor_b32_e32 v3, -1, v3
; GFX10-NEXT:    v_or_b32_e32 v0, v0, v2
; GFX10-NEXT:    v_or_b32_e32 v1, v1, v3
; GFX10-NEXT:    s_setpc_b64 s[30:31]
  %not.src1 = xor i64 %src1, -1
  %or = or i64 %src0, %not.src1
  ret i64 %or
}

define amdgpu_ps <2 x float> @v_orn2_i64_sv(i64 inreg %src0, i64 %src1) {
; GCN-LABEL: v_orn2_i64_sv:
; GCN:       ; %bb.0:
; GCN-NEXT:    v_xor_b32_e32 v0, -1, v0
; GCN-NEXT:    v_xor_b32_e32 v1, -1, v1
; GCN-NEXT:    v_or_b32_e32 v0, s2, v0
; GCN-NEXT:    v_or_b32_e32 v1, s3, v1
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: v_orn2_i64_sv:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    v_xor_b32_e32 v0, -1, v0
; GFX10-NEXT:    v_xor_b32_e32 v1, -1, v1
; GFX10-NEXT:    v_or_b32_e32 v0, s2, v0
; GFX10-NEXT:    v_or_b32_e32 v1, s3, v1
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i64 %src1, -1
  %or = or i64 %src0, %not.src1
  %cast = bitcast i64 %or to <2 x float>
  ret <2 x float> %cast
}

define amdgpu_ps <2 x float> @v_orn2_i64_vs(i64 %src0, i64 inreg %src1) {
; GCN-LABEL: v_orn2_i64_vs:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_not_b64 s[0:1], s[2:3]
; GCN-NEXT:    v_or_b32_e32 v0, s0, v0
; GCN-NEXT:    v_or_b32_e32 v1, s1, v1
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: v_orn2_i64_vs:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_not_b64 s[0:1], s[2:3]
; GFX10-NEXT:    v_or_b32_e32 v0, s0, v0
; GFX10-NEXT:    v_or_b32_e32 v1, s1, v1
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i64 %src1, -1
  %or = or i64 %src0, %not.src1
  %cast = bitcast i64 %or to <2 x float>
  ret <2 x float> %cast
}

define amdgpu_ps <2 x i32> @s_orn2_v2i32(<2 x i32> inreg %src0, <2 x i32> inreg %src1) {
; GCN-LABEL: s_orn2_v2i32:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_orn2_b64 s[0:1], s[2:3], s[4:5]
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_v2i32:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b64 s[0:1], s[2:3], s[4:5]
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor <2 x i32> %src1, <i32 -1, i32 -1>
  %or = or <2 x i32> %src0, %not.src1
  ret <2 x i32> %or
}

define amdgpu_ps <2 x i32> @s_orn2_v2i32_commute(<2 x i32> inreg %src0, <2 x i32> inreg %src1) {
; GCN-LABEL: s_orn2_v2i32_commute:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_orn2_b64 s[0:1], s[2:3], s[4:5]
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_v2i32_commute:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b64 s[0:1], s[2:3], s[4:5]
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor <2 x i32> %src1, <i32 -1, i32 -1>
  %or = or <2 x i32> %not.src1, %src0
  ret <2 x i32> %or
}

define amdgpu_ps i16 @s_orn2_i16(i16 inreg %src0, i16 inreg %src1) {
; GCN-LABEL: s_orn2_i16:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_orn2_b32 s0, s2, s3
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_i16:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b32 s0, s2, s3
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i16 %src1, -1
  %or = or i16 %src0, %not.src1
  ret i16 %or
}

define amdgpu_ps i16 @s_orn2_i16_commute(i16 inreg %src0, i16 inreg %src1) {
; GCN-LABEL: s_orn2_i16_commute:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_orn2_b32 s0, s2, s3
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_i16_commute:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b32 s0, s2, s3
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i16 %src1, -1
  %or = or i16 %not.src1, %src0
  ret i16 %or
}

define amdgpu_ps { i16, i16 } @s_orn2_i16_multi_use(i16 inreg %src0, i16 inreg %src1) {
; GCN-LABEL: s_orn2_i16_multi_use:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_xor_b32 s1, s3, -1
; GCN-NEXT:    s_orn2_b32 s0, s2, s3
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_i16_multi_use:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b32 s0, s2, s3
; GFX10-NEXT:    s_xor_b32 s1, s3, -1
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i16 %src1, -1
  %or = or i16 %src0, %not.src1
  %insert.0 = insertvalue { i16, i16 } undef, i16 %or, 0
  %insert.1 = insertvalue { i16, i16 } %insert.0, i16 %not.src1, 1
  ret { i16, i16 } %insert.1
}

define amdgpu_ps { i16, i16 } @s_orn2_i16_multi_foldable_use(i16 inreg %src0, i16 inreg %src1, i16 inreg %src2) {
; GCN-LABEL: s_orn2_i16_multi_foldable_use:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_orn2_b32 s0, s2, s4
; GCN-NEXT:    s_orn2_b32 s1, s3, s4
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_i16_multi_foldable_use:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b32 s0, s2, s4
; GFX10-NEXT:    s_orn2_b32 s1, s3, s4
; GFX10-NEXT:    ; return to shader part epilog
  %not.src2 = xor i16 %src2, -1
  %or0 = or i16 %src0, %not.src2
  %or1 = or i16 %src1, %not.src2
  %insert.0 = insertvalue { i16, i16 } undef, i16 %or0, 0
  %insert.1 = insertvalue { i16, i16 } %insert.0, i16 %or1, 1
  ret { i16, i16 } %insert.1
}

define i16 @v_orn2_i16(i16 %src0, i16 %src1) {
; GCN-LABEL: v_orn2_i16:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GCN-NEXT:    v_xor_b32_e32 v1, -1, v1
; GCN-NEXT:    v_or_b32_e32 v0, v0, v1
; GCN-NEXT:    s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_orn2_i16:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
; GFX10-NEXT:    v_xor_b32_e32 v1, -1, v1
; GFX10-NEXT:    v_or_b32_e32 v0, v0, v1
; GFX10-NEXT:    s_setpc_b64 s[30:31]
  %not.src1 = xor i16 %src1, -1
  %or = or i16 %src0, %not.src1
  ret i16 %or
}

define amdgpu_ps float @v_orn2_i16_sv(i16 inreg %src0, i16 %src1) {
; GCN-LABEL: v_orn2_i16_sv:
; GCN:       ; %bb.0:
; GCN-NEXT:    v_xor_b32_e32 v0, -1, v0
; GCN-NEXT:    v_or_b32_e32 v0, s2, v0
; GCN-NEXT:    v_bfe_u32 v0, v0, 0, 16
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: v_orn2_i16_sv:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    v_xor_b32_e32 v0, -1, v0
; GFX10-NEXT:    v_or_b32_e32 v0, s2, v0
; GFX10-NEXT:    v_bfe_u32 v0, v0, 0, 16
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i16 %src1, -1
  %or = or i16 %src0, %not.src1
  %zext = zext i16 %or to i32
  %cast.zext = bitcast i32 %zext to float
  ret float %cast.zext
}

define amdgpu_ps float @v_orn2_i16_vs(i16 %src0, i16 inreg %src1) {
; GCN-LABEL: v_orn2_i16_vs:
; GCN:       ; %bb.0:
; GCN-NEXT:    s_xor_b32 s0, s2, -1
; GCN-NEXT:    v_or_b32_e32 v0, s0, v0
; GCN-NEXT:    v_bfe_u32 v0, v0, 0, 16
; GCN-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: v_orn2_i16_vs:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_xor_b32 s0, s2, -1
; GFX10-NEXT:    v_or_b32_e32 v0, s0, v0
; GFX10-NEXT:    v_bfe_u32 v0, v0, 0, 16
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor i16 %src1, -1
  %or = or i16 %src0, %not.src1
  %zext = zext i16 %or to i32
  %cast.zext = bitcast i32 %zext to float
  ret float %cast.zext
}

define amdgpu_ps i32 @s_orn2_v2i16(<2 x i16> inreg %src0, <2 x i16> inreg %src1) {
; GFX6-LABEL: s_orn2_v2i16:
; GFX6:       ; %bb.0:
; GFX6-NEXT:    s_mov_b32 s1, 0xffff
; GFX6-NEXT:    s_lshl_b32 s0, s3, 16
; GFX6-NEXT:    s_and_b32 s2, s2, s1
; GFX6-NEXT:    s_or_b32 s0, s0, s2
; GFX6-NEXT:    s_lshl_b32 s2, s5, 16
; GFX6-NEXT:    s_and_b32 s1, s4, s1
; GFX6-NEXT:    s_or_b32 s1, s2, s1
; GFX6-NEXT:    s_xor_b32 s1, s1, -1
; GFX6-NEXT:    s_or_b32 s0, s0, s1
; GFX6-NEXT:    ; return to shader part epilog
;
; GFX9-LABEL: s_orn2_v2i16:
; GFX9:       ; %bb.0:
; GFX9-NEXT:    s_orn2_b32 s0, s2, s3
; GFX9-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_v2i16:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b32 s0, s2, s3
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor <2 x i16> %src1, <i16 -1, i16 -1>
  %or = or <2 x i16> %src0, %not.src1
  %cast = bitcast <2 x i16> %or to i32
  ret i32 %cast
}

define amdgpu_ps i32 @s_orn2_v2i16_commute(<2 x i16> inreg %src0, <2 x i16> inreg %src1) {
; GFX6-LABEL: s_orn2_v2i16_commute:
; GFX6:       ; %bb.0:
; GFX6-NEXT:    s_mov_b32 s1, 0xffff
; GFX6-NEXT:    s_lshl_b32 s0, s3, 16
; GFX6-NEXT:    s_and_b32 s2, s2, s1
; GFX6-NEXT:    s_or_b32 s0, s0, s2
; GFX6-NEXT:    s_lshl_b32 s2, s5, 16
; GFX6-NEXT:    s_and_b32 s1, s4, s1
; GFX6-NEXT:    s_or_b32 s1, s2, s1
; GFX6-NEXT:    s_xor_b32 s1, s1, -1
; GFX6-NEXT:    s_or_b32 s0, s1, s0
; GFX6-NEXT:    ; return to shader part epilog
;
; GFX9-LABEL: s_orn2_v2i16_commute:
; GFX9:       ; %bb.0:
; GFX9-NEXT:    s_orn2_b32 s0, s2, s3
; GFX9-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_v2i16_commute:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b32 s0, s2, s3
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor <2 x i16> %src1, <i16 -1, i16 -1>
  %or = or <2 x i16> %not.src1, %src0
  %cast = bitcast <2 x i16> %or to i32
  ret i32 %cast
}

define amdgpu_ps { i32, i32 } @s_orn2_v2i16_multi_use(<2 x i16> inreg %src0, <2 x i16> inreg %src1) {
; GFX6-LABEL: s_orn2_v2i16_multi_use:
; GFX6:       ; %bb.0:
; GFX6-NEXT:    s_mov_b32 s1, 0xffff
; GFX6-NEXT:    s_lshl_b32 s0, s3, 16
; GFX6-NEXT:    s_and_b32 s2, s2, s1
; GFX6-NEXT:    s_or_b32 s0, s0, s2
; GFX6-NEXT:    s_lshl_b32 s2, s5, 16
; GFX6-NEXT:    s_and_b32 s1, s4, s1
; GFX6-NEXT:    s_or_b32 s1, s2, s1
; GFX6-NEXT:    s_xor_b32 s1, s1, -1
; GFX6-NEXT:    s_or_b32 s0, s0, s1
; GFX6-NEXT:    ; return to shader part epilog
;
; GFX9-LABEL: s_orn2_v2i16_multi_use:
; GFX9:       ; %bb.0:
; GFX9-NEXT:    s_xor_b32 s1, s3, -1
; GFX9-NEXT:    s_orn2_b32 s0, s2, s3
; GFX9-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_v2i16_multi_use:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b32 s0, s2, s3
; GFX10-NEXT:    s_xor_b32 s1, s3, -1
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor <2 x i16> %src1, <i16 -1, i16 -1>
  %or = or <2 x i16> %src0, %not.src1

  %cast.0 = bitcast <2 x i16> %or to i32
  %cast.1 = bitcast <2 x i16> %not.src1 to i32
  %insert.0 = insertvalue { i32, i32 } undef, i32 %cast.0, 0
  %insert.1 = insertvalue { i32, i32 } %insert.0, i32 %cast.1, 1
  ret { i32, i32 } %insert.1
}

define amdgpu_ps { i32, i32 } @s_orn2_v2i16_multi_foldable_use(<2 x i16> inreg %src0, <2 x i16> inreg %src1, <2 x i16> inreg %src2) {
; GFX6-LABEL: s_orn2_v2i16_multi_foldable_use:
; GFX6:       ; %bb.0:
; GFX6-NEXT:    s_mov_b32 s1, 0xffff
; GFX6-NEXT:    s_lshl_b32 s0, s3, 16
; GFX6-NEXT:    s_and_b32 s2, s2, s1
; GFX6-NEXT:    s_or_b32 s0, s0, s2
; GFX6-NEXT:    s_lshl_b32 s2, s5, 16
; GFX6-NEXT:    s_and_b32 s3, s4, s1
; GFX6-NEXT:    s_or_b32 s2, s2, s3
; GFX6-NEXT:    s_lshl_b32 s3, s7, 16
; GFX6-NEXT:    s_and_b32 s1, s6, s1
; GFX6-NEXT:    s_or_b32 s1, s3, s1
; GFX6-NEXT:    s_xor_b32 s1, s1, -1
; GFX6-NEXT:    s_or_b32 s0, s0, s1
; GFX6-NEXT:    s_or_b32 s1, s2, s1
; GFX6-NEXT:    ; return to shader part epilog
;
; GFX9-LABEL: s_orn2_v2i16_multi_foldable_use:
; GFX9:       ; %bb.0:
; GFX9-NEXT:    s_orn2_b32 s0, s2, s4
; GFX9-NEXT:    s_orn2_b32 s1, s3, s4
; GFX9-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_v2i16_multi_foldable_use:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_orn2_b32 s0, s2, s4
; GFX10-NEXT:    s_orn2_b32 s1, s3, s4
; GFX10-NEXT:    ; return to shader part epilog
  %not.src2 = xor <2 x i16> %src2, <i16 -1, i16 -1>
  %or0 = or <2 x i16> %src0, %not.src2
  %or1 = or <2 x i16> %src1, %not.src2

  %cast.0 = bitcast <2 x i16> %or0 to i32
  %cast.1 = bitcast <2 x i16> %or1 to i32
  %insert.0 = insertvalue { i32, i32 } undef, i32 %cast.0, 0
  %insert.1 = insertvalue { i32, i32 } %insert.0, i32 %cast.1, 1
  ret { i32, i32 } %insert.1
}

define <2 x i16> @v_orn2_v2i16(<2 x i16> %src0, <2 x i16> %src1) {
; GFX6-LABEL: v_orn2_v2i16:
; GFX6:       ; %bb.0:
; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX6-NEXT:    v_mov_b32_e32 v4, 0xffff
; GFX6-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
; GFX6-NEXT:    v_and_b32_e32 v0, v0, v4
; GFX6-NEXT:    v_or_b32_e32 v0, v1, v0
; GFX6-NEXT:    v_lshlrev_b32_e32 v1, 16, v3
; GFX6-NEXT:    v_and_b32_e32 v2, v2, v4
; GFX6-NEXT:    v_or_b32_e32 v1, v1, v2
; GFX6-NEXT:    v_xor_b32_e32 v1, -1, v1
; GFX6-NEXT:    v_or_b32_e32 v0, v0, v1
; GFX6-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
; GFX6-NEXT:    s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_orn2_v2i16:
; GFX9:       ; %bb.0:
; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX9-NEXT:    v_xor_b32_e32 v1, -1, v1
; GFX9-NEXT:    v_or_b32_e32 v0, v0, v1
; GFX9-NEXT:    s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_orn2_v2i16:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
; GFX10-NEXT:    v_xor_b32_e32 v1, -1, v1
; GFX10-NEXT:    v_or_b32_e32 v0, v0, v1
; GFX10-NEXT:    s_setpc_b64 s[30:31]
  %not.src1 = xor <2 x i16> %src1, <i16 -1, i16 -1>
  %or = or <2 x i16> %src0, %not.src1
  ret <2 x i16> %or
}

; FIXME:
; define amdgpu_ps i48 @s_orn2_v3i16(<3 x i16> inreg %src0, <3 x i16> inreg %src1) {
;   %not.src1 = xor <3 x i16> %src1, <i16 -1, i16 -1, i16 -1>
;   %or = or <3 x i16> %src0, %not.src1
;   %cast = bitcast <3 x i16> %or to i48
;   ret i48 %cast
; }

; define amdgpu_ps i48 @s_orn2_v3i16_commute(<3 x i16> inreg %src0, <3 x i16> inreg %src1) {
;   %not.src1 = xor <3 x i16> %src1, <i16 -1, i16 -1, i16 -1>
;   %or = or <3 x i16> %not.src1, %src0
;   %cast = bitcast <3 x i16> %or to i48
;   ret i48 %cast
; }

; define amdgpu_ps { i48, i48 } @s_orn2_v3i16_multi_use(<3 x i16> inreg %src0, <3 x i16> inreg %src1) {
;   %not.src1 = xor <3 x i16> %src1, <i16 -1, i16 -1, i16 -1>
;   %or = or <3 x i16> %src0, %not.src1

;   %cast.0 = bitcast <3 x i16> %or to i48
;   %cast.1 = bitcast <3 x i16> %not.src1 to i48
;   %insert.0 = insertvalue { i48, i48 } undef, i48 %cast.0, 0
;   %insert.1 = insertvalue { i48, i48 } %insert.0, i48 %cast.1, 1
;   ret { i48, i48 } %insert.1
; }

; define <3 x i16> @v_orn2_v3i16(<3 x i16> %src0, <3 x i16> %src1) {
;   %not.src1 = xor <3 x i16> %src1, <i16 -1, i16 -1, i16 -11>
;   %or = or <3 x i16> %src0, %not.src1
;   ret <3 x i16> %or
; }

define amdgpu_ps i64 @s_orn2_v4i16(<4 x i16> inreg %src0, <4 x i16> inreg %src1) {
; GFX6-LABEL: s_orn2_v4i16:
; GFX6:       ; %bb.0:
; GFX6-NEXT:    s_lshl_b32 s0, s3, 16
; GFX6-NEXT:    s_mov_b32 s3, 0xffff
; GFX6-NEXT:    s_and_b32 s1, s2, s3
; GFX6-NEXT:    s_or_b32 s0, s0, s1
; GFX6-NEXT:    s_lshl_b32 s1, s5, 16
; GFX6-NEXT:    s_and_b32 s2, s4, s3
; GFX6-NEXT:    s_or_b32 s1, s1, s2
; GFX6-NEXT:    s_lshl_b32 s2, s7, 16
; GFX6-NEXT:    s_and_b32 s4, s6, s3
; GFX6-NEXT:    s_or_b32 s2, s2, s4
; GFX6-NEXT:    s_lshl_b32 s4, s9, 16
; GFX6-NEXT:    s_and_b32 s3, s8, s3
; GFX6-NEXT:    s_or_b32 s3, s4, s3
; GFX6-NEXT:    s_mov_b32 s4, -1
; GFX6-NEXT:    s_mov_b32 s5, s4
; GFX6-NEXT:    s_xor_b64 s[2:3], s[2:3], s[4:5]
; GFX6-NEXT:    s_or_b64 s[0:1], s[0:1], s[2:3]
; GFX6-NEXT:    ; return to shader part epilog
;
; GFX9-LABEL: s_orn2_v4i16:
; GFX9:       ; %bb.0:
; GFX9-NEXT:    s_mov_b32 s0, -1
; GFX9-NEXT:    s_mov_b32 s1, s0
; GFX9-NEXT:    s_xor_b64 s[0:1], s[4:5], s[0:1]
; GFX9-NEXT:    s_or_b64 s[0:1], s[2:3], s[0:1]
; GFX9-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_v4i16:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_mov_b32 s0, -1
; GFX10-NEXT:    s_mov_b32 s1, s0
; GFX10-NEXT:    s_xor_b64 s[0:1], s[4:5], s[0:1]
; GFX10-NEXT:    s_or_b64 s[0:1], s[2:3], s[0:1]
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor <4 x i16> %src1, <i16 -1, i16 -1, i16 -1, i16 -1>
  %or = or <4 x i16> %src0, %not.src1
  %cast = bitcast <4 x i16> %or to i64
  ret i64 %cast
}

define amdgpu_ps i64 @s_orn2_v4i16_commute(<4 x i16> inreg %src0, <4 x i16> inreg %src1) {
; GFX6-LABEL: s_orn2_v4i16_commute:
; GFX6:       ; %bb.0:
; GFX6-NEXT:    s_lshl_b32 s0, s3, 16
; GFX6-NEXT:    s_mov_b32 s3, 0xffff
; GFX6-NEXT:    s_and_b32 s1, s2, s3
; GFX6-NEXT:    s_or_b32 s0, s0, s1
; GFX6-NEXT:    s_lshl_b32 s1, s5, 16
; GFX6-NEXT:    s_and_b32 s2, s4, s3
; GFX6-NEXT:    s_or_b32 s1, s1, s2
; GFX6-NEXT:    s_lshl_b32 s2, s7, 16
; GFX6-NEXT:    s_and_b32 s4, s6, s3
; GFX6-NEXT:    s_or_b32 s2, s2, s4
; GFX6-NEXT:    s_lshl_b32 s4, s9, 16
; GFX6-NEXT:    s_and_b32 s3, s8, s3
; GFX6-NEXT:    s_or_b32 s3, s4, s3
; GFX6-NEXT:    s_mov_b32 s4, -1
; GFX6-NEXT:    s_mov_b32 s5, s4
; GFX6-NEXT:    s_xor_b64 s[2:3], s[2:3], s[4:5]
; GFX6-NEXT:    s_or_b64 s[0:1], s[2:3], s[0:1]
; GFX6-NEXT:    ; return to shader part epilog
;
; GFX9-LABEL: s_orn2_v4i16_commute:
; GFX9:       ; %bb.0:
; GFX9-NEXT:    s_mov_b32 s0, -1
; GFX9-NEXT:    s_mov_b32 s1, s0
; GFX9-NEXT:    s_xor_b64 s[0:1], s[4:5], s[0:1]
; GFX9-NEXT:    s_or_b64 s[0:1], s[0:1], s[2:3]
; GFX9-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_v4i16_commute:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_mov_b32 s0, -1
; GFX10-NEXT:    s_mov_b32 s1, s0
; GFX10-NEXT:    s_xor_b64 s[0:1], s[4:5], s[0:1]
; GFX10-NEXT:    s_or_b64 s[0:1], s[0:1], s[2:3]
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor <4 x i16> %src1, <i16 -1, i16 -1, i16 -1, i16 -1>
  %or = or <4 x i16> %not.src1, %src0
  %cast = bitcast <4 x i16> %or to i64
  ret i64 %cast
}

define amdgpu_ps { i64, i64 } @s_orn2_v4i16_multi_use(<4 x i16> inreg %src0, <4 x i16> inreg %src1) {
; GFX6-LABEL: s_orn2_v4i16_multi_use:
; GFX6:       ; %bb.0:
; GFX6-NEXT:    s_lshl_b32 s0, s3, 16
; GFX6-NEXT:    s_mov_b32 s3, 0xffff
; GFX6-NEXT:    s_and_b32 s1, s2, s3
; GFX6-NEXT:    s_or_b32 s0, s0, s1
; GFX6-NEXT:    s_lshl_b32 s1, s5, 16
; GFX6-NEXT:    s_and_b32 s2, s4, s3
; GFX6-NEXT:    s_or_b32 s1, s1, s2
; GFX6-NEXT:    s_lshl_b32 s2, s7, 16
; GFX6-NEXT:    s_and_b32 s4, s6, s3
; GFX6-NEXT:    s_or_b32 s2, s2, s4
; GFX6-NEXT:    s_lshl_b32 s4, s9, 16
; GFX6-NEXT:    s_and_b32 s3, s8, s3
; GFX6-NEXT:    s_or_b32 s3, s4, s3
; GFX6-NEXT:    s_mov_b32 s4, -1
; GFX6-NEXT:    s_mov_b32 s5, s4
; GFX6-NEXT:    s_xor_b64 s[2:3], s[2:3], s[4:5]
; GFX6-NEXT:    s_or_b64 s[0:1], s[0:1], s[2:3]
; GFX6-NEXT:    ; return to shader part epilog
;
; GFX9-LABEL: s_orn2_v4i16_multi_use:
; GFX9:       ; %bb.0:
; GFX9-NEXT:    s_mov_b32 s0, -1
; GFX9-NEXT:    s_mov_b32 s1, s0
; GFX9-NEXT:    s_xor_b64 s[4:5], s[4:5], s[0:1]
; GFX9-NEXT:    s_or_b64 s[0:1], s[2:3], s[4:5]
; GFX9-NEXT:    s_mov_b32 s2, s4
; GFX9-NEXT:    s_mov_b32 s3, s5
; GFX9-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_v4i16_multi_use:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_mov_b32 s0, -1
; GFX10-NEXT:    s_mov_b32 s1, s0
; GFX10-NEXT:    s_xor_b64 s[4:5], s[4:5], s[0:1]
; GFX10-NEXT:    s_or_b64 s[0:1], s[2:3], s[4:5]
; GFX10-NEXT:    s_mov_b32 s2, s4
; GFX10-NEXT:    s_mov_b32 s3, s5
; GFX10-NEXT:    ; return to shader part epilog
  %not.src1 = xor <4 x i16> %src1, <i16 -1, i16 -1, i16 -1, i16 -1>
  %or = or <4 x i16> %src0, %not.src1

  %cast.0 = bitcast <4 x i16> %or to i64
  %cast.1 = bitcast <4 x i16> %not.src1 to i64
  %insert.0 = insertvalue { i64, i64 } undef, i64 %cast.0, 0
  %insert.1 = insertvalue { i64, i64 } %insert.0, i64 %cast.1, 1
  ret { i64, i64 } %insert.1
}

define amdgpu_ps { i64, i64 } @s_orn2_v4i16_multi_foldable_use(<4 x i16> inreg %src0, <4 x i16> inreg %src1, <4 x i16> inreg %src2) {
; GFX6-LABEL: s_orn2_v4i16_multi_foldable_use:
; GFX6:       ; %bb.0:
; GFX6-NEXT:    s_mov_b32 s14, 0xffff
; GFX6-NEXT:    s_lshl_b32 s0, s3, 16
; GFX6-NEXT:    s_and_b32 s1, s2, s14
; GFX6-NEXT:    s_or_b32 s0, s0, s1
; GFX6-NEXT:    s_lshl_b32 s1, s5, 16
; GFX6-NEXT:    s_and_b32 s2, s4, s14
; GFX6-NEXT:    s_or_b32 s1, s1, s2
; GFX6-NEXT:    s_lshl_b32 s2, s7, 16
; GFX6-NEXT:    s_and_b32 s3, s6, s14
; GFX6-NEXT:    s_or_b32 s2, s2, s3
; GFX6-NEXT:    s_lshl_b32 s3, s9, 16
; GFX6-NEXT:    s_and_b32 s4, s8, s14
; GFX6-NEXT:    s_or_b32 s3, s3, s4
; GFX6-NEXT:    s_lshl_b32 s4, s11, 16
; GFX6-NEXT:    s_and_b32 s5, s10, s14
; GFX6-NEXT:    s_or_b32 s4, s4, s5
; GFX6-NEXT:    s_lshl_b32 s5, s13, 16
; GFX6-NEXT:    s_and_b32 s6, s12, s14
; GFX6-NEXT:    s_or_b32 s5, s5, s6
; GFX6-NEXT:    s_mov_b32 s6, -1
; GFX6-NEXT:    s_mov_b32 s7, s6
; GFX6-NEXT:    s_xor_b64 s[4:5], s[4:5], s[6:7]
; GFX6-NEXT:    s_or_b64 s[0:1], s[0:1], s[4:5]
; GFX6-NEXT:    s_or_b64 s[2:3], s[2:3], s[4:5]
; GFX6-NEXT:    ; return to shader part epilog
;
; GFX9-LABEL: s_orn2_v4i16_multi_foldable_use:
; GFX9:       ; %bb.0:
; GFX9-NEXT:    s_mov_b32 s0, -1
; GFX9-NEXT:    s_mov_b32 s1, s0
; GFX9-NEXT:    s_xor_b64 s[6:7], s[6:7], s[0:1]
; GFX9-NEXT:    s_or_b64 s[0:1], s[2:3], s[6:7]
; GFX9-NEXT:    s_or_b64 s[2:3], s[4:5], s[6:7]
; GFX9-NEXT:    ; return to shader part epilog
;
; GFX10-LABEL: s_orn2_v4i16_multi_foldable_use:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_mov_b32 s0, -1
; GFX10-NEXT:    s_mov_b32 s1, s0
; GFX10-NEXT:    s_xor_b64 s[6:7], s[6:7], s[0:1]
; GFX10-NEXT:    s_or_b64 s[0:1], s[2:3], s[6:7]
; GFX10-NEXT:    s_or_b64 s[2:3], s[4:5], s[6:7]
; GFX10-NEXT:    ; return to shader part epilog
  %not.src2 = xor <4 x i16> %src2, <i16 -1, i16 -1, i16 -1, i16 -1>
  %or0 = or <4 x i16> %src0, %not.src2
  %or1 = or <4 x i16> %src1, %not.src2

  %cast.0 = bitcast <4 x i16> %or0 to i64
  %cast.1 = bitcast <4 x i16> %or1 to i64
  %insert.0 = insertvalue { i64, i64 } undef, i64 %cast.0, 0
  %insert.1 = insertvalue { i64, i64 } %insert.0, i64 %cast.1, 1
  ret { i64, i64 } %insert.1
}

define <4 x i16> @v_orn2_v4i16(<4 x i16> %src0, <4 x i16> %src1) {
; GFX6-LABEL: v_orn2_v4i16:
; GFX6:       ; %bb.0:
; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX6-NEXT:    v_mov_b32_e32 v8, 0xffff
; GFX6-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
; GFX6-NEXT:    v_and_b32_e32 v0, v0, v8
; GFX6-NEXT:    v_or_b32_e32 v0, v1, v0
; GFX6-NEXT:    v_lshlrev_b32_e32 v1, 16, v3
; GFX6-NEXT:    v_and_b32_e32 v2, v2, v8
; GFX6-NEXT:    v_or_b32_e32 v1, v1, v2
; GFX6-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
; GFX6-NEXT:    v_and_b32_e32 v3, v4, v8
; GFX6-NEXT:    v_or_b32_e32 v2, v2, v3
; GFX6-NEXT:    v_lshlrev_b32_e32 v3, 16, v7
; GFX6-NEXT:    v_and_b32_e32 v4, v6, v8
; GFX6-NEXT:    v_or_b32_e32 v3, v3, v4
; GFX6-NEXT:    v_xor_b32_e32 v2, -1, v2
; GFX6-NEXT:    v_xor_b32_e32 v3, -1, v3
; GFX6-NEXT:    v_or_b32_e32 v0, v0, v2
; GFX6-NEXT:    v_or_b32_e32 v2, v1, v3
; GFX6-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
; GFX6-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
; GFX6-NEXT:    s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_orn2_v4i16:
; GFX9:       ; %bb.0:
; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX9-NEXT:    v_xor_b32_e32 v2, -1, v2
; GFX9-NEXT:    v_xor_b32_e32 v3, -1, v3
; GFX9-NEXT:    v_or_b32_e32 v0, v0, v2
; GFX9-NEXT:    v_or_b32_e32 v1, v1, v3
; GFX9-NEXT:    s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_orn2_v4i16:
; GFX10:       ; %bb.0:
; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
; GFX10-NEXT:    v_xor_b32_e32 v2, -1, v2
; GFX10-NEXT:    v_xor_b32_e32 v3, -1, v3
; GFX10-NEXT:    v_or_b32_e32 v0, v0, v2
; GFX10-NEXT:    v_or_b32_e32 v1, v1, v3
; GFX10-NEXT:    s_setpc_b64 s[30:31]
  %not.src1 = xor <4 x i16> %src1, <i16 -1, i16 -1, i16 -1, i16 -1>
  %or = or <4 x i16> %src0, %not.src1
  ret <4 x i16> %or
}
