brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · afd7bb2 Raw
106 lines · plain
1; RUN: opt < %s -aa-pipeline=basic-aa -passes=aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s2 3; BasicAA should detect NoAliases in PHIs and Selects.4 5; Two PHIs in the same block.6; CHECK-LABEL: Function: foo7; CHECK: NoAlias: double* %a, double* %b8define void @foo(i1 %m, ptr noalias %x, ptr noalias %y) {9entry:10  br i1 %m, label %true, label %false11 12true:13  br label %exit14 15false:16  br label %exit17 18exit:19  %a = phi ptr [ %x, %true ], [ %y, %false ]20  %b = phi ptr [ %x, %false ], [ %y, %true ]21  store volatile double 0.0, ptr %a22  store volatile double 1.0, ptr %b23  ret void24}25 26; Two selects with the same condition.27; CHECK-LABEL: Function: bar28; CHECK: NoAlias: double* %a, double* %b29define void @bar(i1 %m, ptr noalias %x, ptr noalias %y) {30entry:31  %a = select i1 %m, ptr %x, ptr %y32  %b = select i1 %m, ptr %y, ptr %x33  store volatile double 0.000000e+00, ptr %a34  store volatile double 1.000000e+00, ptr %b35  ret void36}37 38; Two PHIs with disjoint sets of inputs.39; CHECK-LABEL: Function: qux40; CHECK: NoAlias: double* %a, double* %b41define void @qux(i1 %m, ptr noalias %x, ptr noalias %y,42                 i1 %n, ptr noalias %v, ptr noalias %w) {43entry:44  br i1 %m, label %true, label %false45 46true:47  br label %exit48 49false:50  br label %exit51 52exit:53  %a = phi ptr [ %x, %true ], [ %y, %false ]54  br i1 %n, label %ntrue, label %nfalse55 56ntrue:57  br label %nexit58 59nfalse:60  br label %nexit61 62nexit:63  %b = phi ptr [ %v, %ntrue ], [ %w, %nfalse ]64  store volatile double 0.0, ptr %a65  store volatile double 1.0, ptr %b66  ret void67}68 69; Two selects with disjoint sets of arms.70; CHECK-LABEL: Function: fin71; CHECK: NoAlias: double* %a, double* %b72define void @fin(i1 %m, ptr noalias %x, ptr noalias %y,73                 i1 %n, ptr noalias %v, ptr noalias %w) {74entry:75  %a = select i1 %m, ptr %x, ptr %y76  %b = select i1 %n, ptr %v, ptr %w77  store volatile double 0.000000e+00, ptr %a78  store volatile double 1.000000e+00, ptr %b79  ret void80}81 82; On the first iteration, sel1 = a1, sel2 = a2, phi = a383; On the second iteration, sel1 = a2, sel1 = a1, phi = a284; As such, sel1 and phi may alias.85; CHECK-LABEL: Function: select_backedge86; CHECK: NoAlias:	i32* %sel1, i32* %sel287; CHECK: MayAlias:	i32* %phi, i32* %sel188; CHECK: MayAlias:	i32* %phi, i32* %sel289define void @select_backedge() {90entry:91  %a1 = alloca i3292  %a2 = alloca i3293  %a3 = alloca i3294  br label %loop95 96loop:97  %phi = phi ptr [ %a3, %entry ], [ %sel2, %loop ]98  %c = phi i1 [ true, %entry ], [ false, %loop ]99  %sel1 = select i1 %c, ptr %a1, ptr %a2100  %sel2 = select i1 %c, ptr %a2, ptr %a1101  load i32, ptr %sel1102  load i32, ptr %sel2103  load i32, ptr %phi104  br label %loop105}106