1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mcpu=pwr8 -ppc-asm-full-reg-names \
; RUN: -mtriple=powerpc64le-unknown-unknown -verify-machineinstrs < %s | \
; RUN: FileCheck %s
%0 = type { [0 x i64], %1, [0 x i64], { i64, i8* }, [0 x i64] }
%1 = type { [0 x i64], %2, [0 x i64], i64*, [0 x i64] }
%2 = type { [0 x i64], %3, [0 x i64], %4, [0 x i8], i8, [7 x i8] }
%3 = type { [0 x i64], { i64*, i64* }, [0 x i64], i64*, [0 x i8], i8, [7 x i8] }
%4 = type { [0 x i64], { i64*, i64* }, [0 x i64], %5, [0 x i64] }
%5 = type { [0 x i64], { i64*, i64* }, [0 x i64], i64*, [0 x i64] }
%6 = type { [0 x i64], i64, [2 x i64] }
%7 = type { [0 x i64], { i64*, i64* }, [0 x i64], %8, [0 x i64] }
%8 = type { [0 x i64], %9*, [0 x i32], { i32, i32 }, [0 x i8], i8, [7 x i8] }
%9 = type { [0 x i64], i64, [0 x i64], [0 x %10], [0 x i8], %11 }
%10 = type { [0 x i8], i8, [31 x i8] }
%11 = type {}
%12 = type { [0 x i64], %13, [0 x i32], i32, [0 x i32], i32, [0 x i32] }
%13 = type { [0 x i8], i8, [23 x i8] }
%14 = type { [0 x i64], i64, [0 x i64], %15, [0 x i32], i32, [0 x i8], i8, [0 x i8], { i8, i8 }, [0 x i8], { i8, i8 }, [0 x i8], { i8, i8 }, [0 x i8], { i8, i8 }, [0 x i8], { i8, i8 }, [0 x i8], { i8, i8 }, [0 x i8], { i8, i8 }, [0 x i8], { i8, i8 }, [0 x i8], { i8, i8 }, [0 x i8], { i8, i8 }, [7 x i8] }
%15 = type { [0 x i64], { i64*, i64 }, [0 x i64], i64, [0 x i64] }
%16 = type { [0 x i64], %17, [0 x i64], %18, [0 x i64], %19, [0 x i64], i64, [0 x i8], { i8, i8 }, [6 x i8] }
%17 = type { [0 x i32], i32, [27 x i32] }
%18 = type { [0 x i64], i64, [6 x i64] }
%19 = type { [0 x i8], i8, [103 x i8] }
%20 = type { [0 x i64], { i64*, i64* }*, [0 x i64], %7**, [0 x i64], i64**, [0 x i64] }
%21 = type { [0 x i64], i64, [0 x i64], void (i32, %21*)*, [0 x i64], [2 x i64], [0 x i64] }
%22 = type { [0 x i8] }
@var = external dso_local unnamed_addr constant <{ i8*, [8 x i8], i8*, [16 x i8] }>, align 8
declare dso_local fastcc { i64*, i8* } @test2(%0**) unnamed_addr
define void @test(%6* %arg, %7* %arg1, %12* %arg2) unnamed_addr personality i32 (i32, i32, i64, %21*, %22*)* @personality {
; CHECK-LABEL: test:
; CHECK: .cfi_personality 148, DW.ref.personality
; CHECK-NEXT: .cfi_lsda 20, .Lexception0
; CHECK-NEXT: .Lfunc_gep0:
; CHECK-NEXT: addis r2, r12, .TOC.-.Lfunc_gep0@ha
; CHECK-NEXT: addi r2, r2, .TOC.-.Lfunc_gep0@l
; CHECK-NEXT: .Lfunc_lep0:
; CHECK-NEXT: .localentry test, .Lfunc_lep0-.Lfunc_gep0
; CHECK-NEXT: # %bb.0: # %bb
; CHECK-NEXT: mflr r0
; CHECK-NEXT: std r0, 16(r1)
; CHECK-NEXT: stdu r1, -32(r1)
; CHECK-NEXT: .cfi_def_cfa_offset 32
; CHECK-NEXT: .cfi_offset lr, 16
; CHECK-NEXT: li r3, 0
; CHECK-NEXT: # %bb.1: # %bb9
; CHECK-NEXT: bl test5
; CHECK-NEXT: nop
; CHECK-NEXT: rlwinm r3, r3, 8, 16, 23
; CHECK-NEXT: # %bb.2: # %bb12
; CHECK-NEXT: clrldi r4, r3, 32
; CHECK-NEXT: bl test3
; CHECK-NEXT: nop
; CHECK-NEXT: addi r1, r1, 32
; CHECK-NEXT: ld r0, 16(r1)
; CHECK-NEXT: mtlr r0
; CHECK-NEXT: blr
bb:
switch i64 undef, label %bb21 [
i64 3, label %bb3
]
bb3: ; preds = %bb
switch i3 undef, label %bb4 [
i3 0, label %bb9
i3 1, label %bb12
]
bb4: ; preds = %bb3
unreachable
bb5: ; No predecessors!
br label %bb12
bb6: ; No predecessors!
br label %bb12
bb7: ; No predecessors!
br label %bb12
bb8: ; No predecessors!
br label %bb12
bb9: ; preds = %bb3
%tmp = call i8 @test5(%14* noalias nonnull readonly align 8 dereferenceable(64) undef), !range !0
%tmp10 = zext i8 %tmp to i24
%tmp11 = shl nuw nsw i24 %tmp10, 8
br label %bb12
bb12: ; preds = %bb9, %bb8, %bb7, %bb6, %bb5, %bb3
%tmp13 = phi i24 [ 1024, %bb8 ], [ 768, %bb7 ], [ 512, %bb6 ], [ 256, %bb5 ], [ %tmp11, %bb9 ], [ 0, %bb3 ]
%tmp14 = call fastcc align 8 dereferenceable(288) %16* @test3(%20* noalias nonnull readonly align 8 dereferenceable(24) undef, i24 %tmp13)
br label %bb22
bb15: ; No predecessors!
%tmp16 = invoke fastcc { i64*, i8* } @test2(%0** nonnull align 8 dereferenceable(8) undef)
to label %bb17 unwind label %bb18
bb17: ; preds = %bb15
invoke void @test4({ [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }* noalias readonly align 8 dereferenceable(40) bitcast (<{ i8*, [8 x i8], i8*, [16 x i8] }>* @var to { [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }*))
to label %bb23 unwind label %bb25
bb18: ; preds = %bb15
%tmp19 = landingpad { i8*, i32 }
cleanup
resume { i8*, i32 } undef
bb20: ; No predecessors!
invoke void @test4({ [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }* noalias readonly align 8 dereferenceable(40) bitcast (<{ i8*, [8 x i8], i8*, [16 x i8] }>* @var to { [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }*))
to label %bb24 unwind label %bb25
bb21: ; preds = %bb
unreachable
bb22: ; preds = %bb12
ret void
bb23: ; preds = %bb17
unreachable
bb24: ; preds = %bb20
unreachable
bb25: ; preds = %bb20, %bb17
%tmp26 = landingpad { i8*, i32 }
cleanup
resume { i8*, i32 } undef
}
declare dso_local fastcc %16* @test3(%20*, i24) unnamed_addr
declare i32 @personality(i32, i32, i64, %21*, %22*) unnamed_addr
declare void @test4({ [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }*) unnamed_addr
declare i8 @test5(%14*) unnamed_addr
!0 = !{i8 0, i8 5}
|