Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
test/CodeGen/X86/frame-lowering-debug-intrinsic.ll
; Test ensuring debug intrinsics do not affect generated function prologue. | ; Test ensuring debug intrinsics do not affect generated function prologue. | ||||
; | ; | ||||
; RUN: llc -O1 -mtriple=x86_64-unknown-unknown -o - %s | FileCheck %s | ; RUN: llc -O1 -mtriple=x86_64-unknown-unknown -o - %s | FileCheck %s | ||||
define i64 @fn1NoDebug(i64 %a) { | define i64 @fn1NoDebug(i64 %a) { | ||||
%call = call i64 @fn(i64 %a, i64 0) | %call = call i64 @fn(i64 %a, i64 0) | ||||
ret i64 %call | ret i64 %call | ||||
} | } | ||||
; CHECK-LABEL: fn1NoDebug | ; CHECK-LABEL: fn1NoDebug | ||||
; CHECK: popq %rcx | ; CHECK: popq %rcx | ||||
; CHECK-NEXT: : | |||||
; CHECK-NEXT: .cfi_def_cfa_offset 8 | |||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
define i64 @fn1WithDebug(i64 %a) !dbg !4 { | define i64 @fn1WithDebug(i64 %a) !dbg !4 { | ||||
%call = call i64 @fn(i64 %a, i64 0) | %call = call i64 @fn(i64 %a, i64 0) | ||||
tail call void @llvm.dbg.value(metadata i64 %call, i64 0, metadata !5, metadata !6), !dbg !7 | tail call void @llvm.dbg.value(metadata i64 %call, i64 0, metadata !5, metadata !6), !dbg !7 | ||||
ret i64 %call | ret i64 %call | ||||
} | } | ||||
; CHECK-LABEL: fn1WithDebug | ; CHECK-LABEL: fn1WithDebug | ||||
; CHECK: popq %rcx | ; CHECK: popq %rcx | ||||
; CHECK-NEXT: : | |||||
; CHECK-NEXT: .cfi_def_cfa_offset 8 | |||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
%struct.Buffer = type { i8, [63 x i8] } | %struct.Buffer = type { i8, [63 x i8] } | ||||
define void @fn2NoDebug(%struct.Buffer* byval align 64 %p1) { | define void @fn2NoDebug(%struct.Buffer* byval align 64 %p1) { | ||||
ret void | ret void | ||||
} | } | ||||
; CHECK-LABEL: fn2NoDebug | ; CHECK-LABEL: fn2NoDebug | ||||
; CHECK: and | ; CHECK: and | ||||
; CHECK-NOT: add | ; CHECK-NOT: add | ||||
; CHECK-NOT: sub | ; CHECK-NOT: sub | ||||
; CHECK: mov | ; CHECK: mov | ||||
; CHECK-NEXT: pop | ; CHECK-NEXT: pop | ||||
; CHECK-NEXT: : | |||||
; CHECK-NEXT: .cfi_def_cfa %rsp, 8 | |||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
define void @fn2WithDebug(%struct.Buffer* byval align 64 %p1) !dbg !8 { | define void @fn2WithDebug(%struct.Buffer* byval align 64 %p1) !dbg !8 { | ||||
call void @llvm.dbg.declare(metadata %struct.Buffer* %p1, metadata !9, metadata !6), !dbg !10 | call void @llvm.dbg.declare(metadata %struct.Buffer* %p1, metadata !9, metadata !6), !dbg !10 | ||||
ret void | ret void | ||||
} | } | ||||
; CHECK-LABEL: fn2WithDebug | ; CHECK-LABEL: fn2WithDebug | ||||
; CHECK: and | ; CHECK: and | ||||
; CHECK-NOT: add | ; CHECK-NOT: add | ||||
; CHECK-NOT: sub | ; CHECK-NOT: sub | ||||
; CHECK: mov | ; CHECK: mov | ||||
; CHECK-NEXT: pop | ; CHECK-NEXT: pop | ||||
; CHECK-NEXT: : | |||||
; CHECK-NEXT: .cfi_def_cfa %rsp, 8 | |||||
; CHECK-NEXT: ret | ; CHECK-NEXT: ret | ||||
declare i64 @fn(i64, i64) | declare i64 @fn(i64, i64) | ||||
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) | declare void @llvm.dbg.value(metadata, i64, metadata, metadata) | ||||
declare void @llvm.dbg.declare(metadata, metadata, metadata) | declare void @llvm.dbg.declare(metadata, metadata, metadata) | ||||
!llvm.dbg.cu = !{!0} | !llvm.dbg.cu = !{!0} | ||||
Show All 13 Lines |