259 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><allow-partial>' -disable-output %s 2>&1 | FileCheck %s3 4 5define void @dependency_check_and_runtime_checks_needed_select_of_invariant_ptrs(ptr %a, ptr %b, ptr %c, i64 %offset, i64 %n) {6; CHECK-LABEL: 'dependency_check_and_runtime_checks_needed_select_of_invariant_ptrs'7; CHECK-NEXT: loop:8; CHECK-NEXT: Memory dependences are safe with run-time checks9; CHECK-NEXT: Dependences:10; CHECK-NEXT: Run-time memory checks:11; CHECK-NEXT: Check 0:12; CHECK-NEXT: Comparing group GRP0:13; CHECK-NEXT: %gep.a.iv = getelementptr inbounds float, ptr %a, i64 %iv14; CHECK-NEXT: Against group GRP1:15; CHECK-NEXT: %select = select i1 %cmp, ptr %b, ptr %c16; CHECK-NEXT: Check 1:17; CHECK-NEXT: Comparing group GRP0:18; CHECK-NEXT: %gep.a.iv = getelementptr inbounds float, ptr %a, i64 %iv19; CHECK-NEXT: Against group GRP2:20; CHECK-NEXT: %select = select i1 %cmp, ptr %b, ptr %c21; CHECK-NEXT: Check 2:22; CHECK-NEXT: Comparing group GRP0:23; CHECK-NEXT: %gep.a.iv = getelementptr inbounds float, ptr %a, i64 %iv24; CHECK-NEXT: Against group GRP3:25; CHECK-NEXT: %gep.a.iv.off = getelementptr inbounds float, ptr %a, i64 %iv.offset26; CHECK-NEXT: Check 3:27; CHECK-NEXT: Comparing group GRP1:28; CHECK-NEXT: %select = select i1 %cmp, ptr %b, ptr %c29; CHECK-NEXT: Against group GRP2:30; CHECK-NEXT: %select = select i1 %cmp, ptr %b, ptr %c31; CHECK-NEXT: Check 4:32; CHECK-NEXT: Comparing group GRP1:33; CHECK-NEXT: %select = select i1 %cmp, ptr %b, ptr %c34; CHECK-NEXT: Against group GRP3:35; CHECK-NEXT: %gep.a.iv.off = getelementptr inbounds float, ptr %a, i64 %iv.offset36; CHECK-NEXT: Check 5:37; CHECK-NEXT: Comparing group GRP2:38; CHECK-NEXT: %select = select i1 %cmp, ptr %b, ptr %c39; CHECK-NEXT: Against group GRP3:40; CHECK-NEXT: %gep.a.iv.off = getelementptr inbounds float, ptr %a, i64 %iv.offset41; CHECK-NEXT: Grouped accesses:42; CHECK-NEXT: Group GRP0:43; CHECK-NEXT: (Low: %a High: ((4 * %n) + %a))44; CHECK-NEXT: Member: {%a,+,4}<nuw><%loop>45; CHECK-NEXT: Group GRP1:46; CHECK-NEXT: (Low: %b High: (4 + %b))47; CHECK-NEXT: Member: %b48; CHECK-NEXT: Group GRP2:49; CHECK-NEXT: (Low: %c High: (4 + %c))50; CHECK-NEXT: Member: %c51; CHECK-NEXT: Group GRP3:52; CHECK-NEXT: (Low: ((4 * %offset) + %a) High: ((4 * %offset) + (4 * %n) + %a))53; CHECK-NEXT: Member: {((4 * %offset) + %a),+,4}<%loop>54; CHECK-EMPTY:55; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.56; CHECK-NEXT: SCEV assumptions:57; CHECK-EMPTY:58; CHECK-NEXT: Expressions re-written:59;60entry:61 br label %loop62 63loop:64 %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]65 %gep.a.iv = getelementptr inbounds float, ptr %a, i64 %iv66 %l1 = load float, ptr %gep.a.iv, align 467 %iv.offset = add i64 %iv, %offset68 %gep.a.iv.off = getelementptr inbounds float, ptr %a, i64 %iv.offset69 %l2 = load float, ptr %gep.a.iv.off, align 470 %ad = fadd fast float %l1, %l271 store float %ad, ptr %gep.a.iv, align 472 %cmp = fcmp ult float %l1, 10.073 %select = select i1 %cmp, ptr %b, ptr %c74 store float 0.0, ptr %select75 %iv.next = add nuw nsw i64 %iv, 176 %exitcond = icmp eq i64 %iv.next, %n77 br i1 %exitcond, label %exit, label %loop78 79exit:80 ret void81}82 83define void @dependency_check_and_runtime_checks_needed_select_of_ptr_add_recs(ptr %a, ptr %b, ptr %c, i64 %offset, i64 %n) {84; CHECK-LABEL: 'dependency_check_and_runtime_checks_needed_select_of_ptr_add_recs'85; CHECK-NEXT: loop:86; CHECK-NEXT: Memory dependences are safe with run-time checks87; CHECK-NEXT: Dependences:88; CHECK-NEXT: Run-time memory checks:89; CHECK-NEXT: Check 0:90; CHECK-NEXT: Comparing group GRP0:91; CHECK-NEXT: %gep.a.iv = getelementptr inbounds float, ptr %a, i64 %iv92; CHECK-NEXT: Against group GRP1:93; CHECK-NEXT: %select = select i1 %cmp, ptr %gep.b, ptr %gep.c94; CHECK-NEXT: Check 1:95; CHECK-NEXT: Comparing group GRP0:96; CHECK-NEXT: %gep.a.iv = getelementptr inbounds float, ptr %a, i64 %iv97; CHECK-NEXT: Against group GRP2:98; CHECK-NEXT: %select = select i1 %cmp, ptr %gep.b, ptr %gep.c99; CHECK-NEXT: Check 2:100; CHECK-NEXT: Comparing group GRP0:101; CHECK-NEXT: %gep.a.iv = getelementptr inbounds float, ptr %a, i64 %iv102; CHECK-NEXT: Against group GRP3:103; CHECK-NEXT: %gep.a.iv.off = getelementptr inbounds float, ptr %a, i64 %iv.offset104; CHECK-NEXT: Check 3:105; CHECK-NEXT: Comparing group GRP1:106; CHECK-NEXT: %select = select i1 %cmp, ptr %gep.b, ptr %gep.c107; CHECK-NEXT: Against group GRP2:108; CHECK-NEXT: %select = select i1 %cmp, ptr %gep.b, ptr %gep.c109; CHECK-NEXT: Check 4:110; CHECK-NEXT: Comparing group GRP1:111; CHECK-NEXT: %select = select i1 %cmp, ptr %gep.b, ptr %gep.c112; CHECK-NEXT: Against group GRP3:113; CHECK-NEXT: %gep.a.iv.off = getelementptr inbounds float, ptr %a, i64 %iv.offset114; CHECK-NEXT: Check 5:115; CHECK-NEXT: Comparing group GRP2:116; CHECK-NEXT: %select = select i1 %cmp, ptr %gep.b, ptr %gep.c117; CHECK-NEXT: Against group GRP3:118; CHECK-NEXT: %gep.a.iv.off = getelementptr inbounds float, ptr %a, i64 %iv.offset119; CHECK-NEXT: Grouped accesses:120; CHECK-NEXT: Group GRP0:121; CHECK-NEXT: (Low: %a High: ((4 * %n) + %a))122; CHECK-NEXT: Member: {%a,+,4}<nuw><%loop>123; CHECK-NEXT: Group GRP1:124; CHECK-NEXT: (Low: %b High: ((4 * %n) + %b))125; CHECK-NEXT: Member: {%b,+,4}<%loop>126; CHECK-NEXT: Group GRP2:127; CHECK-NEXT: (Low: %c High: ((4 * %n) + %c))128; CHECK-NEXT: Member: {%c,+,4}<%loop>129; CHECK-NEXT: Group GRP3:130; CHECK-NEXT: (Low: ((4 * %offset) + %a) High: ((4 * %offset) + (4 * %n) + %a))131; CHECK-NEXT: Member: {((4 * %offset) + %a),+,4}<%loop>132; CHECK-EMPTY:133; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.134; CHECK-NEXT: SCEV assumptions:135; CHECK-EMPTY:136; CHECK-NEXT: Expressions re-written:137;138entry:139 br label %loop140 141loop:142 %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]143 %gep.a.iv = getelementptr inbounds float, ptr %a, i64 %iv144 %l1 = load float, ptr %gep.a.iv, align 4145 %iv.offset = add i64 %iv, %offset146 %gep.a.iv.off = getelementptr inbounds float, ptr %a, i64 %iv.offset147 %l2 = load float, ptr %gep.a.iv.off, align 4148 %ad = fadd fast float %l1, %l2149 store float %ad, ptr %gep.a.iv, align 4150 %gep.b = getelementptr inbounds float, ptr %b, i64 %iv151 %gep.c = getelementptr inbounds float, ptr %c, i64 %iv152 %cmp = fcmp ult float %l1, 10.0153 %select = select i1 %cmp, ptr %gep.b, ptr %gep.c154 store float 0.0, ptr %select155 %iv.next = add nuw nsw i64 %iv, 1156 %exitcond = icmp eq i64 %iv.next, %n157 br i1 %exitcond, label %exit, label %loop158 159exit:160 ret void161}162 163define void @dependency_check_and_runtime_checks_needed_select_of_ptr_add_recs_may_wrap_1(ptr %a, ptr %b, ptr %c, i64 %offset, i64 %n) {164; CHECK-LABEL: 'dependency_check_and_runtime_checks_needed_select_of_ptr_add_recs_may_wrap_1'165; CHECK-NEXT: loop:166; CHECK-NEXT: Report: cannot identify array bounds167; CHECK-NEXT: Dependences:168; CHECK-NEXT: Run-time memory checks:169; CHECK-NEXT: Grouped accesses:170; CHECK-NEXT: Group GRP0:171; CHECK-NEXT: (Low: ((4 * %offset) + %a) High: ((4 * %offset) + (4 * %n) + %a))172; CHECK-NEXT: Member: {((4 * %offset) + %a),+,4}<%loop>173; CHECK-NEXT: Group GRP1:174; CHECK-NEXT: (Low: %a High: ((4 * %n) + %a))175; CHECK-NEXT: Member: {%a,+,4}<nuw><%loop>176; CHECK-NEXT: Member: {%a,+,4}<nuw><%loop>177; CHECK-NEXT: Generated run-time checks are incomplete178; CHECK-EMPTY:179; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.180; CHECK-NEXT: SCEV assumptions:181; CHECK-EMPTY:182; CHECK-NEXT: Expressions re-written:183;184entry:185 br label %loop186 187loop:188 %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]189 %iv2 = phi i64 [ 0, %entry ], [ %iv2.next, %loop ]190 %gep.a.iv = getelementptr inbounds float, ptr %a, i64 %iv191 %l1 = load float, ptr %gep.a.iv, align 4192 %iv.offset = add i64 %iv, %offset193 %gep.a.iv.off = getelementptr inbounds float, ptr %a, i64 %iv.offset194 %l2 = load float, ptr %gep.a.iv.off, align 4195 %ad = fadd fast float %l1, %l2196 store float %ad, ptr %gep.a.iv, align 4197 %gep.b = getelementptr float, ptr %b, i64 %iv2198 %gep.c = getelementptr inbounds float, ptr %c, i64 %iv199 %cmp = fcmp ult float %l1, 10.0200 %select = select i1 %cmp, ptr %gep.b, ptr %gep.c201 store float 0.0, ptr %select202 %iv.next = add nuw nsw i64 %iv, 1203 %iv2.next = add i64 %iv2, 2204 %exitcond = icmp eq i64 %iv.next, %n205 br i1 %exitcond, label %exit, label %loop206 207exit:208 ret void209}210 211 212define void @dependency_check_and_runtime_checks_needed_select_of_ptr_add_recs_may_wrap_2(ptr %a, ptr %b, ptr %c, i64 %offset, i64 %n) {213; CHECK-LABEL: 'dependency_check_and_runtime_checks_needed_select_of_ptr_add_recs_may_wrap_2'214; CHECK-NEXT: loop:215; CHECK-NEXT: Report: cannot identify array bounds216; CHECK-NEXT: Dependences:217; CHECK-NEXT: Run-time memory checks:218; CHECK-NEXT: Grouped accesses:219; CHECK-NEXT: Group GRP0:220; CHECK-NEXT: (Low: ((4 * %offset) + %a) High: ((4 * %offset) + (4 * %n) + %a))221; CHECK-NEXT: Member: {((4 * %offset) + %a),+,4}<%loop>222; CHECK-NEXT: Group GRP1:223; CHECK-NEXT: (Low: %a High: ((4 * %n) + %a))224; CHECK-NEXT: Member: {%a,+,4}<nuw><%loop>225; CHECK-NEXT: Member: {%a,+,4}<nuw><%loop>226; CHECK-NEXT: Generated run-time checks are incomplete227; CHECK-EMPTY:228; CHECK-NEXT: Non vectorizable stores to invariant address were not found in loop.229; CHECK-NEXT: SCEV assumptions:230; CHECK-EMPTY:231; CHECK-NEXT: Expressions re-written:232;233entry:234 br label %loop235 236loop:237 %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]238 %iv2 = phi i64 [ 0, %entry ], [ %iv2.next, %loop ]239 %gep.a.iv = getelementptr inbounds float, ptr %a, i64 %iv240 %l1 = load float, ptr %gep.a.iv, align 4241 %iv.offset = add i64 %iv, %offset242 %gep.a.iv.off = getelementptr inbounds float, ptr %a, i64 %iv.offset243 %l2 = load float, ptr %gep.a.iv.off, align 4244 %ad = fadd fast float %l1, %l2245 store float %ad, ptr %gep.a.iv, align 4246 %gep.b = getelementptr inbounds float, ptr %b, i64 %iv247 %gep.c = getelementptr inbounds float, ptr %c, i64 %iv2248 %cmp = fcmp ult float %l1, 10.0249 %select = select i1 %cmp, ptr %gep.b, ptr %gep.c250 store float 0.0, ptr %select251 %iv.next = add nuw nsw i64 %iv, 1252 %iv2.next = add i64 %iv2, 2253 %exitcond = icmp eq i64 %iv.next, %n254 br i1 %exitcond, label %exit, label %loop255 256exit:257 ret void258}259