[Reland][Runtimes] Merge 'compile_commands.json' files from runtimes build (#116303)
[llvm-project.git] / llvm / test / CodeGen / PowerPC / pr45186.ll
blob41c79f90d7b4e75f5f95cb0489c78ed8a3cf753d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -ppc-asm-full-reg-names -mtriple=powerpc64-- -mattr=+vsx \
3 ; RUN:   -verify-machineinstrs < %s | FileCheck %s
4 %struct.anon = type { i64, i64 }
6 @d = local_unnamed_addr global %struct.anon zeroinitializer, align 8
8 ; Function Attrs: norecurse nounwind readonly
9 define i64 @e(ptr nocapture readonly %f) local_unnamed_addr #0 {
10 ; CHECK-LABEL: e:
11 ; CHECK:       # %bb.0: # %entry
12 ; CHECK-NEXT:    ld r3, 0(r3)
13 ; CHECK-NEXT:    blr
14 entry:
15   %0 = load i8, ptr %f, align 1
16   %conv = zext i8 %0 to i64
17   %shl = shl nuw i64 %conv, 56
18   %arrayidx1 = getelementptr inbounds i8, ptr %f, i64 1
19   %1 = load i8, ptr %arrayidx1, align 1
20   %conv2 = zext i8 %1 to i64
21   %shl3 = shl nuw nsw i64 %conv2, 48
22   %or = or i64 %shl3, %shl
23   %arrayidx4 = getelementptr inbounds i8, ptr %f, i64 2
24   %2 = load i8, ptr %arrayidx4, align 1
25   %conv5 = zext i8 %2 to i64
26   %shl6 = shl nuw nsw i64 %conv5, 40
27   %or7 = or i64 %or, %shl6
28   %arrayidx8 = getelementptr inbounds i8, ptr %f, i64 3
29   %3 = load i8, ptr %arrayidx8, align 1
30   %conv9 = zext i8 %3 to i64
31   %shl10 = shl nuw nsw i64 %conv9, 32
32   %or11 = or i64 %or7, %shl10
33   %arrayidx12 = getelementptr inbounds i8, ptr %f, i64 4
34   %4 = load i8, ptr %arrayidx12, align 1
35   %conv13 = zext i8 %4 to i64
36   %shl14 = shl nuw nsw i64 %conv13, 24
37   %or15 = or i64 %or11, %shl14
38   %arrayidx16 = getelementptr inbounds i8, ptr %f, i64 5
39   %5 = load i8, ptr %arrayidx16, align 1
40   %conv17 = zext i8 %5 to i64
41   %shl18 = shl nuw nsw i64 %conv17, 16
42   %or20 = or i64 %or15, %shl18
43   %arrayidx21 = getelementptr inbounds i8, ptr %f, i64 6
44   %6 = load i8, ptr %arrayidx21, align 1
45   %conv22 = zext i8 %6 to i64
46   %shl23 = shl nuw nsw i64 %conv22, 8
47   %or25 = or i64 %or20, %shl23
48   %arrayidx26 = getelementptr inbounds i8, ptr %f, i64 7
49   %7 = load i8, ptr %arrayidx26, align 1
50   %conv27 = zext i8 %7 to i64
51   %or28 = or i64 %or25, %conv27
52   ret i64 %or28
55 ; Function Attrs: nofree norecurse nounwind
56 define void @g() local_unnamed_addr #0 {
57 ; CHECK-LABEL: g:
58 ; CHECK:       # %bb.0: # %entry
59 ; CHECK-NEXT:    addis r3, r2, .LC0@toc@ha
60 ; CHECK-NEXT:    addis r4, r2, .LC1@toc@ha
61 ; CHECK-NEXT:    ld r3, .LC0@toc@l(r3)
62 ; CHECK-NEXT:    ld r4, .LC1@toc@l(r4)
63 ; CHECK-NEXT:    lxvd2x vs0, 0, r3
64 ; CHECK-NEXT:    stxvd2x vs0, 0, r4
65 ; CHECK-NEXT:    blr
66 entry:
67   %0 = load i8, ptr getelementptr inbounds (i8, ptr @g, i64 8), align 1
68   %conv.i = zext i8 %0 to i64
69   %shl.i = shl nuw i64 %conv.i, 56
70   %1 = load i8, ptr getelementptr (i8, ptr @g, i64 9), align 1
71   %conv2.i = zext i8 %1 to i64
72   %shl3.i = shl nuw nsw i64 %conv2.i, 48
73   %or.i = or i64 %shl3.i, %shl.i
74   %2 = load i8, ptr getelementptr (i8, ptr @g, i64 10), align 1
75   %conv5.i = zext i8 %2 to i64
76   %shl6.i = shl nuw nsw i64 %conv5.i, 40
77   %or7.i = or i64 %or.i, %shl6.i
78   %3 = load i8, ptr getelementptr (i8, ptr @g, i64 11), align 1
79   %conv9.i = zext i8 %3 to i64
80   %shl10.i = shl nuw nsw i64 %conv9.i, 32
81   %or11.i = or i64 %or7.i, %shl10.i
82   %4 = load i8, ptr getelementptr (i8, ptr @g, i64 12), align 1
83   %conv13.i = zext i8 %4 to i64
84   %shl14.i = shl nuw nsw i64 %conv13.i, 24
85   %or15.i = or i64 %or11.i, %shl14.i
86   %5 = load i8, ptr getelementptr (i8, ptr @g, i64 13), align 1
87   %conv17.i = zext i8 %5 to i64
88   %shl18.i = shl nuw nsw i64 %conv17.i, 16
89   %or20.i = or i64 %or15.i, %shl18.i
90   %6 = load i8, ptr getelementptr (i8, ptr @g, i64 14), align 1
91   %conv22.i = zext i8 %6 to i64
92   %shl23.i = shl nuw nsw i64 %conv22.i, 8
93   %or25.i = or i64 %or20.i, %shl23.i
94   %7 = load i8, ptr getelementptr (i8, ptr @g, i64 15), align 1
95   %conv27.i = zext i8 %7 to i64
96   %or28.i = or i64 %or25.i, %conv27.i
97   store i64 %or28.i, ptr getelementptr inbounds (%struct.anon, ptr @d, i64 0, i32 1), align 8
98   %8 = load i8, ptr @g, align 1
99   %conv.i2 = zext i8 %8 to i64
100   %shl.i3 = shl nuw i64 %conv.i2, 56
101   %9 = load i8, ptr getelementptr (i8, ptr @g, i64 1), align 1
102   %conv2.i4 = zext i8 %9 to i64
103   %shl3.i5 = shl nuw nsw i64 %conv2.i4, 48
104   %or.i6 = or i64 %shl3.i5, %shl.i3
105   %10 = load i8, ptr getelementptr (i8, ptr @g, i64 2), align 1
106   %conv5.i7 = zext i8 %10 to i64
107   %shl6.i8 = shl nuw nsw i64 %conv5.i7, 40
108   %or7.i9 = or i64 %or.i6, %shl6.i8
109   %11 = load i8, ptr getelementptr (i8, ptr @g, i64 3), align 1
110   %conv9.i10 = zext i8 %11 to i64
111   %shl10.i11 = shl nuw nsw i64 %conv9.i10, 32
112   %or11.i12 = or i64 %or7.i9, %shl10.i11
113   %12 = load i8, ptr getelementptr (i8, ptr @g, i64 4), align 1
114   %conv13.i13 = zext i8 %12 to i64
115   %shl14.i14 = shl nuw nsw i64 %conv13.i13, 24
116   %or15.i15 = or i64 %or11.i12, %shl14.i14
117   %13 = load i8, ptr getelementptr (i8, ptr @g, i64 5), align 1
118   %conv17.i16 = zext i8 %13 to i64
119   %shl18.i17 = shl nuw nsw i64 %conv17.i16, 16
120   %or20.i18 = or i64 %or15.i15, %shl18.i17
121   %14 = load i8, ptr getelementptr (i8, ptr @g, i64 6), align 1
122   %conv22.i19 = zext i8 %14 to i64
123   %shl23.i20 = shl nuw nsw i64 %conv22.i19, 8
124   %or25.i21 = or i64 %or20.i18, %shl23.i20
125   %15 = load i8, ptr getelementptr (i8, ptr @g, i64 7), align 1
126   %conv27.i22 = zext i8 %15 to i64
127   %or28.i23 = or i64 %or25.i21, %conv27.i22
128   store i64 %or28.i23, ptr @d, align 8
129   ret void
132 attributes #0 = { nounwind }