brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 983aaaf Raw
107 lines · plain
1; RUN: opt < %s -S -aarch64-falkor-hwpf-fix -mtriple aarch64 -mcpu=falkor | FileCheck %s2; RUN: opt < %s -S -aarch64-falkor-hwpf-fix -mtriple aarch64 -mcpu=cortex-a57 | FileCheck %s --check-prefix=NOHWPF3 4; Check that strided access metadata is added to loads in inner loops when compiling for Falkor.5 6; CHECK-LABEL: @hwpf1(7; CHECK: load i32, ptr %gep, align 4, !falkor.strided.access !08; CHECK: load i32, ptr %gep2, align 4, !falkor.strided.access !09 10; NOHWPF-LABEL: @hwpf1(11; NOHWPF: load i32, ptr %gep, align 4{{$}}12; NOHWPF: load i32, ptr %gep2, align 4{{$}}13define void @hwpf1(ptr %p, ptr %p2) {14entry:15  br label %loop16 17loop:18  %iv = phi i32 [ 0, %entry ], [ %inc, %loop ]19 20  %gep = getelementptr inbounds i32, ptr %p, i32 %iv21  %load = load i32, ptr %gep22 23  %gep2 = getelementptr inbounds i32, ptr %p2, i32 %iv24  %load2 = load i32, ptr %gep225 26  %inc = add i32 %iv, 127  %exitcnd = icmp uge i32 %inc, 102428  br i1 %exitcnd, label %exit, label %loop29 30exit:31  ret void32}33 34; Check that outer loop strided load isn't marked.35; CHECK-LABEL: @hwpf2(36; CHECK: load i32, ptr %gep, align 4, !falkor.strided.access !037; CHECK: load i32, ptr %gep2, align 4{{$}}38 39; NOHWPF-LABEL: @hwpf2(40; NOHWPF: load i32, ptr %gep, align 4{{$}}41; NOHWPF: load i32, ptr %gep2, align 4{{$}}42define void @hwpf2(ptr %p) {43entry:44  br label %loop145 46loop1:47  %iv1 = phi i32 [ 0, %entry ], [ %inc1, %loop1.latch ]48  %outer.sum = phi i32 [ 0, %entry ], [ %sum, %loop1.latch ]49  br label %loop2.header50 51loop2.header:52  br label %loop253 54loop2:55  %iv2 = phi i32 [ 0, %loop2.header ], [ %inc2, %loop2 ]56  %sum = phi i32 [ %outer.sum, %loop2.header ], [ %sum.inc, %loop2 ]57  %gep = getelementptr inbounds i32, ptr %p, i32 %iv258  %load = load i32, ptr %gep59  %sum.inc = add i32 %sum, %load60  %inc2 = add i32 %iv2, 161  %exitcnd2 = icmp uge i32 %inc2, 102462  br i1 %exitcnd2, label %exit2, label %loop263 64exit2:65  %gep2 = getelementptr inbounds i32, ptr %p, i32 %iv166  %load2 = load i32, ptr %gep267  br label %loop1.latch68 69loop1.latch:70  %inc1 = add i32 %iv1, 171  %exitcnd1 = icmp uge i32 %inc1, 102472  br i1 %exitcnd2, label %exit, label %loop173 74exit:75  ret void76}77 78 79; Check that non-strided load isn't marked.80; CHECK-LABEL: @hwpf3(81; CHECK: load i32, ptr %gep, align 4, !falkor.strided.access !082; CHECK: load i32, ptr %gep2, align 4{{$}}83 84; NOHWPF-LABEL: @hwpf3(85; NOHWPF: load i32, ptr %gep, align 4{{$}}86; NOHWPF: load i32, ptr %gep2, align 4{{$}}87define void @hwpf3(ptr %p, ptr %p2) {88entry:89  br label %loop90 91loop:92  %iv = phi i32 [ 0, %entry ], [ %inc, %loop ]93 94  %gep = getelementptr inbounds i32, ptr %p, i32 %iv95  %load = load i32, ptr %gep96 97  %gep2 = getelementptr inbounds i32, ptr %p2, i32 %load98  %load2 = load i32, ptr %gep299 100  %inc = add i32 %iv, 1101  %exitcnd = icmp uge i32 %inc, 1024102  br i1 %exitcnd, label %exit, label %loop103 104exit:105  ret void106}107