• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck --check-prefix=R600-CHECK %s
2; RUN: llc < %s -march=r600 -mcpu=SI | FileCheck --check-prefix=SI-CHECK %s
3
4; BFI_INT Definition pattern from ISA docs
5; (y & x) | (z & ~x)
6;
7; R600-CHECK: @bfi_def
8; R600-CHECK: BFI_INT
9; SI-CHECK:   @bfi_def
10; SI-CHECK:   V_BFI_B32
11define void @bfi_def(i32 addrspace(1)* %out, i32 %x, i32 %y, i32 %z) {
12entry:
13  %0 = xor i32 %x, -1
14  %1 = and i32 %z, %0
15  %2 = and i32 %y, %x
16  %3 = or i32 %1, %2
17  store i32 %3, i32 addrspace(1)* %out
18  ret void
19}
20
21; SHA-256 Ch function
22; z ^ (x & (y ^ z))
23; R600-CHECK: @bfi_sha256_ch
24; R600-CHECK: BFI_INT
25; SI-CHECK:   @bfi_sha256_ch
26; SI-CHECK:   V_BFI_B32
27define void @bfi_sha256_ch(i32 addrspace(1)* %out, i32 %x, i32 %y, i32 %z) {
28entry:
29  %0 = xor i32 %y, %z
30  %1 = and i32 %x, %0
31  %2 = xor i32 %z, %1
32  store i32 %2, i32 addrspace(1)* %out
33  ret void
34}
35
36; SHA-256 Ma function
37; ((x & z) | (y & (x | z)))
38; R600-CHECK: @bfi_sha256_ma
39; R600-CHECK: XOR_INT * [[DST:T[0-9]+\.[XYZW]]], KC0[2].Z, KC0[2].W
40; R600-CHECK: BFI_INT * {{T[0-9]+\.[XYZW]}}, {{[[DST]]|PV\.[XYZW]}}, KC0[3].X, KC0[2].W
41; SI-CHECK: V_XOR_B32_e64 [[DST:VGPR[0-9]+]], {{[SV]GPR[0-9]+, VGPR[0-9]+}}
42; SI-CHECK: V_BFI_B32 {{VGPR[0-9]+}}, [[DST]], {{[SV]GPR[0-9]+, [SV]GPR[0-9]+}}
43
44define void @bfi_sha256_ma(i32 addrspace(1)* %out, i32 %x, i32 %y, i32 %z) {
45entry:
46  %0 = and i32 %x, %z
47  %1 = or i32 %x, %z
48  %2 = and i32 %y, %1
49  %3 = or i32 %0, %2
50  store i32 %3, i32 addrspace(1)* %out
51  ret void
52}
53