xref: /llvm-project/llvm/test/Transforms/CodeGenPrepare/AArch64/combine-address-mode.ll (revision 2d69827c5c754f0eca98e497ecf0e52ed54b4fd3)
1c9066c5dSAndrew Wei; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2f1ec0d12SNick Anderson; RUN: opt -S -passes='require<profile-summary>,function(codegenprepare)' -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s
3c9066c5dSAndrew Wei
4c9066c5dSAndrew Wei@_MergedGlobals = external dso_local global <{ i32, i32 }>, align 4
5c9066c5dSAndrew Wei
6c9066c5dSAndrew Weidefine dso_local i32 @f(i1 %a, i8 %b) local_unnamed_addr {
7c9066c5dSAndrew Wei; CHECK-LABEL: @f(
8e446d1d9SMatt Arsenault; CHECK-NEXT:  bb:
9e446d1d9SMatt Arsenault; CHECK-NEXT:    br label [[BB10:%.*]]
10e446d1d9SMatt Arsenault; CHECK:       bb1:
11e446d1d9SMatt Arsenault; CHECK-NEXT:    br i1 [[A:%.*]], label [[BB2:%.*]], label [[BB10]]
12e446d1d9SMatt Arsenault; CHECK:       bb2:
13d9e51e75SMatt Arsenault; CHECK-NEXT:    [[I:%.*]] = phi ptr [ getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals, i32 0, i32 1), [[BB1:%.*]] ], [ [[I20:%.*]], [[BB18:%.*]] ]
14d9e51e75SMatt Arsenault; CHECK-NEXT:    [[I3:%.*]] = phi ptr [ getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals, i32 0, i32 1), [[BB1]] ], [ [[I19:%.*]], [[BB18]] ]
15c9066c5dSAndrew Wei; CHECK-NEXT:    ret i32 0
16e446d1d9SMatt Arsenault; CHECK:       bb4:
17e446d1d9SMatt Arsenault; CHECK-NEXT:    br label [[BB10]]
18e446d1d9SMatt Arsenault; CHECK:       bb10:
19d9e51e75SMatt Arsenault; CHECK-NEXT:    [[I11:%.*]] = phi ptr [ @_MergedGlobals, [[BB:%.*]] ], [ [[I]], [[BB4:%.*]] ], [ getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals, i32 0, i32 1), [[BB1]] ]
20d9e51e75SMatt Arsenault; CHECK-NEXT:    [[I12:%.*]] = phi ptr [ @_MergedGlobals, [[BB]] ], [ [[I3]], [[BB4]] ], [ getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals, i32 0, i32 1), [[BB1]] ]
21e446d1d9SMatt Arsenault; CHECK-NEXT:    br label [[BB13:%.*]]
22e446d1d9SMatt Arsenault; CHECK:       bb13:
23d9e51e75SMatt Arsenault; CHECK-NEXT:    [[I14:%.*]] = phi ptr [ [[I20]], [[BB18]] ], [ [[I11]], [[BB10]] ]
24d9e51e75SMatt Arsenault; CHECK-NEXT:    [[I15:%.*]] = phi ptr [ [[I20]], [[BB18]] ], [ [[I12]], [[BB10]] ]
25d9e51e75SMatt Arsenault; CHECK-NEXT:    [[I16:%.*]] = phi ptr [ [[I19]], [[BB18]] ], [ [[I12]], [[BB10]] ]
26e446d1d9SMatt Arsenault; CHECK-NEXT:    br i1 [[A]], label [[BB18]], label [[BB17:%.*]]
27e446d1d9SMatt Arsenault; CHECK:       bb17:
28d9e51e75SMatt Arsenault; CHECK-NEXT:    store i32 5, ptr [[I15]], align 4
29e446d1d9SMatt Arsenault; CHECK-NEXT:    br label [[BB18]]
30e446d1d9SMatt Arsenault; CHECK:       bb18:
31d9e51e75SMatt Arsenault; CHECK-NEXT:    [[I19]] = phi ptr [ [[I16]], [[BB17]] ], [ [[I14]], [[BB13]] ]
32d9e51e75SMatt Arsenault; CHECK-NEXT:    [[I20]] = phi ptr [ [[I15]], [[BB17]] ], [ [[I14]], [[BB13]] ]
33e446d1d9SMatt Arsenault; CHECK-NEXT:    br i1 [[A]], label [[BB2]], label [[BB13]]
34c9066c5dSAndrew Wei;
35e446d1d9SMatt Arsenaultbb:
36e446d1d9SMatt Arsenault  br label %bb10
37c9066c5dSAndrew Wei
38e446d1d9SMatt Arsenaultbb1:                                              ; No predecessors!
39e446d1d9SMatt Arsenault  br i1 %a, label %bb2, label %bb9
40c9066c5dSAndrew Wei
41e446d1d9SMatt Arsenaultbb2:                                              ; preds = %bb21, %bb1
42d9e51e75SMatt Arsenault  %i = phi ptr [ getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals, i32 0, i32 1), %bb1 ], [ %i20, %bb21 ]
43d9e51e75SMatt Arsenault  %i3 = phi ptr [ getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals, i32 0, i32 1), %bb1 ], [ %i19, %bb21 ]
44c9066c5dSAndrew Wei  ret i32 0
45c9066c5dSAndrew Wei
46e446d1d9SMatt Arsenaultbb4:                                              ; No predecessors!
47e446d1d9SMatt Arsenault  %i5 = icmp ugt i8 %b, 50
48e446d1d9SMatt Arsenault  br label %bb6
49c9066c5dSAndrew Wei
50e446d1d9SMatt Arsenaultbb6:                                              ; preds = %bb9, %bb4
51d9e51e75SMatt Arsenault  %i7 = phi ptr [ %i, %bb4 ], [ getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals, i32 0, i32 1), %bb9 ]
52d9e51e75SMatt Arsenault  %i8 = phi ptr [ %i3, %bb4 ], [ getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals, i32 0, i32 1), %bb9 ]
53e446d1d9SMatt Arsenault  br label %bb10
54c9066c5dSAndrew Wei
55e446d1d9SMatt Arsenaultbb9:                                              ; preds = %bb1
56e446d1d9SMatt Arsenault  br label %bb6
57c9066c5dSAndrew Wei
58e446d1d9SMatt Arsenaultbb10:                                             ; preds = %bb6, %bb
59*2d69827cSNikita Popov  %i11 = phi ptr [ @_MergedGlobals, %bb ], [ %i7, %bb6 ]
60*2d69827cSNikita Popov  %i12 = phi ptr [ @_MergedGlobals, %bb ], [ %i8, %bb6 ]
61e446d1d9SMatt Arsenault  br label %bb13
62c9066c5dSAndrew Wei
63e446d1d9SMatt Arsenaultbb13:                                             ; preds = %bb18, %bb10
64d9e51e75SMatt Arsenault  %i14 = phi ptr [ %i20, %bb18 ], [ %i11, %bb10 ]
65d9e51e75SMatt Arsenault  %i15 = phi ptr [ %i20, %bb18 ], [ %i12, %bb10 ]
66d9e51e75SMatt Arsenault  %i16 = phi ptr [ %i19, %bb18 ], [ %i12, %bb10 ]
67e446d1d9SMatt Arsenault  br i1 %a, label %bb18, label %bb17
68c9066c5dSAndrew Wei
69e446d1d9SMatt Arsenaultbb17:                                             ; preds = %bb13
70d9e51e75SMatt Arsenault  store i32 5, ptr %i15, align 4
71e446d1d9SMatt Arsenault  br label %bb18
72c9066c5dSAndrew Wei
73e446d1d9SMatt Arsenaultbb18:                                             ; preds = %bb17, %bb13
74d9e51e75SMatt Arsenault  %i19 = phi ptr [ %i16, %bb17 ], [ %i14, %bb13 ]
75d9e51e75SMatt Arsenault  %i20 = phi ptr [ %i15, %bb17 ], [ %i14, %bb13 ]
76e446d1d9SMatt Arsenault  br i1 %a, label %bb21, label %bb13
77c9066c5dSAndrew Wei
78e446d1d9SMatt Arsenaultbb21:                                             ; preds = %bb18
79e446d1d9SMatt Arsenault  br label %bb2
80c9066c5dSAndrew Wei}
81