2020-03-09 18:02:35 +08:00
|
|
|
; RUN: llc -emit-call-site-info -mtriple aarch64-linux-gnu -debug-entry-values %s -o - -stop-before=finalize-isel | FileCheck %s
|
2019-10-08 17:43:05 +08:00
|
|
|
; Verify that Selection DAG knows how to recognize simple function parameter forwarding registers.
|
|
|
|
; Produced from:
|
|
|
|
; extern int fn1(int,int,int);
|
|
|
|
; int fn2(int a, int b, int c) {
|
|
|
|
; int local = fn1(a+b, c, 10);
|
|
|
|
; if (local > 10)
|
|
|
|
; return local + 10;
|
|
|
|
; return local;
|
|
|
|
; }
|
|
|
|
; clang -g -O2 -target aarch64-linux-gnu -S -emit-llvm %s
|
|
|
|
; CHECK: callSites:
|
|
|
|
; CHECK-NEXT: - { bb: {{.*}}, offset: {{.*}}, fwdArgRegs:
|
|
|
|
; CHECK-NEXT: - { arg: 0, reg: '$w0' }
|
|
|
|
; CHECK-NEXT: - { arg: 1, reg: '$w1' }
|
|
|
|
; CHECK-NEXT: - { arg: 2, reg: '$w2' } }
|
|
|
|
|
|
|
|
; ModuleID = 'call-site-info-output.c'
|
|
|
|
source_filename = "call-site-info-output.c"
|
|
|
|
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
|
|
|
|
target triple = "aarch64-unknown-linux-gnu"
|
|
|
|
|
|
|
|
; Function Attrs: nounwind
|
|
|
|
define dso_local i32 @fn2(i32 %a, i32 %b, i32 %c) local_unnamed_addr{
|
|
|
|
entry:
|
|
|
|
%add = add nsw i32 %b, %a
|
|
|
|
%call = tail call i32 @fn1(i32 %add, i32 %c, i32 10)
|
|
|
|
%cmp = icmp sgt i32 %call, 10
|
|
|
|
%add1 = add nsw i32 %call, 10
|
|
|
|
%retval.0 = select i1 %cmp, i32 %add1, i32 %call
|
|
|
|
ret i32 %retval.0
|
|
|
|
}
|
|
|
|
|
|
|
|
declare dso_local i32 @fn1(i32, i32, i32) local_unnamed_addr
|
|
|
|
|
|
|
|
; Function Attrs: nounwind readnone speculatable willreturn
|
|
|
|
declare void @llvm.dbg.value(metadata, metadata, metadata)
|
|
|
|
|
|
|
|
!llvm.ident = !{!0}
|
|
|
|
|
|
|
|
!0 = !{!"clang version 10.0.0"}
|