1 ;RUN: opt -gvn -S < %s | FileCheck %s 2 3 target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n8:16:32-S64" 4 target triple = "thumbv7--linux-gnueabi" 5 6 %struct.a = type { i16, i16, [1 x %union.a] } 7 %union.a = type { i32 } 8 9 @length = external global [0 x i32], align 4 10 11 ; Function Attrs: nounwind 12 define fastcc void @foo(%struct.a* nocapture readonly %x) { 13 ;CHECK-LABEL: foo 14 entry: 15 br label %bb0 16 17 bb0: ; preds = %land.lhs.true, %entry 18 ;CHECK: bb0: 19 %x.tr = phi %struct.a* [ %x, %entry ], [ null, %land.lhs.true ] 20 %code1 = getelementptr inbounds %struct.a, %struct.a* %x.tr, i32 0, i32 0 21 %0 = load i16, i16* %code1, align 4 22 ; CHECK: load i32, i32* 23 %conv = zext i16 %0 to i32 24 switch i32 %conv, label %if.end.50 [ 25 i32 43, label %cleanup 26 i32 52, label %if.then.5 27 ] 28 29 if.then.5: ; preds = %bb0 30 br i1 undef, label %land.lhs.true, label %if.then.26 31 32 land.lhs.true: ; preds = %if.then.5 33 br i1 undef, label %cleanup, label %bb0 34 35 if.then.26: ; preds = %if.then.5 36 %x.tr.lcssa163 = phi %struct.a* [ %x.tr, %if.then.5 ] 37 br i1 undef, label %cond.end, label %cond.false 38 39 cond.false: ; preds = %if.then.26 40 ; CHECK: cond.false: 41 ; CHECK-NOT: load 42 %mode = getelementptr inbounds %struct.a, %struct.a* %x.tr.lcssa163, i32 0, i32 1 43 %bf.load = load i16, i16* %mode, align 2 44 %bf.shl = shl i16 %bf.load, 8 45 br label %cond.end 46 47 cond.end: ; preds = %cond.false, %if.then.26 48 br i1 undef, label %if.then.44, label %cleanup 49 50 if.then.44: ; preds = %cond.end 51 unreachable 52 53 if.end.50: ; preds = %bb0 54 ;%CHECK: if.end.50: 55 %conv.lcssa = phi i32 [ %conv, %bb0 ] 56 %arrayidx52 = getelementptr inbounds [0 x i32], [0 x i32]* @length, i32 0, i32 %conv.lcssa 57 %1 = load i32, i32* %arrayidx52, align 4 58 br i1 undef, label %for.body.57, label %cleanup 59 60 for.body.57: ; preds = %if.end.50 61 %i.2157 = add nsw i32 %1, -1 62 unreachable 63 64 cleanup: ; preds = %if.end.50, %cond.end, %land.lhs.true, %bb0 65 ret void 66 } 67 68 @yy_c_buf_p = external unnamed_addr global i8*, align 4 69 @dfg_text = external global i8*, align 4 70 71 define void @dfg_lex() { 72 ;CHECK-LABEL: dfg_lex 73 entry: 74 br label %while.bodythread-pre-split 75 76 while.bodythread-pre-split: ; preds = %while.end, %while.end, %entry 77 br i1 undef, label %if.then.14, label %if.end.15 78 79 if.then.14: ; preds = %while.end, %while.bodythread-pre-split 80 %v1 = load i32, i32* bitcast (i8** @dfg_text to i32*), align 4 81 %sub.ptr.sub = sub i32 undef, %v1 82 br label %if.end.15 83 84 if.end.15: ; preds = %if.then.14, %while.bodythread-pre-split 85 %v2 = load i8*, i8** @yy_c_buf_p, align 4 86 br label %while.cond.16 87 88 while.cond.16: ; preds = %while.cond.16, %if.end.15 89 br i1 undef, label %while.cond.16, label %while.end 90 91 while.end: ; preds = %while.cond.16 92 %add.ptr = getelementptr inbounds i8, i8* %v2, i32 undef 93 store i8* %add.ptr, i8** @dfg_text, align 4 94 %sub.ptr.rhs.cast25 = ptrtoint i8* %add.ptr to i32 95 %sub.ptr.sub26 = sub i32 0, %sub.ptr.rhs.cast25 96 switch i32 undef, label %sw.default [ 97 i32 65, label %while.bodythread-pre-split 98 i32 3, label %return 99 i32 57, label %while.bodythread-pre-split 100 i32 60, label %if.then.14 101 ] 102 103 sw.default: ; preds = %while.end 104 unreachable 105 106 return: ; preds = %while.end 107 ret void 108 } 109