brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · d0450e0 Raw
131 lines · plain
1;; Make sure we assign the original callsite to a function clone (which will be2;; the original function clone), even when we cannot update its caller (due to3;; missing metadata e.g. from mismatched profiles). Otherwise we will try to use4;; the original function for a different clone, leading to confusion later when5;; rewriting the calls.6 7;; -stats requires asserts8; REQUIRES: asserts9 10; RUN: opt -passes=memprof-context-disambiguation -supports-hot-cold-new \11; RUN:		-memprof-verify-ccg -memprof-verify-nodes -stats -debug \12; RUN: 		-pass-remarks=memprof-context-disambiguation %s -S 2>&1 | \13; RUN:	FileCheck %s --implicit-check-not="Mismatch in call clone assignment" \14; RUN:		--implicit-check-not="Number of callsites assigned to call multiple non-matching clones"15 16 17; ModuleID = '<stdin>'18source_filename = "reduced.ll"19target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"20target triple = "x86_64-unknown-linux-gnu"21 22; CHECK-LABEL: define void @A()23define void @A() {24  ; CHECK: call void @C()25  call void @C()26  ret void27}28 29; CHECK-LABEL: define void @B()30define void @B() {31  ; CHECK: call void @C.memprof.1()32  call void @C(), !callsite !133  ret void34}35 36; CHECK-LABEL: define void @C()37define void @C() {38  ; CHECK: call void @F()39  call void @F(), !callsite !1640  ; CHECK: call void @D()41  call void @D(), !callsite !242  ret void43}44 45; CHECK-LABEL: define void @D()46define void @D() {47  ; CHECK: call void @E()48  call void @E(), !callsite !349  ; CHECK: call void @G()50  call void @G(), !callsite !1751  ret void52}53 54; CHECK-LABEL: define void @E()55define void @E() {56  ; CHECK: call ptr @_Znwm(i64 0) #[[NOTCOLD:[0-9]+]]57  %1 = call ptr @_Znwm(i64 0), !memprof !4, !callsite !958  ret void59}60 61; CHECK-LABEL: define void @F()62define void @F() {63  ; CHECK: call void @G()64  call void @G(), !callsite !1765  ret void66}67 68; CHECK-LABEL: define void @G()69define void @G() {70  ; CHECK: call ptr @_Znwm(i64 0) #[[NOTCOLD]]71  %2 = call ptr @_Znwm(i64 0), !memprof !10, !callsite !1572  ret void73}74 75; CHECK-LABEL: define void @A1()76define void @A1() {77  ; CHECK: call void @C()78  call void @C(), !callsite !1879  ret void80}81 82; CHECK-LABEL: define void @B1()83define void @B1() {84  ; CHECK: call void @C.memprof.1()85  call void @C(), !callsite !1986  ret void87}88 89; CHECK-LABEL: define void @C.memprof.1()90  ; CHECK: call void @F.memprof.1()91  ; CHECK: call void @D.memprof.1()92 93; CHECK-LABEL: define void @D.memprof.1()94  ; CHECK: call void @E.memprof.1()95  ; CHECK: call void @G()96 97; CHECK-LABEL: define void @E.memprof.1()98  ; CHECK: call ptr @_Znwm(i64 0) #[[COLD:[0-9]+]]99 100; CHECK-LABEL: define void @F.memprof.1()101  ; CHECK: call void @G.memprof.1()102 103; CHECK-LABEL: define void @G.memprof.1()104  ; CHECK: call ptr @_Znwm(i64 0) #[[COLD]]105 106declare ptr @_Znwm(i64)107 108; IR: attributes #[[NOTCOLD]] = { "memprof"="notcold" }109; IR: attributes #[[COLD]] = { "memprof"="cold" }110 111!0 = !{i64 123}112!1 = !{i64 234}113!2 = !{i64 345}114!3 = !{i64 456}115!4 = !{!5, !7}116!5 = !{!6, !"notcold"}117!6 = !{i64 567, i64 456, i64 345, i64 123}118!7 = !{!8, !"cold"}119!8 = !{i64 567, i64 456, i64 345, i64 234}120!9 = !{i64 567}121!10 = !{!11, !13}122!11 = !{!12, !"notcold"}123!12 = !{i64 678, i64 891, i64 789, i64 912}124!13 = !{!14, !"cold"}125!14 = !{i64 678, i64 891, i64 789, i64 812}126!15 = !{i64 678}127!16 = !{i64 789}128!17 = !{i64 891}129!18 = !{i64 912}130!19 = !{i64 812}131