Skip to content

Commit 620ce7b

Browse files
committed
Precommit - transform creates extra arg uses
1 parent e454d31 commit 620ce7b

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
@@ -2046,6 +2046,60 @@ define i8 @mul_add_common_factor_use(i8 %x, i8 %y) {
20462046
ret i8 %a
20472047
}
20482048

2049+
; negative test - avoid creating extra uses of args
2050+
2051+
define i8 @mul_add_common_factor_use2(i8 %x, i8 %y, i8 %z) {
2052+
; CHECK-LABEL: @mul_add_common_factor_use2(
2053+
; CHECK-NEXT: [[M:%.*]] = mul i8 [[X:%.*]], [[Y:%.*]]
2054+
; CHECK-NEXT: call void @use(i8 [[M]])
2055+
; CHECK-NEXT: [[N1:%.*]] = add i8 [[Y]], [[Z:%.*]]
2056+
; CHECK-NEXT: [[A:%.*]] = mul i8 [[X]], [[N1]]
2057+
; CHECK-NEXT: ret i8 [[A]]
2058+
;
2059+
%m = mul i8 %x, %y
2060+
%n = mul i8 %x, %z
2061+
call void @use(i8 %m)
2062+
%a = add i8 %m, %n
2063+
ret i8 %a
2064+
}
2065+
2066+
; negative test - avoid disturbing redundant expressions for no immediate improvement
2067+
2068+
define void @mul_add_chain_common_factor_uses(i64 %a, i64 %b, i32 %c) {
2069+
; CHECK-LABEL: @mul_add_chain_common_factor_uses(
2070+
; CHECK-NEXT: [[MUL1:%.*]] = mul i64 [[A:%.*]], [[B:%.*]]
2071+
; CHECK-NEXT: [[SXT1:%.*]] = sext i32 [[C:%.*]] to i64
2072+
; CHECK-NEXT: [[MUL11:%.*]] = add i64 [[A]], [[SXT1]]
2073+
; CHECK-NEXT: [[ADD1:%.*]] = mul i64 [[MUL11]], [[B]]
2074+
; CHECK-NEXT: call void @use(i64 [[ADD1]])
2075+
; CHECK-NEXT: [[SXT2:%.*]] = sext i32 [[C]] to i64
2076+
; CHECK-NEXT: [[ADD12:%.*]] = add i64 [[MUL11]], [[SXT2]]
2077+
; CHECK-NEXT: [[ADD2:%.*]] = mul i64 [[ADD12]], [[B]]
2078+
; CHECK-NEXT: call void @use(i64 [[ADD2]])
2079+
; CHECK-NEXT: [[SXT3:%.*]] = sext i32 [[C]] to i64
2080+
; CHECK-NEXT: [[ADD23:%.*]] = add i64 [[ADD12]], [[SXT3]]
2081+
; CHECK-NEXT: [[ADD3:%.*]] = mul i64 [[ADD23]], [[B]]
2082+
; CHECK-NEXT: call void @use(i64 [[ADD3]])
2083+
; CHECK-NEXT: call void @use(i64 [[MUL1]])
2084+
; CHECK-NEXT: ret void
2085+
;
2086+
%mul1 = mul i64 %a, %b
2087+
%sxt1 = sext i32 %c to i64
2088+
%mul2 = mul i64 %b, %sxt1
2089+
%add1 = add i64 %mul1, %mul2
2090+
call void @use(i64 %add1)
2091+
%sxt2 = sext i32 %c to i64
2092+
%mul3 = mul i64 %b, %sxt2
2093+
%add2 = add i64 %add1, %mul3
2094+
call void @use(i64 %add2)
2095+
%sxt3 = sext i32 %c to i64
2096+
%mul4 = mul i64 %b, %sxt3
2097+
%add3 = add i64 %add2, %mul4
2098+
call void @use(i64 %add3)
2099+
call void @use(i64 %mul1)
2100+
ret void
2101+
}
2102+
20492103
define i8 @not_mul(i8 %x) {
20502104
; CHECK-LABEL: @not_mul(
20512105
; CHECK-NEXT: [[TMP1:%.*]] = mul i8 [[X:%.*]], -41

0 commit comments

Comments
 (0)