| # 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 |
| ... |