1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 2; RUN: opt < %s -passes=newgvn -S | FileCheck %s 3; PR2503 4 5@g_3 = external global i8 ; <ptr> [#uses=2] 6 7define i8 @func_1(i32 %x, i32 %y) nounwind { 8; CHECK-LABEL: define i8 @func_1( 9; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) #[[ATTR0:[0-9]+]] { 10; CHECK-NEXT: entry: 11; CHECK-NEXT: [[A:%.*]] = alloca i8, align 1 12; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[X]], [[Y]] 13; CHECK-NEXT: br i1 [[CMP]], label [[IFELSE:%.*]], label [[IFTHEN:%.*]] 14; CHECK: ifthen: 15; CHECK-NEXT: br label [[IFEND:%.*]] 16; CHECK: ifelse: 17; CHECK-NEXT: [[TMP3:%.*]] = load i8, ptr @g_3, align 1 18; CHECK-NEXT: store i8 [[TMP3]], ptr [[A]], align 1 19; CHECK-NEXT: br label [[AFTERFOR:%.*]] 20; CHECK: forcond: 21; CHECK-NEXT: store i8 poison, ptr null, align 1 22; CHECK-NEXT: br i1 false, label [[AFTERFOR]], label [[FORBODY:%.*]] 23; CHECK: forbody: 24; CHECK-NEXT: store i8 poison, ptr null, align 1 25; CHECK-NEXT: br label [[FORINC:%.*]] 26; CHECK: forinc: 27; CHECK-NEXT: store i8 poison, ptr null, align 1 28; CHECK-NEXT: br label [[FORCOND:%.*]] 29; CHECK: afterfor: 30; CHECK-NEXT: ret i8 [[TMP3]] 31; CHECK: ifend: 32; CHECK-NEXT: ret i8 0 33; 34entry: 35 %A = alloca i8 36 %cmp = icmp eq i32 %x, %y 37 br i1 %cmp, label %ifelse, label %ifthen 38 39ifthen: ; preds = %entry 40 br label %ifend 41 42ifelse: ; preds = %entry 43 %tmp3 = load i8, ptr @g_3 ; <i8> [#uses=0] 44 store i8 %tmp3, ptr %A 45 br label %afterfor 46 47forcond: ; preds = %forinc 48 br i1 false, label %afterfor, label %forbody 49 50forbody: ; preds = %forcond 51 br label %forinc 52 53forinc: ; preds = %forbody 54 br label %forcond 55 56afterfor: ; preds = %forcond, %forcond.thread 57 %tmp10 = load i8, ptr @g_3 ; <i8> [#uses=0] 58 ret i8 %tmp10 59 60ifend: ; preds = %afterfor, %ifthen 61 ret i8 0 62} 63