brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 26ac718 Raw
72 lines · plain
1; RUN: opt -passes=gvn-sink -S < %s | FileCheck %s2 3%struct = type {i32, i32, i32}4%struct2 = type { [ 2 x i32], i32 }5 6; Struct indices cannot be variant.7 8; CHECK-LABEL: @f(i1 %arg) {9; CHECK: getelementptr10; CHECK: getelementptr11define void @f(i1 %arg) {12bb:13  br i1 %arg, label %bb2, label %bb114 15bb1:                                              ; preds = %bb16  %tmp = getelementptr inbounds %struct, ptr null, i64 0, i32 117  br label %bb418 19bb2:                                              ; preds = %bb20  %tmp3 = getelementptr inbounds %struct, ptr null, i64 0, i32 221  br label %bb422 23bb4:                                              ; preds = %bb2, %bb124  %tmp5 = phi i32 [ 1, %bb1 ], [ 2, %bb2 ]25  ret void26}27 28; Struct indices cannot be variant.29 30; CHECK-LABEL: @g(i1 %arg) {31; CHECK: getelementptr32; CHECK: getelementptr33define void @g(i1 %arg) {34bb:35  br i1 %arg, label %bb2, label %bb136 37bb1:                                              ; preds = %bb38  %tmp = getelementptr inbounds %struct2, ptr null, i64 0, i32 0, i32 139  br label %bb440 41bb2:                                              ; preds = %bb42  %tmp3 = getelementptr inbounds %struct2, ptr null, i64 0, i32 0, i32 243  br label %bb444 45bb4:                                              ; preds = %bb2, %bb146  %tmp5 = phi i32 [ 1, %bb1 ], [ 2, %bb2 ]47  ret void48}49 50 51; ... but the first parameter to a GEP can.52 53; CHECK-LABEL: @h(i1 %arg) {54; CHECK: getelementptr55; CHECK-NOT: getelementptr56define void @h(i1 %arg) {57bb:58  br i1 %arg, label %bb2, label %bb159 60bb1:                                              ; preds = %bb61  %tmp = getelementptr inbounds %struct, ptr null, i32 1, i32 062  br label %bb463 64bb2:                                              ; preds = %bb65  %tmp3 = getelementptr inbounds %struct, ptr null, i32 2, i32 066  br label %bb467 68bb4:                                              ; preds = %bb2, %bb169  %tmp5 = phi i32 [ 1, %bb1 ], [ 2, %bb2 ]70  ret void71}72