Skip to content

Commit fcbdd83

Browse files
committed
Precommit - transform creates extra arg uses
1 parent e398da2 commit fcbdd83

File tree

1 file changed

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

1 file changed

+54
-0
lines changed

llvm/test/Transforms/InstCombine/add.ll

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2008,6 +2008,60 @@ define i8 @mul_add_common_factor_use(i8 %x, i8 %y) {
20082008
ret i8 %a
20092009
}
20102010

2011+
; negative test - avoid creating extra uses of args
2012+
2013+
define i8 @mul_add_common_factor_use2(i8 %x, i8 %y, i8 %z) {
2014+
; CHECK-LABEL: @mul_add_common_factor_use2(
2015+
; CHECK-NEXT: [[M:%.*]] = mul i8 [[X:%.*]], [[Y:%.*]]
2016+
; CHECK-NEXT: call void @use(i8 [[M]])
2017+
; CHECK-NEXT: [[N1:%.*]] = add i8 [[Y]], [[Z:%.*]]
2018+
; CHECK-NEXT: [[A:%.*]] = mul i8 [[N1]], [[X]]
2019+
; CHECK-NEXT: ret i8 [[A]]
2020+
;
2021+
%m = mul i8 %x, %y
2022+
%n = mul i8 %x, %z
2023+
call void @use(i8 %m)
2024+
%a = add i8 %m, %n
2025+
ret i8 %a
2026+
}
2027+
2028+
; negative test - avoid disturbing redundant expressions for no immediate improvement
2029+
2030+
define void @mul_add_chain_common_factor_uses(i64 %a, i64 %b, i32 %c) {
2031+
; CHECK-LABEL: @mul_add_chain_common_factor_uses(
2032+
; CHECK-NEXT: [[MUL1:%.*]] = mul i64 [[A:%.*]], [[B:%.*]]
2033+
; CHECK-NEXT: [[SXT1:%.*]] = sext i32 [[C:%.*]] to i64
2034+
; CHECK-NEXT: [[MUL11:%.*]] = add i64 [[SXT1]], [[A]]
2035+
; CHECK-NEXT: [[ADD1:%.*]] = mul i64 [[MUL11]], [[B]]
2036+
; CHECK-NEXT: call void @use(i64 [[ADD1]])
2037+
; CHECK-NEXT: [[SXT2:%.*]] = sext i32 [[C]] to i64
2038+
; CHECK-NEXT: [[ADD12:%.*]] = add i64 [[MUL11]], [[SXT2]]
2039+
; CHECK-NEXT: [[ADD2:%.*]] = mul i64 [[ADD12]], [[B]]
2040+
; CHECK-NEXT: call void @use(i64 [[ADD2]])
2041+
; CHECK-NEXT: [[SXT3:%.*]] = sext i32 [[C]] to i64
2042+
; CHECK-NEXT: [[ADD23:%.*]] = add i64 [[ADD12]], [[SXT3]]
2043+
; CHECK-NEXT: [[ADD3:%.*]] = mul i64 [[ADD23]], [[B]]
2044+
; CHECK-NEXT: call void @use(i64 [[ADD3]])
2045+
; CHECK-NEXT: call void @use(i64 [[MUL1]])
2046+
; CHECK-NEXT: ret void
2047+
;
2048+
%mul1 = mul i64 %a, %b
2049+
%sxt1 = sext i32 %c to i64
2050+
%mul2 = mul i64 %sxt1, %b
2051+
%add1 = add i64 %mul1, %mul2
2052+
call void @use(i64 %add1)
2053+
%sxt2 = sext i32 %c to i64
2054+
%mul3 = mul i64 %sxt2, %b
2055+
%add2 = add i64 %add1, %mul3
2056+
call void @use(i64 %add2)
2057+
%sxt3 = sext i32 %c to i64
2058+
%mul4 = mul i64 %sxt3, %b
2059+
%add3 = add i64 %add2, %mul4
2060+
call void @use(i64 %add3)
2061+
call void @use(i64 %mul1)
2062+
ret void
2063+
}
2064+
20112065
define i8 @not_mul(i8 %x) {
20122066
; CHECK-LABEL: @not_mul(
20132067
; CHECK-NEXT: [[TMP1:%.*]] = mul i8 [[X:%.*]], -41

0 commit comments

Comments
 (0)