142 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 62; RUN: opt < %s -passes=newgvn -S | FileCheck %s3target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"4 5%struct.foo = type { ptr, %struct.zot, ptr }6%struct.zot = type { i64 }7%struct.barney = type <{ ptr, %struct.wibble, %struct.snork, %struct.quux.4, %struct.snork.10, ptr, ptr, i32, i8, i8, [2 x i8] }>8%struct.wibble = type { %struct.pluto, %struct.bar }9%struct.pluto = type { %struct.quux }10%struct.quux = type { %struct.eggs }11%struct.eggs = type { %struct.zot.0, %struct.widget }12%struct.zot.0 = type { ptr, ptr, ptr }13%struct.widget = type { %struct.barney.1 }14%struct.barney.1 = type { [8 x i8] }15%struct.bar = type { [3 x %struct.widget] }16%struct.snork = type <{ %struct.wobble, %struct.bar.3, [7 x i8] }>17%struct.wobble = type { %struct.wombat }18%struct.wombat = type { %struct.zot.2 }19%struct.zot.2 = type { %struct.zot.0, %struct.ham }20%struct.ham = type { %struct.barney.1 }21%struct.bar.3 = type { i8 }22%struct.quux.4 = type <{ %struct.quux.5, %struct.snork.9, [7 x i8] }>23%struct.quux.5 = type { %struct.widget.6 }24%struct.widget.6 = type { %struct.spam }25%struct.spam = type { %struct.zot.0, %struct.ham.7 }26%struct.ham.7 = type { %struct.barney.8 }27%struct.barney.8 = type { [24 x i8] }28%struct.snork.9 = type { i8 }29%struct.snork.10 = type <{ %struct.foo.11, %struct.spam.15, [7 x i8] }>30%struct.foo.11 = type { %struct.snork.12 }31%struct.snork.12 = type { %struct.wombat.13 }32%struct.wombat.13 = type { %struct.zot.0, %struct.wibble.14 }33%struct.wibble.14 = type { %struct.barney.8 }34%struct.spam.15 = type { i8 }35%struct.ham.16 = type { %struct.pluto.17, %struct.pluto.17 }36%struct.pluto.17 = type { %struct.bar.18 }37%struct.bar.18 = type { ptr, %struct.zot.20, %struct.barney.22 }38%struct.baz = type { ptr }39%struct.wibble.19 = type <{ %struct.baz, ptr, ptr, i8, [7 x i8] }>40%struct.zot.20 = type { %struct.ham.21 }41%struct.ham.21 = type { %struct.baz }42%struct.barney.22 = type { %struct.blam }43%struct.blam = type { i64 }44%struct.wobble.23 = type { %struct.spam.24, ptr }45%struct.spam.24 = type { %struct.bar.25, ptr }46%struct.bar.25 = type <{ ptr, i8, i8 }>47%struct.zot.26 = type { ptr, i32, ptr }48%struct.widget.27 = type { %struct.zot.26, ptr }49%struct.wombat.28 = type <{ ptr, i8, i8, [6 x i8] }>50 51; Function Attrs: norecurse nounwind ssp uwtable52define weak_odr hidden ptr @quux(ptr %arg, ptr %arg1) local_unnamed_addr align 2 {53; CHECK-LABEL: define weak_odr hidden ptr @quux(54; CHECK-SAME: ptr [[ARG:%.*]], ptr [[ARG1:%.*]]) local_unnamed_addr align 2 {55; CHECK-NEXT: [[BB:.*]]:56; CHECK-NEXT: [[TMP:%.*]] = getelementptr inbounds [[STRUCT_BARNEY:%.*]], ptr [[ARG]], i64 0, i32 3, i32 0, i32 0, i32 057; CHECK-NEXT: [[TMP3:%.*]] = load ptr, ptr [[TMP]], align 8, !tbaa [[ANYPTR_TBAA2:![0-9]+]]58; CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds [[STRUCT_BARNEY]], ptr [[ARG]], i64 0, i32 3, i32 0, i32 0, i32 0, i32 0, i32 159; CHECK-NEXT: [[TMP6:%.*]] = load ptr, ptr [[TMP4]], align 8, !tbaa [[ANYPTR_TBAA7:![0-9]+]]60; CHECK-NEXT: [[TMP7:%.*]] = icmp eq ptr [[TMP3]], [[TMP6]]61; CHECK-NEXT: br i1 [[TMP7]], label %[[BB21:.*]], label %[[BB8:.*]]62; CHECK: [[BB8]]:63; CHECK-NEXT: br label %[[BB11:.*]]64; CHECK: [[BB9:.*]]:65; CHECK-NEXT: [[TMP10:%.*]] = icmp eq ptr [[TMP18:%.*]], [[TMP6]]66; CHECK-NEXT: br i1 [[TMP10]], label %[[BB19:.*]], label %[[BB11]]67; CHECK: [[BB11]]:68; CHECK-NEXT: [[TMP12:%.*]] = phi ptr [ [[TMP17:%.*]], %[[BB9]] ], [ undef, %[[BB8]] ]69; CHECK-NEXT: [[TMP13:%.*]] = phi ptr [ [[TMP18]], %[[BB9]] ], [ [[TMP3]], %[[BB8]] ]70; CHECK-NEXT: [[TMP15:%.*]] = load ptr, ptr [[TMP13]], align 8, !tbaa [[ANYPTR_TBAA8:![0-9]+]]71; CHECK-NEXT: [[TMP16:%.*]] = icmp eq ptr [[TMP15]], [[ARG1]]72; CHECK-NEXT: [[TMP17]] = select i1 [[TMP16]], ptr [[TMP13]], ptr [[TMP12]]73; CHECK-NEXT: [[TMP18]] = getelementptr inbounds [[STRUCT_FOO:%.*]], ptr [[TMP13]], i64 174; CHECK-NEXT: br i1 [[TMP16]], label %[[BB19]], label %[[BB9]]75; CHECK: [[BB19]]:76; CHECK-NEXT: [[TMP20:%.*]] = phi ptr [ null, %[[BB9]] ], [ [[TMP17]], %[[BB11]] ]77; CHECK-NEXT: br label %[[BB21]]78; CHECK: [[BB21]]:79; CHECK-NEXT: [[TMP22:%.*]] = phi ptr [ null, %[[BB]] ], [ [[TMP20]], %[[BB19]] ]80; CHECK-NEXT: ret ptr [[TMP22]]81;82bb:83 %tmp = getelementptr inbounds %struct.barney, ptr %arg, i64 0, i32 3, i32 0, i32 0, i32 084 %tmp3 = load ptr, ptr %tmp, align 8, !tbaa !285 %tmp4 = getelementptr inbounds %struct.barney, ptr %arg, i64 0, i32 3, i32 0, i32 0, i32 0, i32 0, i32 186 %tmp6 = load ptr, ptr %tmp4, align 8, !tbaa !787 %tmp7 = icmp eq ptr %tmp3, %tmp688 br i1 %tmp7, label %bb21, label %bb889 90bb8: ; preds = %bb91 br label %bb1192 93bb9: ; preds = %bb1194 %tmp10 = icmp eq ptr %tmp18, %tmp695 br i1 %tmp10, label %bb19, label %bb1196 97bb11: ; preds = %bb9, %bb898 %tmp12 = phi ptr [ %tmp17, %bb9 ], [ undef, %bb8 ]99 %tmp13 = phi ptr [ %tmp18, %bb9 ], [ %tmp3, %bb8 ]100 %tmp15 = load ptr, ptr %tmp13, align 8, !tbaa !8101 %tmp16 = icmp eq ptr %tmp15, %arg1102 %tmp17 = select i1 %tmp16, ptr %tmp13, ptr %tmp12103 %tmp18 = getelementptr inbounds %struct.foo, ptr %tmp13, i64 1104 br i1 %tmp16, label %bb19, label %bb9105 106bb19: ; preds = %bb11, %bb9107 %tmp20 = phi ptr [ null, %bb9 ], [ %tmp17, %bb11 ]108 br label %bb21109 110bb21: ; preds = %bb19, %bb111 %tmp22 = phi ptr [ null, %bb ], [ %tmp20, %bb19 ]112 ret ptr %tmp22113}114 115!llvm.module.flags = !{!0}116!llvm.ident = !{!1}117 118!0 = !{i32 1, !"PIC Level", i32 2}119!1 = !{!"clang version 4.0.0"}120!2 = !{!3, !4, i64 0}121!3 = !{!"_ZTSN4llvm15SmallVectorBaseE", !4, i64 0, !4, i64 8, !4, i64 16}122!4 = !{!"any pointer", !5, i64 0}123!5 = !{!"omnipotent char", !6, i64 0}124!6 = !{!"Simple C++ TBAA"}125!7 = !{!3, !4, i64 8}126!8 = !{!9, !4, i64 0}127!9 = !{!"_ZTSN4llvm9RecordValE", !4, i64 0, !10, i64 8, !4, i64 16}128!10 = !{!"_ZTSN4llvm14PointerIntPairIPNS_5RecTyELj1EbNS_21PointerLikeTypeTraitsIS2_EENS_18PointerIntPairInfoIS2_Lj1ES4_EEEE", !11, i64 0}129!11 = !{!"long", !5, i64 0}130;.131; CHECK: [[ANYPTR_TBAA2]] = !{[[META3:![0-9]+]], [[META4:![0-9]+]], i64 0}132; CHECK: [[META3]] = !{!"_ZTSN4llvm15SmallVectorBaseE", [[META4]], i64 0, [[META4]], i64 8, [[META4]], i64 16}133; CHECK: [[META4]] = !{!"any pointer", [[META5:![0-9]+]], i64 0}134; CHECK: [[META5]] = !{!"omnipotent char", [[META6:![0-9]+]], i64 0}135; CHECK: [[META6]] = !{!"Simple C++ TBAA"}136; CHECK: [[ANYPTR_TBAA7]] = !{[[META3]], [[META4]], i64 8}137; CHECK: [[ANYPTR_TBAA8]] = !{[[META9:![0-9]+]], [[META4]], i64 0}138; CHECK: [[META9]] = !{!"_ZTSN4llvm9RecordValE", [[META4]], i64 0, [[META10:![0-9]+]], i64 8, [[META4]], i64 16}139; CHECK: [[META10]] = !{!"_ZTSN4llvm14PointerIntPairIPNS_5RecTyELj1EbNS_21PointerLikeTypeTraitsIS2_EENS_18PointerIntPairInfoIS2_Lj1ES4_EEEE", [[META11:![0-9]+]], i64 0}140; CHECK: [[META11]] = !{!"long", [[META5]], i64 0}141;.142