@@ -1912,56 +1912,65 @@ define i32 @v_bfi_seq_i32(i32 %x, i32 %y, i32 %z) {
1912
1912
; GFX7-LABEL: v_bfi_seq_i32:
1913
1913
; GFX7: ; %bb.0:
1914
1914
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1915
+ ; GFX7-NEXT: v_lshlrev_b32_e32 v0, 20, v0
1915
1916
; GFX7-NEXT: s_mov_b32 s4, 0xffc00
1916
- ; GFX7-NEXT: v_bfi_b32 v0, s4 , v0, v1
1917
- ; GFX7-NEXT: v_xor_b32_e32 v1 , v1, v2
1918
- ; GFX7-NEXT: v_and_b32_e32 v1 , 0x3ff00000, v1
1919
- ; GFX7-NEXT: v_xor_b32_e32 v0, v1, v0
1917
+ ; GFX7-NEXT: v_xor_b32_e32 v0, v0, v1
1918
+ ; GFX7-NEXT: v_bfi_b32 v2, s4 , v1, v2
1919
+ ; GFX7-NEXT: v_and_b32_e32 v0 , 0x3ff00000, v0
1920
+ ; GFX7-NEXT: v_xor_b32_e32 v0, v0, v2
1920
1921
; GFX7-NEXT: s_setpc_b64 s[30:31]
1921
1922
;
1922
1923
; GFX8-LABEL: v_bfi_seq_i32:
1923
1924
; GFX8: ; %bb.0:
1924
1925
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1926
+ ; GFX8-NEXT: v_lshlrev_b32_e32 v0, 20, v0
1925
1927
; GFX8-NEXT: s_mov_b32 s4, 0xffc00
1926
- ; GFX8-NEXT: v_bfi_b32 v0, s4 , v0, v1
1927
- ; GFX8-NEXT: v_xor_b32_e32 v1 , v1, v2
1928
- ; GFX8-NEXT: v_and_b32_e32 v1 , 0x3ff00000, v1
1929
- ; GFX8-NEXT: v_xor_b32_e32 v0, v1, v0
1928
+ ; GFX8-NEXT: v_xor_b32_e32 v0, v0, v1
1929
+ ; GFX8-NEXT: v_bfi_b32 v2, s4 , v1, v2
1930
+ ; GFX8-NEXT: v_and_b32_e32 v0 , 0x3ff00000, v0
1931
+ ; GFX8-NEXT: v_xor_b32_e32 v0, v0, v2
1930
1932
; GFX8-NEXT: s_setpc_b64 s[30:31]
1931
1933
;
1932
1934
; GFX10-LABEL: v_bfi_seq_i32:
1933
1935
; GFX10: ; %bb.0:
1934
1936
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1935
1937
; GFX10-NEXT: s_waitcnt_vscnt null, 0x0
1936
- ; GFX10-NEXT: v_xor_b32_e32 v2, v1, v2
1937
- ; GFX10-NEXT: v_bfi_b32 v0, 0xffc00, v0, v1
1938
- ; GFX10-NEXT: v_and_b32_e32 v1, 0x3ff00000, v2
1939
- ; GFX10-NEXT: v_xor_b32_e32 v0, v1, v0
1938
+ ; GFX10-NEXT: v_lshlrev_b32_e32 v0, 20, v0
1939
+ ; GFX10-NEXT: v_xor_b32_e32 v0, v0, v1
1940
+ ; GFX10-NEXT: v_bfi_b32 v1, 0xffc00, v1, v2
1941
+ ; GFX10-NEXT: v_and_b32_e32 v0, 0x3ff00000, v0
1942
+ ; GFX10-NEXT: v_xor_b32_e32 v0, v0, v1
1940
1943
; GFX10-NEXT: s_setpc_b64 s[30:31]
1941
1944
;
1942
1945
; GFX8-GISEL-LABEL: v_bfi_seq_i32:
1943
1946
; GFX8-GISEL: ; %bb.0:
1944
1947
; GFX8-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1945
- ; GFX8-GISEL-NEXT: v_and_b32_e32 v0, 0xffc00, v0
1946
- ; GFX8-GISEL-NEXT: v_and_b32_e32 v1, 0xfff003ff, v1
1947
- ; GFX8-GISEL-NEXT: v_or_b32_e32 v0, v0, v1
1948
- ; GFX8-GISEL-NEXT: v_mov_b32_e32 v1, 0x3ff00000
1949
- ; GFX8-GISEL-NEXT: v_bfi_b32 v0, v1, v2, v0
1948
+ ; GFX8-GISEL-NEXT: v_lshlrev_b32_e32 v0, 20, v0
1949
+ ; GFX8-GISEL-NEXT: v_and_b32_e32 v3, 0xffc00, v1
1950
+ ; GFX8-GISEL-NEXT: v_and_b32_e32 v2, 0xfff003ff, v2
1951
+ ; GFX8-GISEL-NEXT: v_xor_b32_e32 v0, v0, v1
1952
+ ; GFX8-GISEL-NEXT: v_or_b32_e32 v2, v3, v2
1953
+ ; GFX8-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff00000, v0
1954
+ ; GFX8-GISEL-NEXT: v_xor_b32_e32 v0, v0, v2
1950
1955
; GFX8-GISEL-NEXT: s_setpc_b64 s[30:31]
1951
1956
;
1952
1957
; GFX10-GISEL-LABEL: v_bfi_seq_i32:
1953
1958
; GFX10-GISEL: ; %bb.0:
1954
1959
; GFX10-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1955
1960
; GFX10-GISEL-NEXT: s_waitcnt_vscnt null, 0x0
1956
- ; GFX10-GISEL-NEXT: v_and_b32_e32 v1, 0xfff003ff, v1
1957
- ; GFX10-GISEL-NEXT: v_and_or_b32 v0, 0xffc00, v0, v1
1958
- ; GFX10-GISEL-NEXT: v_bfi_b32 v0, 0x3ff00000, v2, v0
1961
+ ; GFX10-GISEL-NEXT: v_lshlrev_b32_e32 v0, 20, v0
1962
+ ; GFX10-GISEL-NEXT: v_and_b32_e32 v2, 0xfff003ff, v2
1963
+ ; GFX10-GISEL-NEXT: v_xor_b32_e32 v0, v0, v1
1964
+ ; GFX10-GISEL-NEXT: v_and_or_b32 v1, 0xffc00, v1, v2
1965
+ ; GFX10-GISEL-NEXT: v_and_b32_e32 v0, 0x3ff00000, v0
1966
+ ; GFX10-GISEL-NEXT: v_xor_b32_e32 v0, v0, v1
1959
1967
; GFX10-GISEL-NEXT: s_setpc_b64 s[30:31]
1960
- %1 = and i32 %x , 1047552
1961
- %2 = and i32 %y , -1047553
1962
- %3 = or i32 %1 , %2
1963
- %4 = xor i32 %3 , %z
1964
- %5 = and i32 %4 , 1072693248
1965
- %6 = xor i32 %5 , %3
1966
- ret i32 %6
1968
+ %1 = shl i32 %x , 20
1969
+ %2 = and i32 %y , 1047552
1970
+ %3 = and i32 %z , -1047553
1971
+ %4 = or i32 %2 , %3
1972
+ %5 = xor i32 %1 , %y
1973
+ %6 = and i32 %5 , 1072693248
1974
+ %7 = xor i32 %6 , %4
1975
+ ret i32 %7
1967
1976
}
0 commit comments