@@ -1919,6 +1919,227 @@ define i1 @tautological8(i32 %A, i32 %B) {
1919
1919
ret i1 %D
1920
1920
}
1921
1921
1922
+ define i1 @tautological9 (i32 %A ) {
1923
+ ; CHECK-LABEL: @tautological9(
1924
+ ; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
1925
+ ; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], 3
1926
+ ; CHECK-NEXT: [[D:%.*]] = icmp ugt i32 [[C1]], [[C2]]
1927
+ ; CHECK-NEXT: ret i1 [[D]]
1928
+ ;
1929
+ %C1 = and i32 %A , 1
1930
+ %C2 = and i32 %A , 3
1931
+ %D = icmp ugt i32 %C1 , %C2
1932
+ ret i1 %D
1933
+ }
1934
+
1935
+ define <2 x i1 > @tautological9_vec (<2 x i32 > %A ) {
1936
+ ; CHECK-LABEL: @tautological9_vec(
1937
+ ; CHECK-NEXT: [[C1:%.*]] = and <2 x i32> [[A:%.*]], <i32 1, i32 1>
1938
+ ; CHECK-NEXT: [[C2:%.*]] = and <2 x i32> [[A]], <i32 3, i32 3>
1939
+ ; CHECK-NEXT: [[D:%.*]] = icmp ugt <2 x i32> [[C1]], [[C2]]
1940
+ ; CHECK-NEXT: ret <2 x i1> [[D]]
1941
+ ;
1942
+ %C1 = and <2 x i32 > %A , <i32 1 , i32 1 >
1943
+ %C2 = and <2 x i32 > %A , <i32 3 , i32 3 >
1944
+ %D = icmp ugt <2 x i32 > %C1 , %C2
1945
+ ret <2 x i1 > %D
1946
+ }
1947
+
1948
+ define i1 @tautological10 (i32 %A ) {
1949
+ ; CHECK-LABEL: @tautological10(
1950
+ ; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
1951
+ ; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], 3
1952
+ ; CHECK-NEXT: [[D:%.*]] = icmp ule i32 [[C1]], [[C2]]
1953
+ ; CHECK-NEXT: ret i1 [[D]]
1954
+ ;
1955
+ %C1 = and i32 %A , 1
1956
+ %C2 = and i32 %A , 3
1957
+ %D = icmp ule i32 %C1 , %C2
1958
+ ret i1 %D
1959
+ }
1960
+
1961
+ define i1 @tautological11 (i32 %A ) {
1962
+ ; CHECK-LABEL: @tautological11(
1963
+ ; CHECK-NEXT: [[C1:%.*]] = or i32 [[A:%.*]], 1
1964
+ ; CHECK-NEXT: [[C2:%.*]] = or i32 [[A]], 3
1965
+ ; CHECK-NEXT: [[D:%.*]] = icmp ule i32 [[C1]], [[C2]]
1966
+ ; CHECK-NEXT: ret i1 [[D]]
1967
+ ;
1968
+ %C1 = or i32 %A , 1
1969
+ %C2 = or i32 %A , 3
1970
+ %D = icmp ule i32 %C1 , %C2
1971
+ ret i1 %D
1972
+ }
1973
+
1974
+ define i1 @tautological12 (i32 %A ) {
1975
+ ; CHECK-LABEL: @tautological12(
1976
+ ; CHECK-NEXT: [[C1:%.*]] = or i32 [[A:%.*]], 1
1977
+ ; CHECK-NEXT: [[C2:%.*]] = or i32 [[A]], 3
1978
+ ; CHECK-NEXT: [[D:%.*]] = icmp ugt i32 [[C1]], [[C2]]
1979
+ ; CHECK-NEXT: ret i1 [[D]]
1980
+ ;
1981
+ %C1 = or i32 %A , 1
1982
+ %C2 = or i32 %A , 3
1983
+ %D = icmp ugt i32 %C1 , %C2
1984
+ ret i1 %D
1985
+ }
1986
+
1987
+ define i1 @tautological13 (i32 %A ) {
1988
+ ; CHECK-LABEL: @tautological13(
1989
+ ; CHECK-NEXT: [[C1:%.*]] = or i32 [[A:%.*]], 1
1990
+ ; CHECK-NEXT: [[C2:%.*]] = or i32 [[A]], 3
1991
+ ; CHECK-NEXT: [[D:%.*]] = icmp ult i32 [[C2]], [[C1]]
1992
+ ; CHECK-NEXT: ret i1 [[D]]
1993
+ ;
1994
+ %C1 = or i32 %A , 1
1995
+ %C2 = or i32 %A , 3
1996
+ %D = icmp ult i32 %C2 , %C1
1997
+ ret i1 %D
1998
+ }
1999
+
2000
+ define i1 @tautological14 (i32 %A ) {
2001
+ ; CHECK-LABEL: @tautological14(
2002
+ ; CHECK-NEXT: [[C1:%.*]] = or i32 [[A:%.*]], 1
2003
+ ; CHECK-NEXT: [[C2:%.*]] = or i32 [[A]], 3
2004
+ ; CHECK-NEXT: [[D:%.*]] = icmp uge i32 [[C2]], [[C1]]
2005
+ ; CHECK-NEXT: ret i1 [[D]]
2006
+ ;
2007
+ %C1 = or i32 %A , 1
2008
+ %C2 = or i32 %A , 3
2009
+ %D = icmp uge i32 %C2 , %C1
2010
+ ret i1 %D
2011
+ }
2012
+
2013
+ define i1 @tautological15 (i32 %A ) {
2014
+ ; CHECK-LABEL: @tautological15(
2015
+ ; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
2016
+ ; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], 3
2017
+ ; CHECK-NEXT: [[D:%.*]] = icmp uge i32 [[C2]], [[C1]]
2018
+ ; CHECK-NEXT: ret i1 [[D]]
2019
+ ;
2020
+ %C1 = and i32 %A , 1
2021
+ %C2 = and i32 %A , 3
2022
+ %D = icmp uge i32 %C2 , %C1
2023
+ ret i1 %D
2024
+ }
2025
+
2026
+ define i1 @tautological16 (i32 %A ) {
2027
+ ; CHECK-LABEL: @tautological16(
2028
+ ; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
2029
+ ; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], 3
2030
+ ; CHECK-NEXT: [[D:%.*]] = icmp ult i32 [[C2]], [[C1]]
2031
+ ; CHECK-NEXT: ret i1 [[D]]
2032
+ ;
2033
+ %C1 = and i32 %A , 1
2034
+ %C2 = and i32 %A , 3
2035
+ %D = icmp ult i32 %C2 , %C1
2036
+ ret i1 %D
2037
+ }
2038
+
2039
+ define i1 @tautological9_negative (i32 %A ) {
2040
+ ; CHECK-LABEL: @tautological9_negative(
2041
+ ; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
2042
+ ; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], 2
2043
+ ; CHECK-NEXT: [[D:%.*]] = icmp ugt i32 [[C1]], [[C2]]
2044
+ ; CHECK-NEXT: ret i1 [[D]]
2045
+ ;
2046
+ %C1 = and i32 %A , 1
2047
+ %C2 = and i32 %A , 2
2048
+ %D = icmp ugt i32 %C1 , %C2
2049
+ ret i1 %D
2050
+ }
2051
+
2052
+ define i1 @tautological10_negative (i32 %A ) {
2053
+ ; CHECK-LABEL: @tautological10_negative(
2054
+ ; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
2055
+ ; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], 2
2056
+ ; CHECK-NEXT: [[D:%.*]] = icmp ule i32 [[C1]], [[C2]]
2057
+ ; CHECK-NEXT: ret i1 [[D]]
2058
+ ;
2059
+ %C1 = and i32 %A , 1
2060
+ %C2 = and i32 %A , 2
2061
+ %D = icmp ule i32 %C1 , %C2
2062
+ ret i1 %D
2063
+ }
2064
+
2065
+ define i1 @tautological11_negative (i32 %A ) {
2066
+ ; CHECK-LABEL: @tautological11_negative(
2067
+ ; CHECK-NEXT: [[C1:%.*]] = or i32 [[A:%.*]], 1
2068
+ ; CHECK-NEXT: [[C2:%.*]] = or i32 [[A]], 2
2069
+ ; CHECK-NEXT: [[D:%.*]] = icmp ule i32 [[C1]], [[C2]]
2070
+ ; CHECK-NEXT: ret i1 [[D]]
2071
+ ;
2072
+ %C1 = or i32 %A , 1
2073
+ %C2 = or i32 %A , 2
2074
+ %D = icmp ule i32 %C1 , %C2
2075
+ ret i1 %D
2076
+ }
2077
+
2078
+ define i1 @tautological12_negative (i32 %A ) {
2079
+ ; CHECK-LABEL: @tautological12_negative(
2080
+ ; CHECK-NEXT: [[C1:%.*]] = or i32 [[A:%.*]], 1
2081
+ ; CHECK-NEXT: [[C2:%.*]] = or i32 [[A]], 2
2082
+ ; CHECK-NEXT: [[D:%.*]] = icmp ugt i32 [[C1]], [[C2]]
2083
+ ; CHECK-NEXT: ret i1 [[D]]
2084
+ ;
2085
+ %C1 = or i32 %A , 1
2086
+ %C2 = or i32 %A , 2
2087
+ %D = icmp ugt i32 %C1 , %C2
2088
+ ret i1 %D
2089
+ }
2090
+
2091
+ define i1 @tautological13_negative (i32 %A ) {
2092
+ ; CHECK-LABEL: @tautological13_negative(
2093
+ ; CHECK-NEXT: [[C1:%.*]] = or i32 [[A:%.*]], 1
2094
+ ; CHECK-NEXT: [[C2:%.*]] = or i32 [[A]], 2
2095
+ ; CHECK-NEXT: [[D:%.*]] = icmp ult i32 [[C2]], [[C1]]
2096
+ ; CHECK-NEXT: ret i1 [[D]]
2097
+ ;
2098
+ %C1 = or i32 %A , 1
2099
+ %C2 = or i32 %A , 2
2100
+ %D = icmp ult i32 %C2 , %C1
2101
+ ret i1 %D
2102
+ }
2103
+
2104
+ define i1 @tautological14_negative (i32 %A ) {
2105
+ ; CHECK-LABEL: @tautological14_negative(
2106
+ ; CHECK-NEXT: [[C1:%.*]] = or i32 [[A:%.*]], 1
2107
+ ; CHECK-NEXT: [[C2:%.*]] = or i32 [[A]], 2
2108
+ ; CHECK-NEXT: [[D:%.*]] = icmp uge i32 [[C2]], [[C1]]
2109
+ ; CHECK-NEXT: ret i1 [[D]]
2110
+ ;
2111
+ %C1 = or i32 %A , 1
2112
+ %C2 = or i32 %A , 2
2113
+ %D = icmp uge i32 %C2 , %C1
2114
+ ret i1 %D
2115
+ }
2116
+
2117
+ define i1 @tautological15_negative (i32 %A ) {
2118
+ ; CHECK-LABEL: @tautological15_negative(
2119
+ ; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
2120
+ ; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], 2
2121
+ ; CHECK-NEXT: [[D:%.*]] = icmp uge i32 [[C2]], [[C1]]
2122
+ ; CHECK-NEXT: ret i1 [[D]]
2123
+ ;
2124
+ %C1 = and i32 %A , 1
2125
+ %C2 = and i32 %A , 2
2126
+ %D = icmp uge i32 %C2 , %C1
2127
+ ret i1 %D
2128
+ }
2129
+
2130
+ define i1 @tautological16_negative (i32 %A ) {
2131
+ ; CHECK-LABEL: @tautological16_negative(
2132
+ ; CHECK-NEXT: [[C1:%.*]] = and i32 [[A:%.*]], 1
2133
+ ; CHECK-NEXT: [[C2:%.*]] = and i32 [[A]], 2
2134
+ ; CHECK-NEXT: [[D:%.*]] = icmp ult i32 [[C2]], [[C1]]
2135
+ ; CHECK-NEXT: ret i1 [[D]]
2136
+ ;
2137
+ %C1 = and i32 %A , 1
2138
+ %C2 = and i32 %A , 2
2139
+ %D = icmp ult i32 %C2 , %C1
2140
+ ret i1 %D
2141
+ }
2142
+
1922
2143
declare void @helper_i1 (i1 )
1923
2144
; Series of tests for icmp s[lt|ge] (or A, B), A and icmp s[gt|le] A, (or A, B)
1924
2145
define void @icmp_slt_sge_or (i32 %Ax , i32 %Bx ) {
0 commit comments