brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · 2c7582f Raw
49 lines · plain
1; RUN: opt -simple-loop-unswitch-memoryssa-threshold=0 -memssa-check-limit=1 -passes='loop-mssa(simple-loop-unswitch<nontrivial>),verify<loops>' -S < %s | FileCheck --check-prefix=THRESHOLD-0 %s2; RUN: opt -memssa-check-limit=1 -passes='loop-mssa(simple-loop-unswitch<nontrivial>),verify<loops>' -S < %s | FileCheck --check-prefix=THRESHOLD-DEFAULT %s3 4; Make sure -loop-unswitch-memoryssa-threshold works. The test uses5; -memssa-check-limit=1 to effectively disable any MemorySSA optimizations6; on construction, so the test can be kept simple.7 8declare void @clobber()9 10; Partial unswitching is possible, because the store in %noclobber does not11; alias the load of the condition.12define i32 @partial_unswitch_true_successor_noclobber(ptr noalias %ptr.1, ptr noalias %ptr.2, i32 %N) {13; THRESHOLD-0-LABEL: @partial_unswitch_true_successor14; THRESHOLD-0: entry:15; THRESHOLD-0: br label %loop.header16;17; THRESHOLD-DEFAULT-LABEL: @partial_unswitch_true_successor18; THRESHOLD-DEFAULT-NEXT:  entry:19; THRESHOLD-DEFAULT-NEXT:   [[LV:%[0-9]+]] = load i32, ptr %ptr.1, align 420; THRESHOLD-DEFAULT-NEXT:   [[C:%[0-9]+]] = icmp eq i32 [[LV]], 10021; THRESHOLD-DEFAULT-NEXT:   br i1 [[C]]22;23entry:24  br label %loop.header25 26loop.header:27  %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ]28  %lv = load i32, ptr %ptr.129  %sc = icmp eq i32 %lv, 10030  br i1 %sc, label %noclobber, label %clobber31 32noclobber:33  %gep.1 = getelementptr i32, ptr %ptr.2, i32 %iv34  store i32 %lv, ptr %gep.135  br label %loop.latch36 37clobber:38  call void @clobber()39  br label %loop.latch40 41loop.latch:42  %c = icmp ult i32 %iv, %N43  %iv.next = add i32 %iv, 144  br i1 %c, label %loop.header, label %exit45 46exit:47  ret i32 1048}49