[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / Inline / inline-remark.ll
blobbfb78c9ee88e504553706f7a252cb1c630c97497
1 ; RUN: opt < %s -inline -inline-remark-attribute --inline-threshold=0 -S | FileCheck %s
3 ; Test that the inliner adds inline remark attributes to non-inlined callsites.
5 declare void @ext();
7 define void @foo() {
8   call void @bar(i1 true)
9   ret void
12 define void @bar(i1 %p) {
13   br i1 %p, label %bb1, label %bb2
15 bb1:
16   call void @foo()
17   call void @ext()
18   ret void
20 bb2:
21   call void @bar(i1 true)
22   ret void
25 ;; Test 1 - Add different inline remarks to similar callsites.
26 define void @test1() {
27 ; CHECK-LABEL: @test1
28 ; CHECK-NEXT: call void @bar(i1 true) [[ATTR1:#[0-9]+]]
29 ; CHECK-NEXT: call void @bar(i1 false) [[ATTR2:#[0-9]+]]
30   call void @bar(i1 true)
31   call void @bar(i1 false)
32   ret void
35 define void @noop() {
36   ret void
39 ;; Test 2 - Printed InlineResult messages are followed by InlineCost.
40 define void @test2(i8*) {
41 ; CHECK-LABEL: @test2
42 ; CHECK-NEXT: call void @noop() [[ATTR3:#[0-9]+]] [ "CUSTOM_OPERAND_BUNDLE"() ]
43 ; CHECK-NEXT: ret void
44   call void @noop() ; extepected to be inlined
45   call void @noop() [ "CUSTOM_OPERAND_BUNDLE"() ] ; cannot be inlined because of unsupported operand bundle
46   ret void
49 ;; Test 3 - InlineResult messages come from llvm::isInlineViable()
50 define void @test3() {
51 ; CHECK-LABEL: @test3
52 ; CHECK-NEXT: call void @test3() [[ATTR4:#[0-9]+]]
53 ; CHECK-NEXT: ret void
54   call void @test3() alwaysinline
55   ret void
58 ; CHECK: attributes [[ATTR1]] = { "inline-remark"="(cost=25, threshold=0)" }
59 ; CHECK: attributes [[ATTR2]] = { "inline-remark"="(cost=never): recursive" }
60 ; CHECK: attributes [[ATTR3]] = { "inline-remark"="unsupported operand bundle; (cost={{.*}}, threshold={{.*}})" }
61 ; CHECK: attributes [[ATTR4]] = { alwaysinline "inline-remark"="(cost=never): recursive call" }