142 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2;; Ensure we don't change after value numbering by accidentally deleting the wrong expression.3; RUN: opt -passes=newgvn -S %s | FileCheck %s4define void @fn1(i1 %arg) local_unnamed_addr {5; CHECK-LABEL: @fn1(6; CHECK-NEXT: entry:7; CHECK-NEXT: br label [[FOR_COND_PREHEADER:%.*]]8; CHECK: while.cond:9; CHECK-NEXT: br label [[FOR_COND_PREHEADER]]10; CHECK: for.cond.preheader:11; CHECK-NEXT: [[H_031:%.*]] = phi i32 [ 5, [[ENTRY:%.*]] ], [ [[H_127:%.*]], [[WHILE_COND:%.*]] ]12; CHECK-NEXT: br label [[FOR_BODY:%.*]]13; CHECK: for.body:14; CHECK-NEXT: [[H_128:%.*]] = phi i32 [ [[H_031]], [[FOR_COND_PREHEADER]] ], [ [[H_2:%.*]], [[FOR_INC:%.*]] ]15; CHECK-NEXT: br label [[IF_THEN:%.*]]16; CHECK: if.then:17; CHECK-NEXT: br i1 false, label [[L_LOOPEXIT:%.*]], label [[IF_END:%.*]]18; CHECK: if.end:19; CHECK-NEXT: br i1 [[ARG:%.*]], label [[FOR_INC]], label [[IF_END9:%.*]]20; CHECK: if.end9:21; CHECK-NEXT: br label [[FOR_INC]]22; CHECK: for.inc:23; CHECK-NEXT: [[H_2]] = phi i32 [ [[H_128]], [[IF_END]] ], [ 0, [[IF_END9]] ]24; CHECK-NEXT: br i1 [[ARG]], label [[WHILE_COND10_LOOPEXIT:%.*]], label [[FOR_BODY]]25; CHECK: while.cond10.loopexit:26; CHECK-NEXT: br label [[WHILE_COND10:%.*]]27; CHECK: while.cond10:28; CHECK-NEXT: [[H_127]] = phi i32 [ [[H_126:%.*]], [[IF_END18:%.*]] ], [ [[H_125:%.*]], [[L:%.*]] ], [ [[H_2]], [[WHILE_COND10_LOOPEXIT]] ]29; CHECK-NEXT: br i1 [[ARG]], label [[WHILE_COND]], label [[WHILE_BODY12:%.*]]30; CHECK: while.body12:31; CHECK-NEXT: br i1 false, label [[IF_END18]], label [[L]]32; CHECK: L.loopexit:33; CHECK-NEXT: store i8 poison, ptr null, align 134; CHECK-NEXT: br label [[L]]35; CHECK: L:36; CHECK-NEXT: [[H_125]] = phi i32 [ [[H_127]], [[WHILE_BODY12]] ], [ poison, [[L_LOOPEXIT]] ]37; CHECK-NEXT: br i1 [[ARG]], label [[WHILE_COND10]], label [[IF_END18]]38; CHECK: if.end18:39; CHECK-NEXT: [[H_126]] = phi i32 [ [[H_125]], [[L]] ], [ poison, [[WHILE_BODY12]] ]40; CHECK-NEXT: br label [[WHILE_COND10]]41;42entry:43 br label %for.cond.preheader44 45while.cond: ; preds = %while.cond1046 br label %for.cond.preheader47 48for.cond.preheader: ; preds = %while.cond, %entry49 %h.031 = phi i32 [ 5, %entry ], [ %h.127, %while.cond ]50 br label %for.body51 52for.body: ; preds = %for.inc, %for.cond.preheader53 %h.128 = phi i32 [ %h.031, %for.cond.preheader ], [ %h.2, %for.inc ]54 br label %if.then55 56if.then: ; preds = %for.body57 br i1 false, label %L.loopexit, label %if.end58 59if.end: ; preds = %if.then60 br i1 %arg, label %for.inc, label %if.end961 62if.end9: ; preds = %if.end63 br label %for.inc64 65for.inc: ; preds = %if.end9, %if.end66 %h.2 = phi i32 [ %h.128, %if.end ], [ 0, %if.end9 ]67 br i1 %arg, label %while.cond10.loopexit, label %for.body68 69while.cond10.loopexit: ; preds = %for.inc70 %h.2.lcssa = phi i32 [ %h.2, %for.inc ]71 br label %while.cond1072 73while.cond10: ; preds = %if.end18, %L, %while.cond10.loopexit74 %h.127 = phi i32 [ %h.126, %if.end18 ], [ %h.125, %L ], [ %h.2.lcssa, %while.cond10.loopexit ]75 br i1 %arg, label %while.cond, label %while.body1276 77while.body12: ; preds = %while.cond1078 br i1 %arg, label %if.end18, label %L79 80L.loopexit: ; preds = %if.then81 br label %L82 83L: ; preds = %L.loopexit, %while.body1284 %h.125 = phi i32 [ %h.127, %while.body12 ], [ undef, %L.loopexit ]85 br i1 %arg, label %while.cond10, label %if.end1886 87if.end18: ; preds = %L, %while.body1288 %h.126 = phi i32 [ %h.125, %L ], [ %h.127, %while.body12 ]89 br label %while.cond1090}91 92define void @hoge() local_unnamed_addr {93; CHECK-LABEL: @hoge(94; CHECK-NEXT: bb:95; CHECK-NEXT: br label [[BB1:%.*]]96; CHECK: bb1:97; CHECK-NEXT: [[TMP:%.*]] = phi i64 [ 0, [[BB:%.*]] ], [ [[TMP2:%.*]], [[BB1]] ]98; CHECK-NEXT: [[TMP2]] = add nuw nsw i64 [[TMP]], 199; CHECK-NEXT: br label [[BB1]]100;101bb:102 br label %bb1103 104bb1: ; preds = %bb1, %bb105 %tmp = phi i64 [ 0, %bb ], [ %tmp2, %bb1 ]106 %tmp2 = add nuw nsw i64 %tmp, 1107 br label %bb1108}109 110define void @a(i1 %arg) {111; CHECK-LABEL: @a(112; CHECK-NEXT: b:113; CHECK-NEXT: store ptr null, ptr null, align 8114; CHECK-NEXT: br label [[D:%.*]]115; CHECK: d:116; CHECK-NEXT: [[I:%.*]] = phi ptr [ null, [[B:%.*]] ], [ [[E:%.*]], [[F:%.*]] ]117; CHECK-NEXT: br i1 [[ARG:%.*]], label [[F]], label [[G:%.*]]118; CHECK: g:119; CHECK-NEXT: store ptr [[I]], ptr null, align 8120; CHECK-NEXT: unreachable121; CHECK: f:122; CHECK-NEXT: [[E]] = getelementptr i8, ptr [[I]], i64 1123; CHECK-NEXT: br label [[D]]124;125b:126 store ptr null, ptr null127 br label %d128 129d: ; preds = %f, %b130 %i = phi ptr [ null, %b ], [ %e, %f ]131 br i1 %arg, label %f, label %g132 133g: ; preds = %d134 %h = phi ptr [ %i, %d ]135 store ptr %h, ptr null136 unreachable137 138f: ; preds = %d139 %e = getelementptr i8, ptr %i, i64 1140 br label %d141}142