1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 2; RUN: opt -passes='require<loops>,newgvn' -S < %s | FileCheck %s 3 4; This used to fail with ASAN enabled and if for some reason LoopInfo remained 5; available during GVN. In this case BasicAA will use LI but 6; MergeBlockIntoPredecessor in GVN failed to update LI. 7 8target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" 9 10%struct.wibble.1028 = type { i32, i32, %struct.barney.881 } 11%struct.barney.881 = type { %struct.zot.882 } 12%struct.zot.882 = type { [64 x i8] } 13 14; Function Attrs: argmemonly 15declare void @snork.1(ptr) local_unnamed_addr #0 16 17define hidden zeroext i1 @eggs(ptr %arg, i1 %arg2) unnamed_addr align 2 { 18; CHECK-LABEL: define hidden zeroext i1 @eggs( 19; CHECK-SAME: ptr [[ARG:%.*]], i1 [[ARG2:%.*]]) unnamed_addr align 2 { 20; CHECK-NEXT: bb: 21; CHECK-NEXT: br i1 [[ARG2]], label [[BB14:%.*]], label [[BB3:%.*]] 22; CHECK: bb3: 23; CHECK-NEXT: [[TMP:%.*]] = getelementptr inbounds [[STRUCT_WIBBLE_1028:%.*]], ptr [[ARG]], i64 0, i32 2, i32 0, i32 0, i64 0 24; CHECK-NEXT: br label [[BB6:%.*]] 25; CHECK: bb6: 26; CHECK-NEXT: br label [[BB7:%.*]] 27; CHECK: bb7: 28; CHECK-NEXT: br i1 undef, label [[BB11:%.*]], label [[BB8:%.*]] 29; CHECK: bb8: 30; CHECK-NEXT: [[TMP9:%.*]] = load ptr, ptr [[TMP]], align 8 31; CHECK-NEXT: br label [[BB12:%.*]] 32; CHECK: bb11: 33; CHECK-NEXT: br label [[BB12]] 34; CHECK: bb12: 35; CHECK-NEXT: [[TMP13:%.*]] = phi ptr [ [[TMP]], [[BB11]] ], [ [[TMP9]], [[BB8]] ] 36; CHECK-NEXT: call void @snork.1(ptr [[TMP13]]) #[[ATTR1:[0-9]+]] 37; CHECK-NEXT: br label [[BB6]] 38; CHECK: bb14: 39; CHECK-NEXT: ret i1 false 40; 41bb: 42 br i1 %arg2, label %bb14, label %bb3 43 44bb3: ; preds = %bb 45 %tmp = getelementptr inbounds %struct.wibble.1028, ptr %arg, i64 0, i32 2, i32 0, i32 0, i64 0 46 br label %bb6 47 48bb6: ; preds = %bb12, %bb3 49 br label %bb7 50 51bb7: ; preds = %bb6 52 br i1 undef, label %bb11, label %bb8 53 54bb8: ; preds = %bb7 55 %tmp9 = load ptr, ptr %tmp, align 8 56 br label %bb12 57 58bb11: ; preds = %bb7 59 br label %bb12 60 61bb12: ; preds = %bb11, %bb8 62 %tmp13 = phi ptr [ %tmp, %bb11 ], [ %tmp9, %bb8 ] 63 call void @snork.1(ptr %tmp13) #1 64 br label %bb6 65 66bb14: ; preds = %bb 67 ret i1 false 68} 69 70attributes #0 = { argmemonly } 71attributes #1 = { nounwind } 72