177 lines · plain
1; RUN: opt -S -passes=loop-rotate -verify-memoryssa < %s | FileCheck %s2; RUN: opt -S -passes='require<target-ir>,require<assumptions>,loop(loop-rotate)' < %s | FileCheck %s3; RUN: opt -S -passes='require<target-ir>,require<assumptions>,loop(loop-rotate)' -verify-memoryssa < %s | FileCheck %s4 5target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"6target triple = "x86_64-unknown-linux-gnu"7 8declare void @g(ptr)9 10define void @test_02(ptr nocapture %_pA) nounwind ssp {11; CHECK-LABEL: @test_02(12; CHECK: entry:13; CHECK: tail call void @llvm.experimental.noalias.scope.decl(metadata !2)14; CHECK: store i32 42, ptr %_pA, align 16, !alias.scope !215; CHECK: for.body:16; CHECK: tail call void @llvm.experimental.noalias.scope.decl(metadata !5)17; CHECK: store i32 0, ptr %array, align 16, !noalias !518; CHECK: tail call void @llvm.experimental.noalias.scope.decl(metadata !7)19; CHECK: store i32 42, ptr %_pA, align 16, !alias.scope !720; CHECK: for.end:21 22entry:23 %array = alloca [20 x i32], align 1624 br label %for.cond25 26for.cond: ; preds = %for.body, %entry27 %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]28 tail call void @llvm.experimental.noalias.scope.decl(metadata !2)29 store i32 42, ptr %_pA, align 16, !alias.scope !230 %cmp = icmp slt i32 %i.0, 10031 br i1 %cmp, label %for.body, label %for.end32 33for.body: ; preds = %for.cond34 store i32 0, ptr %array, align 16, !noalias !235 %inc = add nsw i32 %i.0, 136 br label %for.cond37 38for.end: ; preds = %for.cond39 %arrayidx.lcssa = phi ptr [ %array, %for.cond ]40 call void @g(ptr %arrayidx.lcssa) nounwind41 ret void42}43 44define void @test_03(ptr nocapture %_pA) nounwind ssp {45; CHECK-LABEL: @test_03(46; CHECK: entry:47; CHECK: for.body:48; CHECK: tail call void @llvm.experimental.noalias.scope.decl(metadata !5)49; CHECK: store i32 42, ptr %_pA, align 16, !alias.scope !550; CHECK: store i32 0, ptr %array, align 16, !noalias !551; CHECK: for.end:52 53entry:54 %array = alloca [20 x i32], align 1655 br label %for.cond56 57for.cond: ; preds = %for.body, %entry58 %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]59 %cmp = icmp slt i32 %i.0, 10060 br i1 %cmp, label %for.body, label %for.end61 62for.body: ; preds = %for.cond63 tail call void @llvm.experimental.noalias.scope.decl(metadata !2)64 store i32 42, ptr %_pA, align 16, !alias.scope !265 store i32 0, ptr %array, align 16, !noalias !266 %inc = add nsw i32 %i.0, 167 br label %for.cond68 69for.end: ; preds = %for.cond70 %arrayidx.lcssa = phi ptr [ %array, %for.cond ]71 call void @g(ptr %arrayidx.lcssa) nounwind72 ret void73}74 75define void @test_04(ptr nocapture %_pA) nounwind ssp {76; CHECK-LABEL: @test_04(77; CHECK: entry:78; CHECK: tail call void @llvm.experimental.noalias.scope.decl(metadata !9)79; CHECK: store i32 42, ptr %_pA, align 16, !alias.scope !980; CHECK: for.body:81; CHECK: tail call void @llvm.experimental.noalias.scope.decl(metadata !5)82; CHECK: store i32 0, ptr %array, align 16, !noalias !583; CHECK: store i32 43, ptr %_pA, align 16, !alias.scope !584; CHECK: tail call void @llvm.experimental.noalias.scope.decl(metadata !11)85; CHECK: store i32 42, ptr %_pA, align 16, !alias.scope !1186; CHECK: for.end:87entry:88 %array = alloca [20 x i32], align 1689 br label %for.cond90 91for.cond: ; preds = %for.body, %entry92 %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]93 tail call void @llvm.experimental.noalias.scope.decl(metadata !2)94 store i32 42, ptr %_pA, align 16, !alias.scope !295 %cmp = icmp slt i32 %i.0, 10096 br i1 %cmp, label %for.body, label %for.end97 98for.body: ; preds = %for.cond99 store i32 0, ptr %array, align 16, !noalias !2100 store i32 43, ptr %_pA, align 16, !alias.scope !2101 %inc = add nsw i32 %i.0, 1102 br label %for.cond103 104for.end: ; preds = %for.cond105 %arrayidx.lcssa = phi ptr [ %array, %for.cond ]106 call void @g(ptr %arrayidx.lcssa) nounwind107 ret void108}109 110define void @test_05(ptr nocapture %_pA) nounwind ssp {111; CHECK-LABEL: @test_05(112; CHECK: entry:113; CHECK: tail call void @llvm.experimental.noalias.scope.decl(metadata !13)114; CHECK: store i32 42, ptr %_pA, align 16, !alias.scope !13115; CHECK: for.body:116; CHECK: tail call void @llvm.experimental.noalias.scope.decl(metadata !5)117; CHECK: store i32 0, ptr %array, align 16, !noalias !5118; CHECK: store i32 43, ptr %_pA, align 16, !alias.scope !5119; CHECK: tail call void @llvm.experimental.noalias.scope.decl(metadata !15)120; CHECK: store i32 42, ptr %_pA, align 16, !alias.scope !15121; CHECK: for.end:122; CHECK: store i32 44, ptr %_pA, align 16, !alias.scope !5123 124entry:125 %array = alloca [20 x i32], align 16126 br label %for.cond127 128for.cond: ; preds = %for.body, %entry129 %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]130 tail call void @llvm.experimental.noalias.scope.decl(metadata !2)131 store i32 42, ptr %_pA, align 16, !alias.scope !2132 %cmp = icmp slt i32 %i.0, 100133 br i1 %cmp, label %for.body, label %for.end134 135for.body: ; preds = %for.cond136 store i32 0, ptr %array, align 16, !noalias !2137 store i32 43, ptr %_pA, align 16, !alias.scope !2138 %inc = add nsw i32 %i.0, 1139 br label %for.cond140 141for.end: ; preds = %for.cond142 %arrayidx.lcssa = phi ptr [ %array, %for.cond ]143 store i32 44, ptr %_pA, align 16, !alias.scope !2144 call void @g(ptr %arrayidx.lcssa) nounwind145 ret void146}147 148; Function Attrs: inaccessiblememonly nounwind149declare void @llvm.experimental.noalias.scope.decl(metadata)150 151!llvm.module.flags = !{!0}152!llvm.ident = !{!1}153 154!0 = !{i32 1, !"wchar_size", i32 4}155!1 = !{!"clang"}156!2 = !{!3}157!3 = distinct !{!3, !4, !"test_loop_rotate_XX: pA"}158!4 = distinct !{!4, !"test_loop_rotate_XX"}159 160; CHECK: !0 = !{i32 1, !"wchar_size", i32 4}161; CHECK: !1 = !{!"clang"}162; CHECK: !2 = !{!3}163; CHECK: !3 = distinct !{!3, !4, !"test_loop_rotate_XX: pA:pre.rot"}164; CHECK: !4 = distinct !{!4, !"test_loop_rotate_XX"}165; CHECK: !5 = !{!6}166; CHECK: !6 = distinct !{!6, !4, !"test_loop_rotate_XX: pA"}167; CHECK: !7 = !{!8}168; CHECK: !8 = distinct !{!8, !4, !"test_loop_rotate_XX: pA:h.rot"}169; CHECK: !9 = !{!10}170; CHECK: !10 = distinct !{!10, !4, !"test_loop_rotate_XX: pA:pre.rot"}171; CHECK: !11 = !{!12}172; CHECK: !12 = distinct !{!12, !4, !"test_loop_rotate_XX: pA:h.rot"}173; CHECK: !13 = !{!14}174; CHECK: !14 = distinct !{!14, !4, !"test_loop_rotate_XX: pA:pre.rot"}175; CHECK: !15 = !{!16}176; CHECK: !16 = distinct !{!16, !4, !"test_loop_rotate_XX: pA:h.rot"}177