[mlir] Update Ch-2.md (#121379)
[llvm-project.git] / llvm / test / Transforms / GVNSink / struct.ll
blob26ac71860ccdcc17db7b3f87b5a69f102744d6ba
1 ; RUN: opt -passes=gvn-sink -S < %s | FileCheck %s
3 %struct = type {i32, i32, i32}
4 %struct2 = type { [ 2 x i32], i32 }
6 ; Struct indices cannot be variant.
8 ; CHECK-LABEL: @f(i1 %arg) {
9 ; CHECK: getelementptr
10 ; CHECK: getelementptr
11 define void @f(i1 %arg) {
12 bb:
13   br i1 %arg, label %bb2, label %bb1
15 bb1:                                              ; preds = %bb
16   %tmp = getelementptr inbounds %struct, ptr null, i64 0, i32 1
17   br label %bb4
19 bb2:                                              ; preds = %bb
20   %tmp3 = getelementptr inbounds %struct, ptr null, i64 0, i32 2
21   br label %bb4
23 bb4:                                              ; preds = %bb2, %bb1
24   %tmp5 = phi i32 [ 1, %bb1 ], [ 2, %bb2 ]
25   ret void
28 ; Struct indices cannot be variant.
30 ; CHECK-LABEL: @g(i1 %arg) {
31 ; CHECK: getelementptr
32 ; CHECK: getelementptr
33 define void @g(i1 %arg) {
34 bb:
35   br i1 %arg, label %bb2, label %bb1
37 bb1:                                              ; preds = %bb
38   %tmp = getelementptr inbounds %struct2, ptr null, i64 0, i32 0, i32 1
39   br label %bb4
41 bb2:                                              ; preds = %bb
42   %tmp3 = getelementptr inbounds %struct2, ptr null, i64 0, i32 0, i32 2
43   br label %bb4
45 bb4:                                              ; preds = %bb2, %bb1
46   %tmp5 = phi i32 [ 1, %bb1 ], [ 2, %bb2 ]
47   ret void
51 ; ... but the first parameter to a GEP can.
53 ; CHECK-LABEL: @h(i1 %arg) {
54 ; CHECK: getelementptr
55 ; CHECK-NOT: getelementptr
56 define void @h(i1 %arg) {
57 bb:
58   br i1 %arg, label %bb2, label %bb1
60 bb1:                                              ; preds = %bb
61   %tmp = getelementptr inbounds %struct, ptr null, i32 1, i32 0
62   br label %bb4
64 bb2:                                              ; preds = %bb
65   %tmp3 = getelementptr inbounds %struct, ptr null, i32 2, i32 0
66   br label %bb4
68 bb4:                                              ; preds = %bb2, %bb1
69   %tmp5 = phi i32 [ 1, %bb1 ], [ 2, %bb2 ]
70   ret void