brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 5f3ccc9 Raw
47 lines · plain
1; RUN: opt -S -passes=slp-vectorizer < %s | FileCheck %s2target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"3target triple = "arm64-apple-ios5.0.0"4 5; Holding a value live over a call boundary may require6; spills and fills. This is the case for <2 x double>,7; as it occupies a Q register of which there are no8; callee-saves.9 10; CHECK: load double11; CHECK: load double12; CHECK: call void @g13; CHECK: store double14; CHECK: store double15define void @f(ptr %p, ptr %q) {16  %addr2 = getelementptr double, ptr %q, i32 117  %addr = getelementptr double, ptr %p, i32 118  %x = load double, ptr %p19  %y = load double, ptr %addr20  call void @g()21  store double %x, ptr %q22  store double %y, ptr %addr223  ret void24}25declare void @g()26 27; Check we deal with loops correctly.28;29; CHECK: store <2 x double>30; CHECK: load <2 x double>31define void @f2(ptr %p, ptr %q) {32entry:33  br label %loop34 35loop:36  %p1 = phi double [0.0, %entry], [%x, %loop]37  %p2 = phi double [0.0, %entry], [%y, %loop]38  %addr2 = getelementptr double, ptr %q, i32 139  %addr = getelementptr double, ptr %p, i32 140  store double %p1, ptr %q41  store double %p2, ptr %addr242 43  %x = load double, ptr %p44  %y = load double, ptr %addr45  br label %loop46}47