[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / PowerPC / peephole-replaceInstr-after-eliminate-extsw.mir
blob088bdb8f241f307886740c6cd2a5c0f1d3b0603d
1 # RUN: llc -run-pass=ppc-mi-peepholes  -mtriple powerpc64-ibm-aix-xcoff %s -o - \
2 # RUN:   -verify-machineinstrs | FileCheck %s
4 --- |
5   ; ModuleID = '71030_tmp_reduce-O2.ll'
6   source_filename = "71030_tmp_reduce.c"
7   target datalayout = "E-m:a-Fi64-i64:64-n32:64-S128-v256:256:256-v512:512:512"
8   target triple = "powerpc64-ibm-aix-xcoff"
10   @globalShortValue = local_unnamed_addr global i16 1, align 2
11   @globalCharValue = local_unnamed_addr global i8 0, align 1
12   @largeNumber = local_unnamed_addr global i64 -3664682556119382352, align 8
13   @someIntValue = local_unnamed_addr global i32 378441747, align 4
14   @unitIncrement = local_unnamed_addr global i32 1, align 4
15   @computedResultUll = local_unnamed_addr global i64 0, align 8
16   @computedResultShort = local_unnamed_addr global i16 0, align 2
17   @computedResultUChar = local_unnamed_addr global i8 0, align 1
18   @computedResultBool = local_unnamed_addr global i8 0, align 1
19   @computedResultChar = local_unnamed_addr global i8 0, align 1
20   @shortArray = local_unnamed_addr global [8 x i16] zeroinitializer, align 2
21   @charArray = local_unnamed_addr global [8 x [8 x [8 x i8]]] zeroinitializer, align 1
22   @longArray = local_unnamed_addr global [8 x [8 x i64]] zeroinitializer, align 8
23   @resultArray = local_unnamed_addr global [8 x [8 x i16]] zeroinitializer, align 2
24   @ullArray = local_unnamed_addr global [8 x i64] zeroinitializer, align 8
25   @intArray = local_unnamed_addr global [8 x [8 x [8 x i32]]] zeroinitializer, align 4
26   @_MergedGlobals = private constant <{ [29 x i8], [46 x i8] }> <{ [29 x i8] c"Computed Result (ULL): %llx\0A\00", [46 x i8] c"Computed convert largeNumber&&&& (ULL): %llx\0A\00" }>, align 1
28   @.str.1 = private alias [29 x i8], ptr @_MergedGlobals
29   @.str = private alias [46 x i8], getelementptr inbounds (<{ [29 x i8], [46 x i8] }>, ptr @_MergedGlobals, i32 0, i32 1)
31   ; Function Attrs: nofree nounwind
32   define noundef signext i32 @main() local_unnamed_addr #0 {
33   entry:
34     store i16 -1, ptr getelementptr inbounds ([8 x i16], ptr @shortArray, i64 0, i64 3), align 2, !tbaa !3
35     %0 = load i64, ptr @largeNumber, align 8, !tbaa !7
36     %conv = trunc i64 %0 to i32
37     %sext = shl i32 %conv, 16
38     %conv1 = ashr exact i32 %sext, 16
39     %sub = add nsw i32 %conv1, -1705
40     %call = tail call signext i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) getelementptr inbounds (<{ [29 x i8], [46 x i8] }>, ptr @_MergedGlobals, i32 0, i32 1), i32 noundef signext %sub)
41     %1 = load i16, ptr @globalShortValue, align 2, !tbaa !3
42     %2 = load i32, ptr @someIntValue, align 4, !tbaa !9
43     %3 = trunc i32 %2 to i8
44     %conv20 = add i8 %3, -19
45     %4 = load i32, ptr @unitIncrement, align 4
46     %5 = load i8, ptr @globalCharValue, align 1
47     %conv45 = sext i8 %5 to i32
48     %computedResultShort.promoted = load i16, ptr @computedResultShort, align 2, !tbaa !3
49     %resultArray.promoted = load i16, ptr @resultArray, align 2, !tbaa !3
50     %computedResultChar.promoted149 = load i8, ptr @computedResultChar, align 1, !tbaa !11
51     %6 = sext i8 %conv20 to i64
52     %7 = load i16, ptr getelementptr inbounds ([8 x i16], ptr @shortArray, i64 0, i64 3), align 2, !tbaa !3
53     %8 = load i16, ptr getelementptr inbounds ([8 x i16], ptr @shortArray, i64 0, i64 2), align 2
54     %conv46 = sext i16 %8 to i32
55     %cond54 = tail call i32 @llvm.smin.i32(i32 %conv45, i32 %conv46)
56     %tobool = icmp ne i32 %cond54, 0
57     %conv55 = zext i1 %tobool to i8
58     %9 = load i64, ptr getelementptr inbounds ([8 x i64], ptr @ullArray, i64 0, i64 3), align 8
59     %tobool72 = icmp ne i64 %9, 0
60     %frombool = zext i1 %tobool72 to i8
61     %smax = tail call i64 @llvm.smax.i64(i64 %6, i64 4)
62     %10 = add nuw nsw i64 %smax, 3
63     %11 = sub i64 %10, %6
64     %12 = lshr i64 %11, 2
65     %13 = add nuw nsw i64 %12, 1
66     %n.vec = and i64 %13, 9223372036854775806
67     %14 = shl i64 %n.vec, 2
68     %ind.end = add i64 %14, %6
69     %15 = shl i64 %6, 2
70     %16 = shl i64 %6, 3
71     %17 = add nsw i64 %16, -64
72     %scevgep30 = getelementptr i8, ptr @longArray, i64 %17
73     %18 = add nsw i64 %15, 64
74     %scevgep31 = getelementptr i8, ptr @intArray, i64 %18
75     %19 = lshr i64 %13, 1
76     %20 = shl nuw nsw i64 %19, 1
77     %21 = add nsw i64 %20, -2
78     %22 = lshr i64 %21, 1
79     %23 = add nuw i64 %22, 1
80     br label %for.body16
82   for.cond.cleanup15:                               ; preds = %for.cond.cleanup25
83     %24 = tail call i16 @llvm.smin.i16(i16 %1, i16 %7)
84     %conv11.le = sext i16 %24 to i64
85     store i64 %conv11.le, ptr @computedResultUll, align 8, !tbaa !7
86     %call97 = tail call signext i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @_MergedGlobals, i64 noundef %conv11.le)
87     ret i32 0
89   for.body16:                                       ; preds = %for.cond.cleanup25, %entry
90     %lsr.iv29 = phi i32 [ %lsr.iv.next, %for.cond.cleanup25 ], [ 8, %entry ]
91     %conv36.lcssa132140 = phi i16 [ %computedResultShort.promoted, %entry ], [ %conv36.lcssa131, %for.cond.cleanup25 ]
92     %and.lcssa135139 = phi i16 [ %resultArray.promoted, %entry ], [ %and.lcssa134, %for.cond.cleanup25 ]
93     %conv81118.lcssa.lcssa137138 = phi i8 [ %computedResultChar.promoted149, %entry ], [ %conv81118.lcssa.lcssa136, %for.cond.cleanup25 ]
94     %25 = icmp slt i8 %conv20, 8
95     br i1 %25, label %for.body31.lr.ph, label %for.cond.cleanup25
97   for.body31.lr.ph:                                 ; preds = %for.body16
98     %26 = icmp ult i64 %11, 4
99     store i8 %conv55, ptr @computedResultUChar, align 1, !tbaa !11
100     br i1 %26, label %for.body31.preheader, label %vector.body.preheader
102   vector.body.preheader:                            ; preds = %for.body31.lr.ph
103     call void @llvm.set.loop.iterations.i64(i64 %23)
104     br label %vector.body
106   vector.body:                                      ; preds = %vector.body.preheader, %vector.body
107     %vec.phi = phi i16 [ %44, %vector.body ], [ %conv36.lcssa132140, %vector.body.preheader ]
108     %vec.phi159 = phi i16 [ %45, %vector.body ], [ 0, %vector.body.preheader ]
109     %vec.phi160 = phi i16 [ %46, %vector.body ], [ %and.lcssa135139, %vector.body.preheader ]
110     %vec.phi161 = phi i16 [ %47, %vector.body ], [ -1, %vector.body.preheader ]
111     %vec.phi162 = phi i8 [ %48, %vector.body ], [ %conv81118.lcssa.lcssa137138, %vector.body.preheader ]
112     %vec.phi163 = phi i8 [ %49, %vector.body ], [ 0, %vector.body.preheader ]
113     %27 = phi ptr [ %scevgep30, %vector.body.preheader ], [ %31, %vector.body ]
114     %28 = phi ptr [ %scevgep31, %vector.body.preheader ], [ %29, %vector.body ]
115     %29 = getelementptr i8, ptr %28, i64 32
116     %30 = getelementptr i8, ptr %29, i64 16
117     %31 = getelementptr i8, ptr %27, i64 64
118     %32 = getelementptr i8, ptr %31, i64 32
119     %33 = trunc i32 %4 to i16
120     %34 = load i64, ptr %31, align 8, !tbaa !7
121     %35 = load i64, ptr %32, align 8, !tbaa !7
122     %36 = trunc i64 %34 to i16
123     %37 = trunc i64 %35 to i16
124     %38 = load i32, ptr %29, align 4, !tbaa !9
125     %39 = load i32, ptr %30, align 4, !tbaa !9
126     %40 = trunc i32 %38 to i8
127     %41 = trunc i32 %39 to i8
128     %42 = mul i8 %40, -6
129     %43 = mul i8 %41, -6
130     %44 = sub i16 %vec.phi, %33
131     %45 = sub i16 %vec.phi159, %33
132     %46 = and i16 %vec.phi160, %36
133     %47 = and i16 %vec.phi161, %37
134     %48 = add i8 %42, %vec.phi162
135     %49 = add i8 %43, %vec.phi163
136     %50 = call i1 @llvm.loop.decrement.i64(i64 1)
137     br i1 %50, label %vector.body, label %middle.block, !llvm.loop !12
139   middle.block:                                     ; preds = %vector.body
140     %51 = icmp eq i64 %13, %n.vec
141     %bin.rdx = add i16 %45, %44
142     %bin.rdx164 = and i16 %47, %46
143     %bin.rdx165 = add i8 %49, %48
144     br i1 %51, label %for.cond21.for.cond.cleanup25_crit_edge, label %for.body31.preheader
146   for.body31.preheader:                             ; preds = %middle.block, %for.body31.lr.ph
147     %indvars.iv.ph = phi i64 [ %6, %for.body31.lr.ph ], [ %ind.end, %middle.block ]
148     %conv36121128.ph = phi i16 [ %conv36.lcssa132140, %for.body31.lr.ph ], [ %bin.rdx, %middle.block ]
149     %and122127.ph = phi i16 [ %and.lcssa135139, %for.body31.lr.ph ], [ %bin.rdx164, %middle.block ]
150     %conv81118.lcssa124126.ph = phi i8 [ %conv81118.lcssa.lcssa137138, %for.body31.lr.ph ], [ %bin.rdx165, %middle.block ]
151     %52 = shl i64 %indvars.iv.ph, 2
152     %53 = shl i64 %indvars.iv.ph, 3
153     %scevgep = getelementptr i8, ptr getelementptr ([8 x [8 x i64]], ptr @longArray, i64 -1, i64 7, i64 4), i64 %53
154     %scevgep32 = getelementptr i8, ptr getelementptr inbounds ([8 x [8 x [8 x i32]]], ptr @intArray, i64 0, i64 0, i64 2, i64 4), i64 %52
155     %smax33 = call i64 @llvm.smax.i64(i64 %indvars.iv.ph, i64 4)
156     %54 = add i64 %smax33, 3
157     %55 = sub i64 %54, %indvars.iv.ph
158     %56 = lshr i64 %55, 2
159     %57 = add nuw nsw i64 %56, 1
160     call void @llvm.set.loop.iterations.i64(i64 %57)
161     br label %for.body31
163   for.cond21.for.cond.cleanup25_crit_edge:          ; preds = %for.body31, %middle.block
164     %conv36.lcssa = phi i16 [ %bin.rdx, %middle.block ], [ %conv36, %for.body31 ]
165     %and.lcssa = phi i16 [ %bin.rdx164, %middle.block ], [ %and, %for.body31 ]
166     %.lcssa = phi i8 [ %bin.rdx165, %middle.block ], [ %67, %for.body31 ]
167     %58 = trunc i16 %1 to i8
168     store i16 %conv36.lcssa, ptr @computedResultShort, align 2, !tbaa !3
169     store i8 %58, ptr getelementptr inbounds ([8 x [8 x [8 x i8]]], ptr @charArray, i64 0, i64 2, i64 0, i64 3), align 1, !tbaa !11
170     store i16 %and.lcssa, ptr @resultArray, align 2, !tbaa !3
171     store i8 %frombool, ptr @computedResultBool, align 1, !tbaa !16
172     store i8 %.lcssa, ptr @computedResultChar, align 1, !tbaa !11
173     br label %for.cond.cleanup25
175   for.cond.cleanup25:                               ; preds = %for.cond21.for.cond.cleanup25_crit_edge, %for.body16
176     %conv81118.lcssa.lcssa136 = phi i8 [ %.lcssa, %for.cond21.for.cond.cleanup25_crit_edge ], [ %conv81118.lcssa.lcssa137138, %for.body16 ]
177     %and.lcssa134 = phi i16 [ %and.lcssa, %for.cond21.for.cond.cleanup25_crit_edge ], [ %and.lcssa135139, %for.body16 ]
178     %conv36.lcssa131 = phi i16 [ %conv36.lcssa, %for.cond21.for.cond.cleanup25_crit_edge ], [ %conv36.lcssa132140, %for.body16 ]
179     %lsr.iv.next = add nsw i32 %lsr.iv29, -1
180     %exitcond.not = icmp eq i32 %lsr.iv.next, 0
181     br i1 %exitcond.not, label %for.cond.cleanup15, label %for.body16, !llvm.loop !18
183   for.body31:                                       ; preds = %for.body31, %for.body31.preheader
184     %conv36121128 = phi i16 [ %conv36, %for.body31 ], [ %conv36121128.ph, %for.body31.preheader ]
185     %and122127 = phi i16 [ %and, %for.body31 ], [ %and122127.ph, %for.body31.preheader ]
186     %conv81118.lcssa124126 = phi i8 [ %67, %for.body31 ], [ %conv81118.lcssa124126.ph, %for.body31.preheader ]
187     %59 = phi ptr [ %scevgep, %for.body31.preheader ], [ %62, %for.body31 ]
188     %60 = phi ptr [ %scevgep32, %for.body31.preheader ], [ %61, %for.body31 ]
189     %61 = getelementptr i8, ptr %60, i64 16
190     %62 = getelementptr i8, ptr %59, i64 32
191     %63 = trunc i32 %4 to i16
192     %64 = load i64, ptr %62, align 8, !tbaa !7
193     %conv61 = trunc i64 %64 to i16
194     %65 = load i32, ptr %61, align 4, !tbaa !9
195     %66 = trunc i32 %65 to i8
196     %.neg = mul i8 %66, -6
197     %conv36 = sub i16 %conv36121128, %63
198     %and = and i16 %and122127, %conv61
199     %67 = add i8 %.neg, %conv81118.lcssa124126
200     %68 = call i1 @llvm.loop.decrement.i64(i64 1)
201     br i1 %68, label %for.body31, label %for.cond21.for.cond.cleanup25_crit_edge, !llvm.loop !19
202   }
204   ; Function Attrs: nofree nounwind
205   declare noundef signext i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #0
207   ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
208   declare i32 @llvm.smin.i32(i32, i32) #1
210   ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
211   declare i16 @llvm.smin.i16(i16, i16) #1
213   ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
214   declare i64 @llvm.smax.i64(i64, i64) #1
216   ; Function Attrs: nocallback noduplicate nofree nosync nounwind willreturn
217   declare void @llvm.set.loop.iterations.i64(i64) #2
219   ; Function Attrs: nocallback noduplicate nofree nosync nounwind willreturn
220   declare i1 @llvm.loop.decrement.i64(i64) #2
222   attributes #0 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="pwr7" "target-features"="+altivec,+bpermd,+extdiv,+isa-v206-instructions,+vsx,-aix-small-local-exec-tls,-crbits,-crypto,-direct-move,-htm,-isa-v207-instructions,-isa-v30-instructions,-power8-vector,-power9-vector,-privileged,-quadword-atomics,-rop-protect,-spe" }
223   attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
224   attributes #2 = { nocallback noduplicate nofree nosync nounwind willreturn }
226   !llvm.module.flags = !{!0, !1}
227   !llvm.ident = !{!2}
229   !0 = !{i32 1, !"wchar_size", i32 4}
230   !1 = !{i32 8, !"PIC Level", i32 2}
231   !2 = !{!"IBM Open XL C/C++ for AIX 17.1.3 (5725-C72, 5765-J18), version 17.1.3.0, clang version 19.0.0git"}
232   !3 = !{!4, !4, i64 0}
233   !4 = !{!"short", !5, i64 0}
234   !5 = !{!"omnipotent char", !6, i64 0}
235   !6 = !{!"Simple C/C++ TBAA"}
236   !7 = !{!8, !8, i64 0}
237   !8 = !{!"long long", !5, i64 0}
238   !9 = !{!10, !10, i64 0}
239   !10 = !{!"int", !5, i64 0}
240   !11 = !{!5, !5, i64 0}
241   !12 = distinct !{!12, !13, !14, !15}
242   !13 = !{!"llvm.loop.mustprogress"}
243   !14 = !{!"llvm.loop.isvectorized", i32 1}
244   !15 = !{!"llvm.loop.unroll.runtime.disable"}
245   !16 = !{!17, !17, i64 0}
246   !17 = !{!"_Bool", !5, i64 0}
247   !18 = distinct !{!18, !13}
248   !19 = distinct !{!19, !13, !14}
252 name:            main
253 alignment:       16
254 exposesReturnsTwice: false
255 legalized:       false
256 regBankSelected: false
257 selected:        false
258 failedISel:      false
259 tracksRegLiveness: true
260 hasWinCFI:       false
261 callsEHReturn:   false
262 callsUnwindInit: false
263 hasEHCatchret:   false
264 hasEHScopes:     false
265 hasEHFunclets:   false
266 isOutlined:      false
267 debugInstrRef:   false
268 failsVerification: false
269 tracksDebugUserValues: false
270 registers:
271   - { id: 0, class: gprc, preferred-register: '' }
272   - { id: 1, class: gprc, preferred-register: '' }
273   - { id: 2, class: gprc, preferred-register: '' }
274   - { id: 3, class: gprc, preferred-register: '' }
275   - { id: 4, class: gprc, preferred-register: '' }
276   - { id: 5, class: gprc, preferred-register: '' }
277   - { id: 6, class: g8rc_and_g8rc_nox0, preferred-register: '' }
278   - { id: 7, class: gprc, preferred-register: '' }
279   - { id: 8, class: gprc, preferred-register: '' }
280   - { id: 9, class: gprc, preferred-register: '' }
281   - { id: 10, class: g8rc, preferred-register: '' }
282   - { id: 11, class: g8rc, preferred-register: '' }
283   - { id: 12, class: g8rc_and_g8rc_nox0, preferred-register: '' }
284   - { id: 13, class: g8rc, preferred-register: '' }
285   - { id: 14, class: g8rc, preferred-register: '' }
286   - { id: 15, class: g8rc, preferred-register: '' }
287   - { id: 16, class: g8rc, preferred-register: '' }
288   - { id: 17, class: gprc_and_gprc_nor0, preferred-register: '' }
289   - { id: 18, class: gprc, preferred-register: '' }
290   - { id: 19, class: gprc, preferred-register: '' }
291   - { id: 20, class: gprc, preferred-register: '' }
292   - { id: 21, class: gprc, preferred-register: '' }
293   - { id: 22, class: gprc, preferred-register: '' }
294   - { id: 23, class: gprc, preferred-register: '' }
295   - { id: 24, class: gprc, preferred-register: '' }
296   - { id: 25, class: gprc, preferred-register: '' }
297   - { id: 26, class: gprc, preferred-register: '' }
298   - { id: 27, class: g8rc_and_g8rc_nox0, preferred-register: '' }
299   - { id: 28, class: g8rc_and_g8rc_nox0, preferred-register: '' }
300   - { id: 29, class: g8rc, preferred-register: '' }
301   - { id: 30, class: g8rc, preferred-register: '' }
302   - { id: 31, class: gprc, preferred-register: '' }
303   - { id: 32, class: gprc, preferred-register: '' }
304   - { id: 33, class: gprc, preferred-register: '' }
305   - { id: 34, class: gprc, preferred-register: '' }
306   - { id: 35, class: gprc, preferred-register: '' }
307   - { id: 36, class: gprc, preferred-register: '' }
308   - { id: 37, class: gprc, preferred-register: '' }
309   - { id: 38, class: gprc, preferred-register: '' }
310   - { id: 39, class: gprc, preferred-register: '' }
311   - { id: 40, class: g8rc_and_g8rc_nox0, preferred-register: '' }
312   - { id: 41, class: gprc, preferred-register: '' }
313   - { id: 42, class: gprc, preferred-register: '' }
314   - { id: 43, class: gprc, preferred-register: '' }
315   - { id: 44, class: g8rc, preferred-register: '' }
316   - { id: 45, class: g8rc, preferred-register: '' }
317   - { id: 46, class: gprc, preferred-register: '' }
318   - { id: 47, class: gprc, preferred-register: '' }
319   - { id: 48, class: gprc, preferred-register: '' }
320   - { id: 49, class: gprc, preferred-register: '' }
321   - { id: 50, class: gprc, preferred-register: '' }
322   - { id: 51, class: gprc, preferred-register: '' }
323   - { id: 52, class: gprc, preferred-register: '' }
324   - { id: 53, class: gprc, preferred-register: '' }
325   - { id: 54, class: gprc, preferred-register: '' }
326   - { id: 55, class: gprc, preferred-register: '' }
327   - { id: 56, class: g8rc_and_g8rc_nox0, preferred-register: '' }
328   - { id: 57, class: g8rc_and_g8rc_nox0, preferred-register: '' }
329   - { id: 58, class: g8rc, preferred-register: '' }
330   - { id: 59, class: g8rc, preferred-register: '' }
331   - { id: 60, class: gprc, preferred-register: '' }
332   - { id: 61, class: gprc, preferred-register: '' }
333   - { id: 62, class: gprc, preferred-register: '' }
334   - { id: 63, class: gprc, preferred-register: '' }
335   - { id: 64, class: g8rc_and_g8rc_nox0, preferred-register: '' }
336   - { id: 65, class: g8rc, preferred-register: '' }
337   - { id: 66, class: g8rc_and_g8rc_nox0, preferred-register: '' }
338   - { id: 67, class: gprc_and_gprc_nor0, preferred-register: '' }
339   - { id: 68, class: gprc, preferred-register: '' }
340   - { id: 69, class: g8rc_and_g8rc_nox0, preferred-register: '' }
341   - { id: 70, class: g8rc, preferred-register: '' }
342   - { id: 71, class: g8rc, preferred-register: '' }
343   - { id: 72, class: g8rc, preferred-register: '' }
344   - { id: 73, class: g8rc_and_g8rc_nox0, preferred-register: '' }
345   - { id: 74, class: g8rc_and_g8rc_nox0, preferred-register: '' }
346   - { id: 75, class: gprc_and_gprc_nor0, preferred-register: '' }
347   - { id: 76, class: gprc, preferred-register: '' }
348   - { id: 77, class: g8rc_and_g8rc_nox0, preferred-register: '' }
349   - { id: 78, class: g8rc_and_g8rc_nox0, preferred-register: '' }
350   - { id: 79, class: gprc, preferred-register: '' }
351   - { id: 80, class: gprc_and_gprc_nor0, preferred-register: '' }
352   - { id: 81, class: g8rc_and_g8rc_nox0, preferred-register: '' }
353   - { id: 82, class: g8rc_and_g8rc_nox0, preferred-register: '' }
354   - { id: 83, class: g8rc_and_g8rc_nox0, preferred-register: '' }
355   - { id: 84, class: g8rc, preferred-register: '' }
356   - { id: 85, class: g8rc, preferred-register: '' }
357   - { id: 86, class: gprc_and_gprc_nor0, preferred-register: '' }
358   - { id: 87, class: crrc, preferred-register: '' }
359   - { id: 88, class: gprc, preferred-register: '' }
360   - { id: 89, class: crrc, preferred-register: '' }
361   - { id: 90, class: gprc_and_gprc_nor0, preferred-register: '' }
362   - { id: 91, class: gprc_and_gprc_nor0, preferred-register: '' }
363   - { id: 92, class: g8rc_and_g8rc_nox0, preferred-register: '' }
364   - { id: 93, class: g8rc, preferred-register: '' }
365   - { id: 94, class: crrc, preferred-register: '' }
366   - { id: 95, class: gprc, preferred-register: '' }
367   - { id: 96, class: gprc, preferred-register: '' }
368   - { id: 97, class: crrc, preferred-register: '' }
369   - { id: 98, class: g8rc_and_g8rc_nox0, preferred-register: '' }
370   - { id: 99, class: g8rc, preferred-register: '' }
371   - { id: 100, class: g8rc_and_g8rc_nox0, preferred-register: '' }
372   - { id: 101, class: g8rc_and_g8rc_nox0, preferred-register: '' }
373   - { id: 102, class: g8rc, preferred-register: '' }
374   - { id: 103, class: g8rc, preferred-register: '' }
375   - { id: 104, class: g8rc, preferred-register: '' }
376   - { id: 105, class: g8rc, preferred-register: '' }
377   - { id: 106, class: g8rc, preferred-register: '' }
378   - { id: 107, class: g8rc_and_g8rc_nox0, preferred-register: '' }
379   - { id: 108, class: g8rc, preferred-register: '' }
380   - { id: 109, class: g8rc_and_g8rc_nox0, preferred-register: '' }
381   - { id: 110, class: g8rc, preferred-register: '' }
382   - { id: 111, class: g8rc_and_g8rc_nox0, preferred-register: '' }
383   - { id: 112, class: crrc, preferred-register: '' }
384   - { id: 113, class: g8rc_and_g8rc_nox0, preferred-register: '' }
385   - { id: 114, class: crrc, preferred-register: '' }
386   - { id: 115, class: gprc, preferred-register: '' }
387   - { id: 116, class: gprc, preferred-register: '' }
388   - { id: 117, class: gprc, preferred-register: '' }
389   - { id: 118, class: gprc, preferred-register: '' }
390   - { id: 119, class: gprc, preferred-register: '' }
391   - { id: 120, class: gprc, preferred-register: '' }
392   - { id: 121, class: gprc, preferred-register: '' }
393   - { id: 122, class: gprc, preferred-register: '' }
394   - { id: 123, class: gprc, preferred-register: '' }
395   - { id: 124, class: gprc, preferred-register: '' }
396   - { id: 125, class: crbitrc, preferred-register: '' }
397   - { id: 126, class: crrc, preferred-register: '' }
398   - { id: 127, class: g8rc, preferred-register: '' }
399   - { id: 128, class: g8rc, preferred-register: '' }
400   - { id: 129, class: g8rc, preferred-register: '' }
401   - { id: 130, class: g8rc_and_g8rc_nox0, preferred-register: '' }
402   - { id: 131, class: g8rc, preferred-register: '' }
403   - { id: 132, class: g8rc_and_g8rc_nox0, preferred-register: '' }
404   - { id: 133, class: crrc, preferred-register: '' }
405   - { id: 134, class: g8rc_and_g8rc_nox0, preferred-register: '' }
406   - { id: 135, class: g8rc, preferred-register: '' }
407   - { id: 136, class: g8rc_and_g8rc_nox0, preferred-register: '' }
408   - { id: 137, class: g8rc, preferred-register: '' }
409   - { id: 138, class: g8rc_and_g8rc_nox0, preferred-register: '' }
410   - { id: 139, class: g8rc, preferred-register: '' }
411   - { id: 140, class: gprc, preferred-register: '' }
412   - { id: 141, class: gprc, preferred-register: '' }
413   - { id: 142, class: gprc, preferred-register: '' }
414   - { id: 143, class: crbitrc, preferred-register: '' }
415   - { id: 144, class: g8rc_and_g8rc_nox0, preferred-register: '' }
416   - { id: 145, class: g8rc_and_g8rc_nox0, preferred-register: '' }
417   - { id: 146, class: g8rc_and_g8rc_nox0, preferred-register: '' }
418   - { id: 147, class: g8rc_and_g8rc_nox0, preferred-register: '' }
419   - { id: 148, class: g8rc_and_g8rc_nox0, preferred-register: '' }
420   - { id: 149, class: crrc, preferred-register: '' }
421   - { id: 150, class: gprc_and_gprc_nor0, preferred-register: '' }
422   - { id: 151, class: gprc_and_gprc_nor0, preferred-register: '' }
423   - { id: 152, class: crrc, preferred-register: '' }
424   - { id: 153, class: gprc, preferred-register: '' }
425   - { id: 154, class: g8rc, preferred-register: '' }
426   - { id: 155, class: g8rc_and_g8rc_nox0, preferred-register: '' }
427   - { id: 156, class: g8rc, preferred-register: '' }
428   - { id: 157, class: g8rc, preferred-register: '' }
429   - { id: 158, class: g8rc, preferred-register: '' }
430 liveins:         []
431 frameInfo:
432   isFrameAddressTaken: false
433   isReturnAddressTaken: false
434   hasStackMap:     false
435   hasPatchPoint:   false
436   stackSize:       0
437   offsetAdjustment: 0
438   maxAlignment:    8
439   adjustsStack:    false
440   hasCalls:        true
441   stackProtector:  ''
442   functionContext: ''
443   maxCallFrameSize: 4294967295
444   cvBytesOfCalleeSavedRegisters: 0
445   hasOpaqueSPAdjustment: false
446   hasVAStart:      false
447   hasMustTailInVarArgFunc: false
448   hasTailCall:     false
449   localFrameSize:  0
450   savePoint:       ''
451   restorePoint:    ''
452 fixedStack:      []
453 stack:           []
454 entry_values:    []
455 callSites:       []
456 debugValueSubstitutions: []
457 constants:       []
458 machineFunctionInfo: {}
459 body:             |
460   bb.0.entry:
461     liveins: $x2, $x3, $x4
462     successors: %bb.2(0x80000000)
463   
464     %64:g8rc_and_g8rc_nox0 = LDtoc @shortArray, $x2 :: (load (s64) from got)
465     %65:g8rc = LI8 -1
466     STH8 killed %65, 6, %64 :: (store (s16) into `ptr getelementptr inbounds ([8 x i16], ptr @shortArray, i64 0, i64 3)`, !tbaa !3)
467     %66:g8rc_and_g8rc_nox0 = LDtoc @largeNumber, $x2 :: (load (s64) from got)
468     %67:gprc_and_gprc_nor0 = LHA 6, killed %66 :: (dereferenceable load (s16) from @largeNumber + 6, basealign 8, !tbaa !7)
469     %68:gprc = ADDI killed %67, -1705
470     ADJCALLSTACKDOWN 112, 0, implicit-def dead $r1, implicit $r1
471     %69:g8rc_and_g8rc_nox0 = LDtoc @_MergedGlobals, $x2 :: (load (s64) from got)
472     %70:g8rc = nuw ADDI8 killed %69, 29
473     %71:g8rc = EXTSW_32_64 killed %68
474     $x3 = COPY %70
475     $x4 = COPY %71
476     BL8_NOP <mcsymbol .printf>, csr_ppc64_r2, implicit-def dead $lr8, implicit $rm, implicit $x3, implicit $x4, implicit-def $r1, implicit-def $x3
477     ADJCALLSTACKUP 112, 0, implicit-def dead $r1, implicit $r1
478     %73:g8rc_and_g8rc_nox0 = LDtoc @globalShortValue, $x2 :: (load (s64) from got)
479     %0:gprc = LHZ 0, killed %73 :: (dereferenceable load (s16) from @globalShortValue, !tbaa !3)
480     %74:g8rc_and_g8rc_nox0 = LDtoc @someIntValue, $x2 :: (load (s64) from got)
481     %75:gprc_and_gprc_nor0 = LBZ 3, killed %74 :: (dereferenceable load (s8) from @someIntValue + 3, basealign 4, !tbaa !9)
482     %76:gprc = ADDI killed %75, -19
483     %1:gprc = EXTSB %76
484     %77:g8rc_and_g8rc_nox0 = LDtoc @unitIncrement, $x2 :: (load (s64) from got)
485     %2:gprc = LWZ 0, killed %77 :: (dereferenceable load (s32) from @unitIncrement)
486     %78:g8rc_and_g8rc_nox0 = LDtoc @globalCharValue, $x2 :: (load (s64) from got)
487     %79:gprc = LBZ 0, killed %78 :: (dereferenceable load (s8) from @globalCharValue)
488     %80:gprc_and_gprc_nor0 = EXTSB killed %79
489     %81:g8rc_and_g8rc_nox0 = LDtoc @computedResultShort, $x2 :: (load (s64) from got)
490     %3:gprc = LHZ 0, %81 :: (dereferenceable load (s16) from @computedResultShort, !tbaa !3)
491     %82:g8rc_and_g8rc_nox0 = LDtoc @resultArray, $x2 :: (load (s64) from got)
492     %4:gprc = LHZ 0, %82 :: (dereferenceable load (s16) from @resultArray, !tbaa !3)
493     %83:g8rc_and_g8rc_nox0 = LDtoc @computedResultChar, $x2 :: (load (s64) from got)
494     %5:gprc = LBZ 0, %83 :: (dereferenceable load (s8) from @computedResultChar, !tbaa !11)
495     %85:g8rc = IMPLICIT_DEF
496     %84:g8rc = INSERT_SUBREG %85, %76, %subreg.sub_32
497     %6:g8rc_and_g8rc_nox0 = EXTSB8 killed %84
498     %7:gprc = LHZ 6, %64 :: (dereferenceable load (s16) from `ptr getelementptr inbounds ([8 x i16], ptr @shortArray, i64 0, i64 3)`, !tbaa !3)
499     %86:gprc_and_gprc_nor0 = LHA 4, %64 :: (dereferenceable load (s16) from `ptr getelementptr inbounds ([8 x i16], ptr @shortArray, i64 0, i64 2)`)
500     ; CHECK:       [[VIRREG162:%[0-9]+]]:g8rc = LHA8 6, %64
501     ; CHECK-NEXT:  [[VIRREG150:%[0-9]+]]:gprc_and_gprc_nor0 = COPY killed [[VIRREG162]].sub_32
502     %87:crrc = CMPW %80, %86
503     %88:gprc = ISEL %80, %86, %87.sub_lt
504     %89:crrc = CMPLWI killed %88, 0
505     %91:gprc_and_gprc_nor0 = LI 1
506     %8:gprc = ISEL $zero, %91, %89.sub_eq
507     %92:g8rc_and_g8rc_nox0 = LDtoc @ullArray, $x2 :: (load (s64) from got)
508     %93:g8rc = LD 24, killed %92 :: (dereferenceable load (s64) from `ptr getelementptr inbounds ([8 x i64], ptr @ullArray, i64 0, i64 3)`)
509     %94:crrc = CMPLDI killed %93, 0
510     $cr7 = COPY %94
511     %95:gprc = MFOCRF $cr7
512     %96:gprc = RLWINM killed %95, 31, 31, 31
513     %9:gprc = XORI killed %96, 1
514     %97:crrc = CMPDI %6, 4
515     %98:g8rc_and_g8rc_nox0 = LI8 4
516     %99:g8rc = ISEL8 %6, %98, %97.sub_gt
517     %100:g8rc_and_g8rc_nox0 = SUBF8 %6, killed %99
518     %10:g8rc = ADDI8 killed %100, 3
519     %101:g8rc_and_g8rc_nox0 = RLDICL %10, 62, 2
520     %11:g8rc = nuw nsw ADDI8 killed %101, 1
521     %102:g8rc = RLDICL %11, 63, 1
522     %12:g8rc_and_g8rc_nox0 = RLDICL killed %102, 1, 1
523     %103:g8rc = RLDICR %11, 2, 60
524     %13:g8rc = ADD8 killed %103, %6
525     %104:g8rc = RLDICR %6, 2, 61
526     %105:g8rc = RLDICR %6, 3, 60
527     %106:g8rc = LDtoc @longArray, $x2 :: (load (s64) from got)
528     %107:g8rc_and_g8rc_nox0 = ADD8 killed %105, %106
529     %14:g8rc = ADDI8 killed %107, -64
530     %108:g8rc = LDtoc @intArray, $x2 :: (load (s64) from got)
531     %109:g8rc_and_g8rc_nox0 = ADD8 killed %104, %108
532     %15:g8rc = ADDI8 killed %109, 64
533     %110:g8rc = nsw ADDI8 %12, -2
534     %111:g8rc_and_g8rc_nox0 = RLDICL %110, 63, 1
535     %16:g8rc = nuw ADDI8 killed %111, 1
536     %63:gprc = LI 8
537     %112:crrc = CMPWI %1, 7
538     %113:g8rc_and_g8rc_nox0 = LDtoc @computedResultUChar, $x2 :: (load (s64) from got)
539     %114:crrc = CMPLDI %10, 4
540     %118:gprc = LIS 0
541     %116:gprc = ORI %118, 65535
542     %126:crrc = CMPLD %11, %12
543     B %bb.2
544   
545   bb.1.for.cond.cleanup15 (landing-pad):
546     liveins: $x2
547     %150:gprc_and_gprc_nor0 = EXTSH %7
548     %151:gprc_and_gprc_nor0 = EXTSH %0
550     ; CHECK:      [[VIRREG159:%[0-9]+]]:g8rc = IMPLICIT_DEF
551     ; CHECK-NEXT: [[VIRREG160:%[0-9]+]]:g8rc = INSERT_SUBREG [[VIRREG159]], %0, %subreg.sub_32
552     ; CHECK-NEXT: [[VIRREG161:%[0-9]+]]:g8rc = EXTSH8 killed [[VIRREG160]]
553     ; CHECK-NEXT: %151:gprc_and_gprc_nor0 = COPY killed [[VIRREG161]].sub_32
555     %152:crrc = CMPW %151, %150
556     %153:gprc = ISEL %151, %150, %152.sub_lt
557     %154:g8rc = EXTSW_32_64 killed %153
558     ; CHECK:      [[VIRREG165:%[0-9]+]]:g8rc = IMPLICIT_DEF
559     ; CHECK-NEXT: [[VIRREG166:%[0-9]+]]:g8rc = INSERT_SUBREG [[VIRREG165]], [[VIRREG150]], %subreg.sub_32
560     ; CHECK-NEXT: [[VIRREG167:%[0-9]+]]:g8rc = ISEL8 killed %164, killed [[VIRREG166]], %152.sub_lt
561     ; CHECK-NEXT: %{{[0-9]+}}:gprc = COPY killed [[VIRREG167]].sub_32
562     ; CHECK-NOT:  EXTSW_32_64
563     %155:g8rc_and_g8rc_nox0 = LDtoc @computedResultUll, $x2 :: (load (s64) from got)
564     STD %154, 0, killed %155 :: (store (s64) into @computedResultUll, !tbaa !7)
565     ADJCALLSTACKDOWN 112, 0, implicit-def dead $r1, implicit $r1
566     %156:g8rc = LDtoc @_MergedGlobals, $x2 :: (load (s64) from got)
567     $x3 = COPY %156
568     $x4 = COPY %154
569     BL8_NOP <mcsymbol .printf>, csr_ppc64, implicit-def dead $lr8, implicit $rm, implicit $x3, implicit $x4, implicit $x2, implicit-def $r1, implicit-def $x3
570     ADJCALLSTACKUP 112, 0, implicit-def dead $r1, implicit $r1
571     %158:g8rc = LI8 0
572     $x3 = COPY %158
573     BLR8 implicit $lr8, implicit $rm, implicit $x3
574   
575   bb.2.for.body16:
576     successors: %bb.3(0x40000000), %bb.9(0x40000000)
577   
578     %17:gprc_and_gprc_nor0 = PHI %63, %bb.0, %52, %bb.9
579     %18:gprc = PHI %3, %bb.0, %51, %bb.9
580     %19:gprc = PHI %4, %bb.0, %50, %bb.9
581     %20:gprc = PHI %5, %bb.0, %49, %bb.9
582     BCC 44, %112, %bb.9
583     B %bb.3
584   
585   bb.3.for.body31.lr.ph:
586     successors: %bb.7(0x40000000), %bb.4(0x40000000)
587   
588     STB %8, 0, %113 :: (store (s8) into @computedResultUChar, !tbaa !11)
589     BCC 12, %114, %bb.7
590     B %bb.4
591   
592   bb.4.vector.body.preheader:
593     successors: %bb.5(0x80000000)
594   
595     MTCTR8loop %16, implicit-def dead $ctr8
596     %117:gprc = LI 0
597     %115:gprc = COPY %117
598   
599   bb.5.vector.body:
600     successors: %bb.5(0x7c000000), %bb.6(0x04000000)
601   
602     %21:gprc = PHI %18, %bb.4, %31, %bb.5
603     %22:gprc = PHI %115, %bb.4, %32, %bb.5
604     %23:gprc = PHI %19, %bb.4, %33, %bb.5
605     %24:gprc = PHI %116, %bb.4, %34, %bb.5
606     %25:gprc = PHI %20, %bb.4, %35, %bb.5
607     %26:gprc = PHI %117, %bb.4, %36, %bb.5
608     %27:g8rc_and_g8rc_nox0 = PHI %14, %bb.4, %30, %bb.5
609     %28:g8rc_and_g8rc_nox0 = PHI %15, %bb.4, %29, %bb.5
610     %29:g8rc = ADDI8 %28, 32
611     %30:g8rc = ADDI8 %27, 64
612     %119:gprc = LHZ 70, %27 :: (load (s16) from %ir.31 + 6, basealign 8, !tbaa !7)
613     %120:gprc = LHZ 102, %27 :: (load (s16) from %ir.32 + 6, basealign 8, !tbaa !7)
614     %121:gprc = LBZ 35, %28 :: (load (s8) from %ir.29 + 3, basealign 4, !tbaa !9)
615     %122:gprc = LBZ 51, %28 :: (load (s8) from %ir.30 + 3, basealign 4, !tbaa !9)
616     %123:gprc = MULLI killed %121, -6
617     %124:gprc = MULLI killed %122, -6
618     %31:gprc = SUBF %2, %21
619     %32:gprc = SUBF %2, %22
620     %33:gprc = AND %23, killed %119
621     %34:gprc = AND %24, killed %120
622     %35:gprc = ADD4 killed %123, %25
623     %36:gprc = ADD4 killed %124, %26
624     BDNZ8 %bb.5, implicit-def $ctr8, implicit $ctr8
625     B %bb.6
626   
627   bb.6.middle.block:
628     successors: %bb.8(0x40000000), %bb.7(0x40000000)
629   
630     %37:gprc = ADD4 %32, %31
631     %38:gprc = AND %34, %33
632     %39:gprc = ADD4 %36, %35
633     BCC 76, %126, %bb.8
634     B %bb.7
635   
636   bb.7.for.body31.preheader:
637     successors: %bb.10(0x80000000)
638   
639     %40:g8rc_and_g8rc_nox0 = PHI %6, %bb.3, %13, %bb.6
640     %41:gprc = PHI %18, %bb.3, %37, %bb.6
641     %42:gprc = PHI %19, %bb.3, %38, %bb.6
642     %43:gprc = PHI %20, %bb.3, %39, %bb.6
643     %127:g8rc = RLDICR %40, 2, 61
644     %128:g8rc = RLDICR %40, 3, 60
645     %130:g8rc_and_g8rc_nox0 = ADD8 %106, killed %128
646     %44:g8rc = ADDI8 killed %130, -32
647     %132:g8rc_and_g8rc_nox0 = ADD8 %108, killed %127
648     %45:g8rc = ADDI8 killed %132, 80
649     %133:crrc = CMPDI %40, 4
650     %135:g8rc = ISEL8 %40, %98, %133.sub_gt
651     %136:g8rc_and_g8rc_nox0 = SUBF8 %40, killed %135
652     %137:g8rc = ADDI8 killed %136, 3
653     %138:g8rc_and_g8rc_nox0 = RLDICL %137, 62, 2
654     %139:g8rc = nuw nsw ADDI8 killed %138, 1
655     MTCTR8loop killed %139, implicit-def dead $ctr8
656     B %bb.10
657   
658   bb.8.for.cond21.for.cond.cleanup25_crit_edge (landing-pad):
659     successors: %bb.9(0x80000000)
660     liveins: $x2
662     %46:gprc = PHI %37, %bb.6, %60, %bb.10
663     %47:gprc = PHI %38, %bb.6, %61, %bb.10
664     %48:gprc = PHI %39, %bb.6, %62, %bb.10
665     STH %46, 0, %81 :: (store (s16) into @computedResultShort, !tbaa !3)
666     %145:g8rc_and_g8rc_nox0 = LDtoc @charArray, $x2 :: (load (s64) from got)
667     STB %0, 131, killed %145 :: (store (s8) into `ptr getelementptr inbounds ([8 x [8 x [8 x i8]]], ptr @charArray, i64 0, i64 2, i64 0, i64 3)`, !tbaa !11)
668     STH %47, 0, %82 :: (store (s16) into @resultArray, !tbaa !3)
669     %147:g8rc_and_g8rc_nox0 = LDtoc @computedResultBool, $x2 :: (load (s64) from got)
670     STB %9, 0, killed %147 :: (store (s8) into @computedResultBool, !tbaa !16)
671     STB %48, 0, %83 :: (store (s8) into @computedResultChar, !tbaa !11)
672   
673   bb.9.for.cond.cleanup25:
674     successors: %bb.1(0x04000000), %bb.2(0x7c000000)
675   
676     %49:gprc = PHI %20, %bb.2, %48, %bb.8
677     %50:gprc = PHI %19, %bb.2, %47, %bb.8
678     %51:gprc = PHI %18, %bb.2, %46, %bb.8
679     %52:gprc = nsw ADDI %17, -1
680     %149:crrc = CMPLWI %52, 0
681     BCC 76, killed %149, %bb.1
682     B %bb.2
683   
684   bb.10.for.body31:
685     successors: %bb.10(0x7c000000), %bb.8(0x04000000)
686   
687     %53:gprc = PHI %41, %bb.7, %60, %bb.10
688     %54:gprc = PHI %42, %bb.7, %61, %bb.10
689     %55:gprc = PHI %43, %bb.7, %62, %bb.10
690     %56:g8rc_and_g8rc_nox0 = PHI %44, %bb.7, %59, %bb.10
691     %57:g8rc_and_g8rc_nox0 = PHI %45, %bb.7, %58, %bb.10
692     %58:g8rc = ADDI8 %57, 16
693     %59:g8rc = ADDI8 %56, 32
694     %140:gprc = LHZ 38, %56 :: (load (s16) from %ir.62 + 6, basealign 8, !tbaa !7)
695     %141:gprc = LBZ 19, %57 :: (load (s8) from %ir.61 + 3, basealign 4, !tbaa !9)
696     %142:gprc = MULLI killed %141, -6
697     %60:gprc = SUBF %2, %53
698     %61:gprc = AND %54, killed %140
699     %62:gprc = ADD4 killed %142, %55
700     BDNZ8 %bb.10, implicit-def $ctr8, implicit $ctr8
701     B %bb.8