brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.0 KiB · 046775e Raw
171 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 62; RUN: opt -passes=gvn -S < %s | FileCheck %s3 4target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n8:16:32-S64"5target triple = "thumbv7--linux-gnueabi"6 7%struct.a = type { i16, i16, [1 x %union.a] }8%union.a = type { i32 }9 10@length = external global [0 x i32], align 411 12; Function Attrs: nounwind13define fastcc void @foo(ptr nocapture readonly %x) {14; CHECK-LABEL: define fastcc void @foo(15; CHECK-SAME: ptr readonly captures(none) [[X:%.*]]) {16; CHECK-NEXT:  [[ENTRY:.*]]:17; CHECK-NEXT:    br label %[[BB0:.*]]18; CHECK:       [[BB0]]:19; CHECK-NEXT:    [[X_TR:%.*]] = phi ptr [ [[X]], %[[ENTRY]] ], [ null, %[[LAND_LHS_TRUE:.*]] ]20; CHECK-NEXT:    [[TMP0:%.*]] = load i16, ptr [[X_TR]], align 421; CHECK-NEXT:    [[CONV:%.*]] = zext i16 [[TMP0]] to i3222; CHECK-NEXT:    switch i32 [[CONV]], label %[[IF_END_50:.*]] [23; CHECK-NEXT:      i32 43, label %[[CLEANUP:.*]]24; CHECK-NEXT:      i32 52, label %[[IF_THEN_5:.*]]25; CHECK-NEXT:    ]26; CHECK:       [[IF_THEN_5]]:27; CHECK-NEXT:    br i1 undef, label %[[LAND_LHS_TRUE]], label %[[IF_THEN_26:.*]]28; CHECK:       [[LAND_LHS_TRUE]]:29; CHECK-NEXT:    br i1 undef, label %[[CLEANUP]], label %[[BB0]]30; CHECK:       [[IF_THEN_26]]:31; CHECK-NEXT:    br i1 undef, label %[[COND_END:.*]], label %[[COND_FALSE:.*]]32; CHECK:       [[COND_FALSE]]:33; CHECK-NEXT:    [[MODE:%.*]] = getelementptr inbounds [[STRUCT_A:%.*]], ptr [[X_TR]], i32 0, i32 134; CHECK-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[MODE]], align 235; CHECK-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 836; CHECK-NEXT:    br label %[[COND_END]]37; CHECK:       [[COND_END]]:38; CHECK-NEXT:    br i1 undef, label %[[IF_THEN_44:.*]], label %[[CLEANUP]]39; CHECK:       [[IF_THEN_44]]:40; CHECK-NEXT:    unreachable41; CHECK:       [[IF_END_50]]:42; CHECK-NEXT:    [[ARRAYIDX52:%.*]] = getelementptr inbounds [0 x i32], ptr @length, i32 0, i32 [[CONV]]43; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[ARRAYIDX52]], align 444; CHECK-NEXT:    br i1 undef, label %[[FOR_BODY_57:.*]], label %[[CLEANUP]]45; CHECK:       [[FOR_BODY_57]]:46; CHECK-NEXT:    [[I_2157:%.*]] = add nsw i32 [[TMP1]], -147; CHECK-NEXT:    unreachable48; CHECK:       [[CLEANUP]]:49; CHECK-NEXT:    ret void50;51entry:52  br label %bb053 54bb0:                                      ; preds = %land.lhs.true, %entry55  %x.tr = phi ptr [ %x, %entry ], [ null, %land.lhs.true ]56  %0 = load i16, ptr %x.tr, align 457  %conv = zext i16 %0 to i3258  switch i32 %conv, label %if.end.50 [59  i32 43, label %cleanup60  i32 52, label %if.then.561  ]62 63if.then.5:                                        ; preds = %bb064  br i1 undef, label %land.lhs.true, label %if.then.2665 66land.lhs.true:                                    ; preds = %if.then.567  br i1 undef, label %cleanup, label %bb068 69if.then.26:                                       ; preds = %if.then.570  %x.tr.lcssa163 = phi ptr [ %x.tr, %if.then.5 ]71  br i1 undef, label %cond.end, label %cond.false72 73cond.false:                                       ; preds = %if.then.2674  %mode = getelementptr inbounds %struct.a, ptr %x.tr.lcssa163, i32 0, i32 175  %bf.load = load i16, ptr %mode, align 276  %bf.shl = shl i16 %bf.load, 877  br label %cond.end78 79cond.end:                                         ; preds = %cond.false, %if.then.2680  br i1 undef, label %if.then.44, label %cleanup81 82if.then.44:                                       ; preds = %cond.end83  unreachable84 85if.end.50:                                        ; preds = %bb086  %conv.lcssa = phi i32 [ %conv, %bb0 ]87  %arrayidx52 = getelementptr inbounds [0 x i32], ptr @length, i32 0, i32 %conv.lcssa88  %1 = load i32, ptr %arrayidx52, align 489  br i1 undef, label %for.body.57, label %cleanup90 91for.body.57:                                      ; preds = %if.end.5092  %i.2157 = add nsw i32 %1, -193  unreachable94 95cleanup:                                          ; preds = %if.end.50, %cond.end, %land.lhs.true, %bb096  ret void97}98 99@yy_c_buf_p = external unnamed_addr global ptr, align 4100@dfg_text = external global ptr, align 4101 102define void @dfg_lex() {103; CHECK-LABEL: define void @dfg_lex() {104; CHECK-NEXT:  [[ENTRY:.*:]]105; CHECK-NEXT:    br label %[[WHILE_BODYTHREAD_PRE_SPLIT:.*]]106; CHECK:       [[WHILE_BODYTHREAD_PRE_SPLIT]]:107; CHECK-NEXT:    br i1 undef, label %[[WHILE_BODYTHREAD_PRE_SPLIT_IF_THEN_14_CRIT_EDGE:.*]], label %[[IF_END_15:.*]]108; CHECK:       [[WHILE_BODYTHREAD_PRE_SPLIT_IF_THEN_14_CRIT_EDGE]]:109; CHECK-NEXT:    [[V1_PRE:%.*]] = load i32, ptr @dfg_text, align 4110; CHECK-NEXT:    br label %[[IF_THEN_14:.*]]111; CHECK:       [[IF_THEN_14]]:112; CHECK-NEXT:    [[V1:%.*]] = phi i32 [ [[V1_PRE]], %[[WHILE_BODYTHREAD_PRE_SPLIT_IF_THEN_14_CRIT_EDGE]] ], [ [[SUB_PTR_RHS_CAST25:%.*]], %[[WHILE_END:.*]] ]113; CHECK-NEXT:    br label %[[IF_END_15]]114; CHECK:       [[IF_END_15]]:115; CHECK-NEXT:    [[V2:%.*]] = load ptr, ptr @yy_c_buf_p, align 4116; CHECK-NEXT:    br label %[[WHILE_COND_16:.*]]117; CHECK:       [[WHILE_COND_16]]:118; CHECK-NEXT:    br i1 undef, label %[[WHILE_COND_16]], label %[[WHILE_END]]119; CHECK:       [[WHILE_END]]:120; CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[V2]], i32 undef121; CHECK-NEXT:    store ptr [[ADD_PTR]], ptr @dfg_text, align 4122; CHECK-NEXT:    [[SUB_PTR_RHS_CAST25]] = ptrtoint ptr [[ADD_PTR]] to i32123; CHECK-NEXT:    [[SUB_PTR_SUB26:%.*]] = sub i32 0, [[SUB_PTR_RHS_CAST25]]124; CHECK-NEXT:    switch i32 undef, label %[[SW_DEFAULT:.*]] [125; CHECK-NEXT:      i32 65, label %[[WHILE_BODYTHREAD_PRE_SPLIT]]126; CHECK-NEXT:      i32 3, label %[[RETURN:.*]]127; CHECK-NEXT:      i32 57, label %[[WHILE_BODYTHREAD_PRE_SPLIT]]128; CHECK-NEXT:      i32 60, label %[[IF_THEN_14]]129; CHECK-NEXT:    ]130; CHECK:       [[SW_DEFAULT]]:131; CHECK-NEXT:    unreachable132; CHECK:       [[RETURN]]:133; CHECK-NEXT:    ret void134;135entry:136  br label %while.bodythread-pre-split137 138while.bodythread-pre-split:                       ; preds = %while.end, %while.end, %entry139  br i1 undef, label %if.then.14, label %if.end.15140 141if.then.14:                                       ; preds = %while.end, %while.bodythread-pre-split142  %v1 = load i32, ptr @dfg_text, align 4143  %sub.ptr.sub = sub i32 undef, %v1144  br label %if.end.15145 146if.end.15:                                        ; preds = %if.then.14, %while.bodythread-pre-split147  %v2 = load ptr, ptr @yy_c_buf_p, align 4148  br label %while.cond.16149 150while.cond.16:                                    ; preds = %while.cond.16, %if.end.15151  br i1 undef, label %while.cond.16, label %while.end152 153while.end:                                        ; preds = %while.cond.16154  %add.ptr = getelementptr inbounds i8, ptr %v2, i32 undef155  store ptr %add.ptr, ptr @dfg_text, align 4156  %sub.ptr.rhs.cast25 = ptrtoint ptr %add.ptr to i32157  %sub.ptr.sub26 = sub i32 0, %sub.ptr.rhs.cast25158  switch i32 undef, label %sw.default [159  i32 65, label %while.bodythread-pre-split160  i32 3, label %return161  i32 57, label %while.bodythread-pre-split162  i32 60, label %if.then.14163  ]164 165sw.default:                                       ; preds = %while.end166  unreachable167 168return:                                           ; preds = %while.end169  ret void170}171