1; RUN: opt < %s -inline -inline-remark-attribute --inline-threshold=0 -S | FileCheck %s 2 3; Test that the inliner adds inline remark attributes to non-inlined callsites. 4 5declare void @ext(); 6 7define void @foo() { 8 call void @bar(i1 true) 9 ret void 10} 11 12define void @bar(i1 %p) { 13 br i1 %p, label %bb1, label %bb2 14 15bb1: 16 call void @foo() 17 call void @ext() 18 ret void 19 20bb2: 21 call void @bar(i1 true) 22 ret void 23} 24 25;; Test 1 - Add different inline remarks to similar callsites. 26define 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 33} 34 35define void @noop() { 36 ret void 37} 38 39;; Test 2 - Printed InlineResult messages are followed by InlineCost. 40define 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 47} 48 49;; Test 3 - InlineResult messages come from llvm::isInlineViable() 50define 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 56} 57 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" } 62