1 ; RUN: opt -S -gvn-hoist -newgvn < %s | FileCheck %s 2 3 ; Check that store hoisting works: there should be only one store left. 4 ; CHECK-LABEL: @getopt 5 ; CHECK: store i32 6 ; CHECK-NOT: store i32 7 8 @optind = external global i32, align 4 9 10 define void @getopt() { 11 bb: 12 br label %bb1 13 14 bb1: ; preds = %bb 15 br i1 undef, label %bb2, label %bb3 16 17 bb2: ; preds = %bb1 18 br label %bb13 19 20 bb3: ; preds = %bb1 21 br i1 undef, label %bb4, label %bb9 22 23 bb4: ; preds = %bb3 24 %tmp = load i32, i32* @optind, align 4 25 br i1 undef, label %bb5, label %bb7 26 27 bb5: ; preds = %bb4 28 %tmp6 = add nsw i32 %tmp, 1 29 store i32 %tmp6, i32* @optind, align 4 30 br label %bb12 31 32 bb7: ; preds = %bb4 33 %tmp8 = add nsw i32 %tmp, 1 34 store i32 %tmp8, i32* @optind, align 4 35 br label %bb13 36 37 bb9: ; preds = %bb3 38 %tmp10 = load i32, i32* @optind, align 4 39 %tmp11 = add nsw i32 %tmp10, 1 40 store i32 %tmp11, i32* @optind, align 4 41 br label %bb12 42 43 bb12: ; preds = %bb9, %bb5 44 br label %bb13 45 46 bb13: ; preds = %bb12, %bb7, %bb2 47 ret void 48 } 49 50 @GlobalVar = internal global float 1.000000e+00 51 52 ; Check that we hoist stores and remove the MSSA phi node. 53 ; CHECK-LABEL: @hoistStoresUpdateMSSA 54 ; CHECK: store float 55 ; CHECK-NOT: store float 56 define float @hoistStoresUpdateMSSA(float %d) { 57 entry: 58 store float 0.000000e+00, float* @GlobalVar 59 %cmp = fcmp oge float %d, 0.000000e+00 60 br i1 %cmp, label %if.then, label %if.end 61 62 if.then: 63 store float 0.000000e+00, float* @GlobalVar 64 br label %if.end 65 66 if.end: 67 %tmp = load float, float* @GlobalVar, align 4 68 ret float %tmp 69 } 70