brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 3d0b031 Raw
115 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=canon-freeze -S | FileCheck %s3; A set of tests that have several phi nodes4declare void @call(i32)5declare i32 @call2()6 7define void @onephi_used(i32 %n, i32 %i.init, i32 %j.init) {8; CHECK-LABEL: @onephi_used(9; CHECK-NEXT:  entry:10; CHECK-NEXT:    [[I_INIT_FROZEN:%.*]] = freeze i32 [[I_INIT:%.*]]11; CHECK-NEXT:    br label [[LOOP:%.*]]12; CHECK:       loop:13; CHECK-NEXT:    [[I:%.*]] = phi i32 [ [[I_INIT_FROZEN]], [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]14; CHECK-NEXT:    [[J:%.*]] = phi i32 [ [[J_INIT:%.*]], [[ENTRY]] ], [ [[J_NEXT:%.*]], [[LOOP]] ]15; CHECK-NEXT:    [[I_NEXT]] = add i32 [[I]], 116; CHECK-NEXT:    [[J_NEXT]] = add nuw nsw i32 [[J]], -217; CHECK-NEXT:    call void @call(i32 [[I]])18; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 [[I_NEXT]], [[N:%.*]]19; CHECK-NEXT:    br i1 [[COND]], label [[LOOP]], label [[EXIT:%.*]]20; CHECK:       exit:21; CHECK-NEXT:    ret void22;23entry:24  br label %loop25loop:26  %i = phi i32 [ %i.init, %entry ], [ %i.next, %loop ]27  %j = phi i32 [ %j.init, %entry ], [ %j.next, %loop ]28  %i.next = add nuw nsw i32 %i, 129  %j.next = add nuw nsw i32 %j, -230  %i.fr = freeze i32 %i31  call void @call(i32 %i.fr)32  %cond = icmp eq i32 %i.next, %n33  br i1 %cond, label %loop, label %exit34 35exit:36  ret void37}38 39; Negative test40define void @twophis_used(i32 %n, i32 %i.init, i32 %j.init) {41; CHECK-LABEL: @twophis_used(42; CHECK-NEXT:  entry:43; CHECK-NEXT:    br label [[LOOP:%.*]]44; CHECK:       loop:45; CHECK-NEXT:    [[I:%.*]] = phi i32 [ [[I_INIT:%.*]], [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]46; CHECK-NEXT:    [[J:%.*]] = phi i32 [ [[J_INIT:%.*]], [[ENTRY]] ], [ [[J_NEXT:%.*]], [[LOOP]] ]47; CHECK-NEXT:    [[I_NEXT]] = add nuw nsw i32 [[I]], 148; CHECK-NEXT:    [[J_NEXT]] = add nuw nsw i32 [[J]], -249; CHECK-NEXT:    [[IJ:%.*]] = add i32 [[I]], [[J]]50; CHECK-NEXT:    [[IJ_FR:%.*]] = freeze i32 [[IJ]]51; CHECK-NEXT:    call void @call(i32 [[IJ_FR]])52; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 [[I_NEXT]], [[N:%.*]]53; CHECK-NEXT:    br i1 [[COND]], label [[LOOP]], label [[EXIT:%.*]]54; CHECK:       exit:55; CHECK-NEXT:    ret void56;57entry:58  br label %loop59loop:60  %i = phi i32 [ %i.init, %entry ], [ %i.next, %loop ]61  %j = phi i32 [ %j.init, %entry ], [ %j.next, %loop ]62  %i.next = add nuw nsw i32 %i, 163  %j.next = add nuw nsw i32 %j, -264  %ij = add i32 %i, %j65  %ij.fr = freeze i32 %ij66  call void @call(i32 %ij.fr)67  %cond = icmp eq i32 %i.next, %n68  br i1 %cond, label %loop, label %exit69 70exit:71  ret void72}73 74; Negative test75define void @nonindphi_used(i32 %n, i32 %i.init, i32 %j.init, i32 %k.init) {76; CHECK-LABEL: @nonindphi_used(77; CHECK-NEXT:  entry:78; CHECK-NEXT:    br label [[LOOP:%.*]]79; CHECK:       loop:80; CHECK-NEXT:    [[I:%.*]] = phi i32 [ [[I_INIT:%.*]], [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]81; CHECK-NEXT:    [[J:%.*]] = phi i32 [ [[J_INIT:%.*]], [[ENTRY]] ], [ [[J_NEXT:%.*]], [[LOOP]] ]82; CHECK-NEXT:    [[K:%.*]] = phi i32 [ [[K_INIT:%.*]], [[ENTRY]] ], [ [[ANY:%.*]], [[LOOP]] ]83; CHECK-NEXT:    [[I_NEXT]] = add nuw nsw i32 [[I]], 184; CHECK-NEXT:    [[J_NEXT]] = add nuw nsw i32 [[J]], -285; CHECK-NEXT:    [[IJ:%.*]] = add i32 [[I]], [[J]]86; CHECK-NEXT:    [[IJK:%.*]] = add i32 [[IJ]], [[K]]87; CHECK-NEXT:    [[IJK_FR:%.*]] = freeze i32 [[IJK]]88; CHECK-NEXT:    call void @call(i32 [[IJK_FR]])89; CHECK-NEXT:    [[ANY]] = call i32 @call2()90; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 [[I_NEXT]], [[N:%.*]]91; CHECK-NEXT:    br i1 [[COND]], label [[LOOP]], label [[EXIT:%.*]]92; CHECK:       exit:93; CHECK-NEXT:    ret void94;95entry:96  br label %loop97 98loop:99  %i = phi i32 [ %i.init, %entry ], [ %i.next, %loop ]100  %j = phi i32 [ %j.init, %entry ], [ %j.next, %loop ]101  %k = phi i32 [ %k.init, %entry ], [ %any, %loop ]102  %i.next = add nuw nsw i32 %i, 1103  %j.next = add nuw nsw i32 %j, -2104  %ij = add i32 %i, %j105  %ijk = add i32 %ij, %k106  %ijk.fr = freeze i32 %ijk107  call void @call(i32 %ijk.fr)108  %any = call i32 @call2()109  %cond = icmp eq i32 %i.next, %n110  br i1 %cond, label %loop, label %exit111 112exit:113  ret void114}115