brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.5 KiB · 7e7bc1d Raw
335 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 52; RUN: opt -passes='print<access-info>' %s -disable-output 2>&1 | FileCheck %s3 4target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32"5 6; {0,+,3} [nssw] implies {0,+,2} [nssw]7define void @wrap_check_iv.3_implies_iv.2(i32 noundef %N, ptr %dst, ptr %src) {8; CHECK-LABEL: 'wrap_check_iv.3_implies_iv.2'9; CHECK-NEXT:    loop:10; CHECK-NEXT:      Memory dependences are safe with run-time checks11; CHECK-NEXT:      Dependences:12; CHECK-NEXT:      Run-time memory checks:13; CHECK-NEXT:      Check 0:14; CHECK-NEXT:        Comparing group GRP0:15; CHECK-NEXT:          %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.316; CHECK-NEXT:        Against group GRP1:17; CHECK-NEXT:          %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.218; CHECK-NEXT:      Grouped accesses:19; CHECK-NEXT:        Group GRP0:20; CHECK-NEXT:          (Low: %dst High: (4 + (12 * (zext i32 (-1 + %N) to i64))<nuw><nsw> + %dst))21; CHECK-NEXT:            Member: {%dst,+,12}<%loop>22; CHECK-NEXT:        Group GRP1:23; CHECK-NEXT:          (Low: %src High: (4 + (8 * (zext i32 (-1 + %N) to i64))<nuw><nsw> + %src))24; CHECK-NEXT:            Member: {%src,+,8}<%loop>25; CHECK-EMPTY:26; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.27; CHECK-NEXT:      SCEV assumptions:28; CHECK-NEXT:      {0,+,3}<%loop> Added Flags: <nssw>29; CHECK-EMPTY:30; CHECK-NEXT:      Expressions re-written:31; CHECK-NEXT:      [PSE] %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.2:32; CHECK-NEXT:        ((4 * (sext i32 {0,+,2}<%loop> to i64))<nsw> + %src)33; CHECK-NEXT:        --> {%src,+,8}<%loop>34; CHECK-NEXT:      [PSE] %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.3:35; CHECK-NEXT:        ((4 * (sext i32 {0,+,3}<%loop> to i64))<nsw> + %dst)36; CHECK-NEXT:        --> {%dst,+,12}<%loop>37;38entry:39  br label %loop40 41loop:42  %iv.1 = phi i32 [ 0, %entry ], [ %iv.1.next, %loop ]43  %iv.2 = phi i32 [ 0, %entry ], [ %iv.2.next, %loop ]44  %iv.3 = phi i32 [ 0, %entry ], [ %iv.3.next, %loop ]45  %ext.iv.2 = sext i32 %iv.2 to i6446  %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.247  %l = load i32, ptr %gep.iv.2, align 448  %ext.iv.3 = sext i32 %iv.3 to i6449  %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.350  store i32 %l, ptr %gep.iv.3, align 451  %iv.1.next = add nuw nsw i32 %iv.1, 152  %iv.2.next = add i32 %iv.2, 253  %iv.3.next = add i32 %iv.3, 354  %ec = icmp eq i32 %iv.1.next, %N55  br i1 %ec, label %exit, label %loop56 57exit:58  ret void59}60 61; {2,+,2} [nssw]  implies {0,+,2} [nssw].62define void @wrap_check_iv.3_implies_iv.2_different_start(i32 noundef %N, ptr %dst, ptr %src) {63; CHECK-LABEL: 'wrap_check_iv.3_implies_iv.2_different_start'64; CHECK-NEXT:    loop:65; CHECK-NEXT:      Memory dependences are safe with run-time checks66; CHECK-NEXT:      Dependences:67; CHECK-NEXT:      Run-time memory checks:68; CHECK-NEXT:      Check 0:69; CHECK-NEXT:        Comparing group GRP0:70; CHECK-NEXT:          %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.371; CHECK-NEXT:        Against group GRP1:72; CHECK-NEXT:          %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.273; CHECK-NEXT:      Grouped accesses:74; CHECK-NEXT:        Group GRP0:75; CHECK-NEXT:          (Low: (12 + %dst) High: (16 + (8 * (zext i32 (-1 + %N) to i64))<nuw><nsw> + %dst))76; CHECK-NEXT:            Member: {(12 + %dst),+,8}<%loop>77; CHECK-NEXT:        Group GRP1:78; CHECK-NEXT:          (Low: %src High: (4 + (8 * (zext i32 (-1 + %N) to i64))<nuw><nsw> + %src))79; CHECK-NEXT:            Member: {%src,+,8}<%loop>80; CHECK-EMPTY:81; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.82; CHECK-NEXT:      SCEV assumptions:83; CHECK-NEXT:      {2,+,2}<%loop> Added Flags: <nssw>84; CHECK-EMPTY:85; CHECK-NEXT:      Expressions re-written:86; CHECK-NEXT:      [PSE] %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.2:87; CHECK-NEXT:        ((4 * (sext i32 {0,+,2}<%loop> to i64))<nsw> + %src)88; CHECK-NEXT:        --> {%src,+,8}<%loop>89; CHECK-NEXT:      [PSE] %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.3:90; CHECK-NEXT:        (4 + (4 * (sext i32 {2,+,2}<%loop> to i64))<nsw> + %dst)91; CHECK-NEXT:        --> {(12 + %dst),+,8}<%loop>92;93entry:94  br label %loop95 96loop:97  %iv.1 = phi i32 [ 0, %entry ], [ %iv.1.next, %loop ]98  %iv.2 = phi i32 [ 0, %entry ], [ %iv.2.next, %loop ]99  %iv.3 = phi i32 [ 3, %entry ], [ %iv.3.next, %loop ]100  %ext.iv.2 = sext i32 %iv.2 to i64101  %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.2102  %l = load i32, ptr %gep.iv.2, align 4103  %ext.iv.3 = sext i32 %iv.3 to i64104  %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.3105  store i32 %l, ptr %gep.iv.3, align 4106  %iv.1.next = add nuw nsw i32 %iv.1, 1107  %iv.2.next = add i32 %iv.2, 2108  %iv.3.next = add i32 %iv.3, 2109  %ec = icmp eq i32 %iv.1.next, %N110  br i1 %ec, label %exit, label %loop111 112exit:113  ret void114}115 116; {0,+,3} [nssw] implies {0,+,2} [nssw].117define void @wrap_check_iv.3_implies_iv.2_predicates_added_in_different_order(i32 noundef %N, ptr %dst, ptr %src) {118; CHECK-LABEL: 'wrap_check_iv.3_implies_iv.2_predicates_added_in_different_order'119; CHECK-NEXT:    loop:120; CHECK-NEXT:      Memory dependences are safe with run-time checks121; CHECK-NEXT:      Dependences:122; CHECK-NEXT:      Run-time memory checks:123; CHECK-NEXT:      Check 0:124; CHECK-NEXT:        Comparing group GRP0:125; CHECK-NEXT:          %gep.iv.2 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.2126; CHECK-NEXT:        Against group GRP1:127; CHECK-NEXT:          %gep.iv.3 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.3128; CHECK-NEXT:      Grouped accesses:129; CHECK-NEXT:        Group GRP0:130; CHECK-NEXT:          (Low: %dst High: (4 + (8 * (zext i32 (-1 + %N) to i64))<nuw><nsw> + %dst))131; CHECK-NEXT:            Member: {%dst,+,8}<%loop>132; CHECK-NEXT:        Group GRP1:133; CHECK-NEXT:          (Low: %src High: (4 + (12 * (zext i32 (-1 + %N) to i64))<nuw><nsw> + %src))134; CHECK-NEXT:            Member: {%src,+,12}<%loop>135; CHECK-EMPTY:136; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.137; CHECK-NEXT:      SCEV assumptions:138; CHECK-NEXT:      {0,+,3}<%loop> Added Flags: <nssw>139; CHECK-EMPTY:140; CHECK-NEXT:      Expressions re-written:141; CHECK-NEXT:      [PSE] %gep.iv.3 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.3:142; CHECK-NEXT:        ((4 * (sext i32 {0,+,3}<%loop> to i64))<nsw> + %src)143; CHECK-NEXT:        --> {%src,+,12}<%loop>144; CHECK-NEXT:      [PSE] %gep.iv.2 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.2:145; CHECK-NEXT:        ((4 * (sext i32 {0,+,2}<%loop> to i64))<nsw> + %dst)146; CHECK-NEXT:        --> {%dst,+,8}<%loop>147;148entry:149  br label %loop150 151loop:152  %iv.1 = phi i32 [ 0, %entry ], [ %iv.1.next, %loop ]153  %iv.2 = phi i32 [ 0, %entry ], [ %iv.2.next, %loop ]154  %iv.3 = phi i32 [ 0, %entry ], [ %iv.3.next, %loop ]155  %ext.iv.3 = sext i32 %iv.3 to i64156  %gep.iv.3 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.3157  %l = load i32, ptr %gep.iv.3, align 4158  %ext.iv.2 = sext i32 %iv.2 to i64159  %gep.iv.2 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.2160  store i32 %l, ptr %gep.iv.2, align 4161  %iv.1.next = add nuw nsw i32 %iv.1, 1162  %iv.2.next = add i32 %iv.2, 2163  %iv.3.next = add i32 %iv.3, 3164  %ec = icmp eq i32 %iv.1.next, %N165  br i1 %ec, label %exit, label %loop166 167exit:168  ret void169}170 171define void @wrap_check_iv.3_does_not_implies_iv.2_due_to_start(i32 noundef %N, ptr %dst, ptr %src) {172; CHECK-LABEL: 'wrap_check_iv.3_does_not_implies_iv.2_due_to_start'173; CHECK-NEXT:    loop:174; CHECK-NEXT:      Memory dependences are safe with run-time checks175; CHECK-NEXT:      Dependences:176; CHECK-NEXT:      Run-time memory checks:177; CHECK-NEXT:      Check 0:178; CHECK-NEXT:        Comparing group GRP0:179; CHECK-NEXT:          %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.3180; CHECK-NEXT:        Against group GRP1:181; CHECK-NEXT:          %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.2182; CHECK-NEXT:      Grouped accesses:183; CHECK-NEXT:        Group GRP0:184; CHECK-NEXT:          (Low: %dst High: (4 + (12 * (zext i32 (-1 + %N) to i64))<nuw><nsw> + %dst))185; CHECK-NEXT:            Member: {%dst,+,12}<%loop>186; CHECK-NEXT:        Group GRP1:187; CHECK-NEXT:          (Low: (40 + %src) High: (44 + (8 * (zext i32 (-1 + %N) to i64))<nuw><nsw> + %src))188; CHECK-NEXT:            Member: {(40 + %src),+,8}<%loop>189; CHECK-EMPTY:190; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.191; CHECK-NEXT:      SCEV assumptions:192; CHECK-NEXT:      {0,+,3}<%loop> Added Flags: <nssw>193; CHECK-NEXT:      {10,+,2}<%loop> Added Flags: <nssw>194; CHECK-EMPTY:195; CHECK-NEXT:      Expressions re-written:196; CHECK-NEXT:      [PSE] %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.2:197; CHECK-NEXT:        ((4 * (sext i32 {10,+,2}<%loop> to i64))<nsw> + %src)198; CHECK-NEXT:        --> {(40 + %src),+,8}<%loop>199; CHECK-NEXT:      [PSE] %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.3:200; CHECK-NEXT:        ((4 * (sext i32 {0,+,3}<%loop> to i64))<nsw> + %dst)201; CHECK-NEXT:        --> {%dst,+,12}<%loop>202;203entry:204  br label %loop205 206loop:207  %iv.1 = phi i32 [ 0, %entry ], [ %iv.1.next, %loop ]208  %iv.2 = phi i32 [ 10, %entry ], [ %iv.2.next, %loop ]209  %iv.3 = phi i32 [ 0, %entry ], [ %iv.3.next, %loop ]210  %ext.iv.2 = sext i32 %iv.2 to i64211  %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.2212  %l = load i32, ptr %gep.iv.2, align 4213  %ext.iv.3 = sext i32 %iv.3 to i64214  %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.3215  store i32 %l, ptr %gep.iv.3, align 4216  %iv.1.next = add nuw nsw i32 %iv.1, 1217  %iv.2.next = add i32 %iv.2, 2218  %iv.3.next = add i32 %iv.3, 3219  %ec = icmp eq i32 %iv.1.next, %N220  br i1 %ec, label %exit, label %loop221 222exit:223  ret void224}225 226define void @wrap_check_iv.3_does_not_imply_iv.2_due_to_start_negative(i32 noundef %N, ptr %dst, ptr %src) {227; CHECK-LABEL: 'wrap_check_iv.3_does_not_imply_iv.2_due_to_start_negative'228; CHECK-NEXT:    loop:229; CHECK-NEXT:      Memory dependences are safe with run-time checks230; CHECK-NEXT:      Dependences:231; CHECK-NEXT:      Run-time memory checks:232; CHECK-NEXT:      Check 0:233; CHECK-NEXT:        Comparing group GRP0:234; CHECK-NEXT:          %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.3235; CHECK-NEXT:        Against group GRP1:236; CHECK-NEXT:          %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.2237; CHECK-NEXT:      Grouped accesses:238; CHECK-NEXT:        Group GRP0:239; CHECK-NEXT:          (Low: (-4 + %dst) High: ((12 * (zext i32 (-1 + %N) to i64))<nuw><nsw> + %dst))240; CHECK-NEXT:            Member: {(-4 + %dst),+,12}<%loop>241; CHECK-NEXT:        Group GRP1:242; CHECK-NEXT:          (Low: %src High: (4 + (8 * (zext i32 (-1 + %N) to i64))<nuw><nsw> + %src))243; CHECK-NEXT:            Member: {%src,+,8}<%loop>244; CHECK-EMPTY:245; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.246; CHECK-NEXT:      SCEV assumptions:247; CHECK-NEXT:      {-1,+,3}<%loop> Added Flags: <nssw>248; CHECK-NEXT:      {0,+,2}<%loop> Added Flags: <nssw>249; CHECK-EMPTY:250; CHECK-NEXT:      Expressions re-written:251; CHECK-NEXT:      [PSE] %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.2:252; CHECK-NEXT:        ((4 * (sext i32 {0,+,2}<%loop> to i64))<nsw> + %src)253; CHECK-NEXT:        --> {%src,+,8}<%loop>254; CHECK-NEXT:      [PSE] %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.3:255; CHECK-NEXT:        ((4 * (sext i32 {-1,+,3}<%loop> to i64))<nsw> + %dst)256; CHECK-NEXT:        --> {(-4 + %dst),+,12}<%loop>257;258entry:259  br label %loop260 261loop:262  %iv.1 = phi i32 [ 0, %entry ], [ %iv.1.next, %loop ]263  %iv.2 = phi i32 [ 0, %entry ], [ %iv.2.next, %loop ]264  %iv.3 = phi i32 [ -1, %entry ], [ %iv.3.next, %loop ]265  %ext.iv.2 = sext i32 %iv.2 to i64266  %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.2267  %l = load i32, ptr %gep.iv.2, align 4268  %ext.iv.3 = sext i32 %iv.3 to i64269  %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.3270  store i32 %l, ptr %gep.iv.3, align 4271  %iv.1.next = add nuw nsw i32 %iv.1, 1272  %iv.2.next = add i32 %iv.2, 2273  %iv.3.next = add i32 %iv.3, 3274  %ec = icmp eq i32 %iv.1.next, %N275  br i1 %ec, label %exit, label %loop276 277exit:278  ret void279}280 281define void @wrap_check_iv.3_does_not_imply_iv.2_due_to_negative_step(i32 noundef %N, ptr %dst, ptr %src) {282; CHECK-LABEL: 'wrap_check_iv.3_does_not_imply_iv.2_due_to_negative_step'283; CHECK-NEXT:    loop:284; CHECK-NEXT:      Memory dependences are safe with run-time checks285; CHECK-NEXT:      Dependences:286; CHECK-NEXT:      Run-time memory checks:287; CHECK-NEXT:      Check 0:288; CHECK-NEXT:        Comparing group GRP0:289; CHECK-NEXT:          %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.3290; CHECK-NEXT:        Against group GRP1:291; CHECK-NEXT:          %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.2292; CHECK-NEXT:      Grouped accesses:293; CHECK-NEXT:        Group GRP0:294; CHECK-NEXT:          (Low: ((-4 * (zext i32 (-1 + %N) to i64))<nsw> + %dst) High: (4 + %dst))295; CHECK-NEXT:            Member: {%dst,+,-4}<%loop>296; CHECK-NEXT:        Group GRP1:297; CHECK-NEXT:          (Low: %src High: (4 + (8 * (zext i32 (-1 + %N) to i64))<nuw><nsw> + %src))298; CHECK-NEXT:            Member: {%src,+,8}<%loop>299; CHECK-EMPTY:300; CHECK-NEXT:      Non vectorizable stores to invariant address were not found in loop.301; CHECK-NEXT:      SCEV assumptions:302; CHECK-NEXT:      {0,+,-1}<%loop> Added Flags: <nssw>303; CHECK-NEXT:      {0,+,2}<%loop> Added Flags: <nssw>304; CHECK-EMPTY:305; CHECK-NEXT:      Expressions re-written:306; CHECK-NEXT:      [PSE] %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.2:307; CHECK-NEXT:        ((4 * (sext i32 {0,+,2}<%loop> to i64))<nsw> + %src)308; CHECK-NEXT:        --> {%src,+,8}<%loop>309; CHECK-NEXT:      [PSE] %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.3:310; CHECK-NEXT:        ((4 * (sext i32 {0,+,-1}<%loop> to i64))<nsw> + %dst)311; CHECK-NEXT:        --> {%dst,+,-4}<%loop>312;313entry:314  br label %loop315 316loop:317  %iv.1 = phi i32 [ 0, %entry ], [ %iv.1.next, %loop ]318  %iv.2 = phi i32 [ 0, %entry ], [ %iv.2.next, %loop ]319  %iv.3 = phi i32 [ 0, %entry ], [ %iv.3.next, %loop ]320  %ext.iv.2 = sext i32 %iv.2 to i64321  %gep.iv.2 = getelementptr inbounds i32, ptr %src, i64 %ext.iv.2322  %l = load i32, ptr %gep.iv.2, align 4323  %ext.iv.3 = sext i32 %iv.3 to i64324  %gep.iv.3 = getelementptr inbounds i32, ptr %dst, i64 %ext.iv.3325  store i32 %l, ptr %gep.iv.3, align 4326  %iv.1.next = add nuw nsw i32 %iv.1, 1327  %iv.2.next = add i32 %iv.2, 2328  %iv.3.next = add i32 %iv.3, -1329  %ec = icmp eq i32 %iv.1.next, %N330  br i1 %ec, label %exit, label %loop331 332exit:333  ret void334}335