1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -passes=licm < %s -S | FileCheck %s 3 4define void @test(ptr %arg, ptr %arg1) { 5; CHECK-LABEL: @test( 6; CHECK-NEXT: bb2: 7; CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARG1:%.*]], align 4, !invariant.group !0 8; CHECK-NEXT: br label [[BB5:%.*]] 9; CHECK: bb5: 10; CHECK-NEXT: [[TMP6:%.*]] = phi i64 [ 0, [[BB2:%.*]] ], [ [[TMP10:%.*]], [[BB5]] ] 11; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds i32, ptr [[ARG:%.*]], i64 [[TMP6]] 12; CHECK-NEXT: store i32 [[TMP3]], ptr [[TMP7]], align 8 13; CHECK-NEXT: [[TMP10]] = add nuw nsw i64 [[TMP6]], 1 14; CHECK-NEXT: [[TMP11:%.*]] = icmp eq i64 [[TMP10]], 200 15; CHECK-NEXT: br i1 [[TMP11]], label [[BB12:%.*]], label [[BB5]] 16; CHECK: bb12: 17; CHECK-NEXT: ret void 18; 19bb2: ; preds = %bb 20 br label %bb5 21 22bb5: ; preds = %bb5, %bb2 23 %tmp6 = phi i64 [ 0, %bb2 ], [ %tmp10, %bb5 ] 24 %tmp3 = load i32, ptr %arg1, align 4, !invariant.group !0 25 %tmp7 = getelementptr inbounds i32, ptr %arg, i64 %tmp6 26 store i32 %tmp3, ptr %tmp7, align 8 27 %tmp10 = add nuw nsw i64 %tmp6, 1 28 %tmp11 = icmp eq i64 %tmp10, 200 29 br i1 %tmp11, label %bb12, label %bb5 30 31bb12: ; preds = %bb5, %bb 32 ret void 33} 34 35 36define void @test_fail(ptr %arg, ptr %arg1) { 37; CHECK-LABEL: @test_fail( 38; CHECK-NEXT: bb2: 39; CHECK-NEXT: br label [[BB5:%.*]] 40; CHECK: bb5: 41; CHECK-NEXT: [[TMP6:%.*]] = phi i64 [ 0, [[BB2:%.*]] ], [ [[TMP10:%.*]], [[BB5]] ] 42; CHECK-NEXT: store i32 3, ptr [[ARG1:%.*]], align 4 43; CHECK-NEXT: [[TMP3:%.*]] = load i32, ptr [[ARG1]], align 4, !invariant.group !0 44; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds i32, ptr [[ARG:%.*]], i64 [[TMP6]] 45; CHECK-NEXT: store i32 [[TMP3]], ptr [[TMP7]], align 8 46; CHECK-NEXT: [[TMP10]] = add nuw nsw i64 [[TMP6]], 1 47; CHECK-NEXT: [[TMP11:%.*]] = icmp eq i64 [[TMP10]], 200 48; CHECK-NEXT: br i1 [[TMP11]], label [[BB12:%.*]], label [[BB5]] 49; CHECK: bb12: 50; CHECK-NEXT: ret void 51; 52bb2: ; preds = %bb 53 br label %bb5 54 55bb5: ; preds = %bb5, %bb2 56 %tmp6 = phi i64 [ 0, %bb2 ], [ %tmp10, %bb5 ] 57 store i32 3, ptr %arg1 58 %tmp3 = load i32, ptr %arg1, align 4, !invariant.group !0 59 %tmp7 = getelementptr inbounds i32, ptr %arg, i64 %tmp6 60 store i32 %tmp3, ptr %tmp7, align 8 61 %tmp10 = add nuw nsw i64 %tmp6, 1 62 %tmp11 = icmp eq i64 %tmp10, 200 63 br i1 %tmp11, label %bb12, label %bb5 64 65bb12: ; preds = %bb5, %bb 66 ret void 67} 68 69!0 = !{} 70