@@ -1923,3 +1923,80 @@ define i16 @srem_sext_noundef(i8 noundef %x, i8 %y) {
1923
1923
%z = sub i16 %sx , %sd
1924
1924
ret i16 %z
1925
1925
}
1926
+
1927
+ define i16 @zext_nuw_noundef (i8 noundef %x , i8 %y ) {
1928
+ ; CHECK-LABEL: @zext_nuw_noundef(
1929
+ ; CHECK-NEXT: [[D:%.*]] = sub nuw i8 [[X:%.*]], [[Y:%.*]]
1930
+ ; CHECK-NEXT: [[EX:%.*]] = zext i8 [[X]] to i16
1931
+ ; CHECK-NEXT: [[ED:%.*]] = zext i8 [[D]] to i16
1932
+ ; CHECK-NEXT: [[Z:%.*]] = sub nsw i16 [[EX]], [[ED]]
1933
+ ; CHECK-NEXT: ret i16 [[Z]]
1934
+ ;
1935
+ %d = sub nuw i8 %x , %y
1936
+ %ex = zext i8 %x to i16
1937
+ %ed = zext i8 %d to i16
1938
+ %z = sub i16 %ex , %ed
1939
+ ret i16 %z
1940
+ }
1941
+
1942
+ define i16 @zext_nuw (i8 %x , i8 %y ) {
1943
+ ; CHECK-LABEL: @zext_nuw(
1944
+ ; CHECK-NEXT: [[D:%.*]] = sub nuw i8 [[X:%.*]], [[Y:%.*]]
1945
+ ; CHECK-NEXT: [[EX:%.*]] = zext i8 [[X]] to i16
1946
+ ; CHECK-NEXT: [[ED:%.*]] = zext i8 [[D]] to i16
1947
+ ; CHECK-NEXT: [[Z:%.*]] = sub nsw i16 [[EX]], [[ED]]
1948
+ ; CHECK-NEXT: ret i16 [[Z]]
1949
+ ;
1950
+ %d = sub nuw i8 %x , %y
1951
+ %ex = zext i8 %x to i16
1952
+ %ed = zext i8 %d to i16
1953
+ %z = sub i16 %ex , %ed
1954
+ ret i16 %z
1955
+ }
1956
+
1957
+ define i16 @zext_noundef (i8 noundef %x , i8 %y ) {
1958
+ ; CHECK-LABEL: @zext_noundef(
1959
+ ; CHECK-NEXT: [[D:%.*]] = sub i8 [[X:%.*]], [[Y:%.*]]
1960
+ ; CHECK-NEXT: [[EX:%.*]] = zext i8 [[X]] to i16
1961
+ ; CHECK-NEXT: [[ED:%.*]] = zext i8 [[D]] to i16
1962
+ ; CHECK-NEXT: [[Z:%.*]] = sub nsw i16 [[EX]], [[ED]]
1963
+ ; CHECK-NEXT: ret i16 [[Z]]
1964
+ ;
1965
+ %d = sub i8 %x , %y
1966
+ %ex = zext i8 %x to i16
1967
+ %ed = zext i8 %d to i16
1968
+ %z = sub i16 %ex , %ed
1969
+ ret i16 %z
1970
+ }
1971
+
1972
+ define i16 @zext_nsw_noundef_wrong_val (i8 noundef %x , i8 noundef %y , i8 noundef %q ) {
1973
+ ; CHECK-LABEL: @zext_nsw_noundef_wrong_val(
1974
+ ; CHECK-NEXT: [[D:%.*]] = sub nuw i8 [[X:%.*]], [[Y:%.*]]
1975
+ ; CHECK-NEXT: [[EQ:%.*]] = zext i8 [[Q:%.*]] to i16
1976
+ ; CHECK-NEXT: [[ED:%.*]] = zext i8 [[D]] to i16
1977
+ ; CHECK-NEXT: [[Z:%.*]] = sub nsw i16 [[EQ]], [[ED]]
1978
+ ; CHECK-NEXT: ret i16 [[Z]]
1979
+ ;
1980
+ %d = sub nuw i8 %x , %y
1981
+ %eq = zext i8 %q to i16
1982
+ %ed = zext i8 %d to i16
1983
+ %z = sub i16 %eq , %ed
1984
+ ret i16 %z
1985
+ }
1986
+
1987
+ define i16 @srem_zext_noundef (i8 noundef %x , i8 %y ) {
1988
+ ; CHECK-LABEL: @srem_zext_noundef(
1989
+ ; CHECK-NEXT: [[R:%.*]] = urem i8 [[X:%.*]], [[Y:%.*]]
1990
+ ; CHECK-NEXT: [[D:%.*]] = sub nuw i8 [[X]], [[R]]
1991
+ ; CHECK-NEXT: [[ED:%.*]] = zext i8 [[D]] to i16
1992
+ ; CHECK-NEXT: [[EX:%.*]] = zext i8 [[X]] to i16
1993
+ ; CHECK-NEXT: [[Z:%.*]] = sub nsw i16 [[EX]], [[ED]]
1994
+ ; CHECK-NEXT: ret i16 [[Z]]
1995
+ ;
1996
+ %r = urem i8 %x , %y
1997
+ %d = sub i8 %x , %r
1998
+ %ed = zext i8 %d to i16
1999
+ %ex = zext i8 %x to i16
2000
+ %z = sub i16 %ex , %ed
2001
+ ret i16 %z
2002
+ }
0 commit comments