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