blob: 1186f27cbed0b08366701863e577684dfcba0255 [file] [edit]
# RUN: llc -march=hexagon -run-pass global-sched -o - %s | FileCheck %s
# CHECK: bb.7.b6:
--- |
target datalayout = "e-m:e-p:32:32:32-a:0-n16:32-i64:64:64-i32:32:32-i16:16:16-i1:8:8-f32:32:32-f64:64:64-v32:32:32-v64:64:64-v512:512:512-v1024:1024:1024-v2048:2048:2048"
target triple = "hexagon"
; Function Attrs: nounwind readnone speculatable
declare void @llvm.dbg.label(metadata) #0
define hidden fastcc i32* @f0(i32 %a0, i32* %a1, i32* %a2, i32* %a3) unnamed_addr #1 {
b0:
br i1 undef, label %b6, label %b1
b1: ; preds = %b4, %b0
%v0 = phi i32* [ null, %b4 ], [ %a2, %b0 ]
%v1 = tail call i32* @f1(i32* undef, i64 undef, i32 undef, i32 8) #2
%v2 = icmp eq i32* %v1, null
br i1 %v2, label %b5, label %b2
b2: ; preds = %b1
%v3 = icmp ult i32* %v0, %a2
br i1 %v3, label %b4, label %b3
b3: ; preds = %b2
tail call void @f2(i32* nonnull %v1) #2
br label %b6
b4: ; preds = %b2
%v4 = load i32, i32* undef, align 4
%v5 = icmp eq i32 %v4, 0
br i1 %v5, label %b6, label %b1
b5: ; preds = %b1
call void @llvm.dbg.label(metadata !8), !dbg !9
store i32 -5, i32* %a3, align 4
br label %b6
b6: ; preds = %b5, %b4, %b3, %b0
ret i32* undef
}
declare dso_local i32* @f1(i32*, i64, i32, i32) local_unnamed_addr #1
declare dso_local void @f2(i32*) local_unnamed_addr #1
attributes #0 = { nounwind readnone speculatable }
attributes #1 = { "use-soft-float"="false" }
attributes #2 = { nounwind }
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!3, !4}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, retainedTypes: !2, globals: !2, debugInfoForProfiling: true)
!1 = !DIFile(filename: "file.c", directory: "/test")
!2 = !{}
!3 = !{i32 2, !"Debug Info Version", i32 3}
!4 = !{i32 1, !"wchar_size", i32 4}
!5 = distinct !DISubprogram(name: "f0", scope: !1, file: !1, line: 230, type: !6, isLocal: false, isDefinition: true, scopeLine: 235, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !{})
!6 = !DISubroutineType(types: !7)
!7 = !{}
!8 = !DILabel(scope: !5, name: "failure", file: !1, line: 264)
!9 = !DILocation(line: 264, column: 1, scope: !5)
...
---
name: f0
tracksRegLiveness: true
fixedStack:
- { id: 0, size: 8, alignment: 8, offset: -16 }
- { id: 1, size: 8, alignment: 8, offset: -8 }
body: |
bb.0.b0:
successors: %bb.7(0x40000000), %bb.1(0x40000000); %bb.7(50.00%), %bb.1(50.00%)
liveins: $r2:0x00000001, $r3:0x00000001, $d8, $d9, $d8, $d9, $p0, $r0, $r4, $r16, $r17, $r18, $r19
frame-setup BUNDLE implicit-def $r29, implicit-def $r30, implicit killed $r29, implicit killed $framekey, implicit killed $framelimit, implicit $r30, implicit killed $r31, implicit $d8 {
$r29 = frame-setup S2_allocframe killed $r29, 16, implicit-def $r30, implicit killed $framekey, implicit killed $framelimit, implicit $r30, implicit killed $r31 :: (store 4 into stack)
S2_storerd_io internal $r29, -16, $d8 :: (store 8 into %fixed-stack.1)
}
BUNDLE implicit-def $pc, implicit killed $r29, implicit killed $d9, implicit undef $p0 {
S2_storerd_io killed $r29, 0, killed $d9 :: (store 8 into %fixed-stack.0)
J2_jumpt undef renamable $p0, %bb.7, implicit-def $pc
}
bb.1:
successors: %bb.2(0x80000000); %bb.2(100.00%)
liveins: $r0, $r2, $r3, $r4, $r16, $r17
BUNDLE implicit-def $d8, implicit-def $r16, implicit-def $r17, implicit-def $r18, implicit $r2, implicit $r3 {
$d8 = A2_combinew $r2, $r3
$r18 = A2_tfr $r2
}
bb.2.b1 (align 4):
successors: %bb.5(0x04000000), %bb.3(0x7c000000); %bb.5(3.12%), %bb.3(96.88%)
liveins: $r0, $r2, $r3, $r4, $r16, $r17, $r18
BUNDLE implicit-def $r5, implicit-def $pc, implicit-def $r31, implicit-def $r29, implicit-def $r0, implicit $r29, implicit undef $r0, implicit undef $d1, implicit undef $r4 {
$r5 = A2_tfrsi 8
J2_call @f1, hexagoncsr, implicit-def $pc, implicit-def $r31, implicit $r29, implicit undef $r0, implicit undef $d1, implicit undef $r4, implicit internal $r5, implicit-def $r29, implicit-def $r0
}
BUNDLE implicit-def dead $p0, implicit-def dead $pc, implicit $r0 {
renamable $p0 = C2_cmpeqi renamable $r0, 0
J2_jumptnew internal renamable $p0, %bb.5, implicit-def dead $pc
}
bb.3.b2:
successors: %bb.4(0x7c000000), %bb.6(0x04000000); %bb.4(96.88%), %bb.6(3.12%)
liveins: $r0, $r2, $r17, $r18, $r3, $r4, $r16
BUNDLE implicit-def dead $p0, implicit-def $pc, implicit $r17, implicit killed $r18 {
renamable $p0 = C2_cmpgtu renamable $r17, killed renamable $r18
J2_jumpfnew internal $p0, %bb.6, implicit-def $pc
}
bb.4.b4:
successors: %bb.7(0x04000000), %bb.2(0x7c000000); %bb.7(3.12%), %bb.2(96.88%)
liveins: $r2, $r0, $r3, $r4, $r16, $r17
BUNDLE implicit-def $r18, implicit-def $r2, implicit-def $pc, implicit killed undef $r2 {
renamable $r18 = A2_tfrsi 0
renamable $r2 = L2_loadri_io killed undef renamable $r2, 0 :: (load 4 from `i32* undef`)
J4_cmpeqi_f_jumpnv_t internal $r2, 0, %bb.2, implicit-def $pc
}
J2_jump %bb.7, implicit-def $pc
bb.5.b5:
successors: %bb.7(0x80000000); %bb.7(100.00%)
liveins: $r16
DBG_LABEL !8
BUNDLE implicit-def $pc, implicit killed $r16 {
S4_storeiri_io killed renamable $r16, 0, -5 :: (store 4 into %ir.a3)
J2_jump %bb.7, implicit-def $pc
}
bb.6.b3:
successors: %bb.7(0x80000000); %bb.7(100.00%)
liveins: $r0
J2_call @f2, hexagoncsr, implicit-def $pc, implicit-def $r31, implicit $r29, implicit $r0, implicit-def $r29
bb.7.b6:
BUNDLE implicit-def $d8, implicit-def $r16, implicit-def $r17, implicit-def $d9, implicit-def $r18, implicit-def $r19, implicit killed $r29 {
$d8 = L2_loadrd_io $r29, 8 :: (load 8 from %fixed-stack.1)
$d9 = L2_loadrd_io killed $r29, 0 :: (load 8 from %fixed-stack.0)
}
$d15 = L4_return killed $r30, implicit-def $pc, implicit-def $r29, implicit killed $framekey, implicit-def $pc, implicit killed $d8, implicit killed $d9
...