Skip to content

Commit bfb915e

Browse files
committed
[InstCombine] add tests for 'sub nuw' with zext; NFC
1 parent 5d7e63f commit bfb915e

File tree

1 file changed

+77
-0
lines changed
  • llvm/test/Transforms/InstCombine

1 file changed

+77
-0
lines changed

llvm/test/Transforms/InstCombine/sub.ll

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1923,3 +1923,80 @@ define i16 @srem_sext_noundef(i8 noundef %x, i8 %y) {
19231923
%z = sub i16 %sx, %sd
19241924
ret i16 %z
19251925
}
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

Comments
 (0)