| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: opt < %s -S -p slp-vectorizer -mtriple riscv64 -mattr=+v | FileCheck %s |
| |
| ; Don't vectorize as the extract elements are expensive enough to be unprofitable. |
| |
| define double @f(ptr %p, double %c) { |
| ; CHECK-LABEL: define double @f( |
| ; CHECK-SAME: ptr [[P:%.*]], double [[C:%.*]]) #[[ATTR0:[0-9]+]] { |
| ; CHECK-NEXT: [[X0:%.*]] = load double, ptr [[P]], align 8 |
| ; CHECK-NEXT: [[Q:%.*]] = getelementptr double, ptr [[P]], i64 1 |
| ; CHECK-NEXT: [[X1:%.*]] = load double, ptr [[Q]], align 8 |
| ; CHECK-NEXT: [[M0:%.*]] = fmul double 2.000000e+00, [[X1]] |
| ; CHECK-NEXT: [[TMP5:%.*]] = fadd double 3.000000e+00, [[M0]] |
| ; CHECK-NEXT: [[M1:%.*]] = fmul double 2.000000e+00, [[X0]] |
| ; CHECK-NEXT: [[TMP4:%.*]] = fadd double 3.000000e+00, [[M1]] |
| ; CHECK-NEXT: [[RES:%.*]] = call double @llvm.fmuladd.f64(double [[C]], double [[TMP5]], double [[TMP4]]) |
| ; CHECK-NEXT: ret double [[RES]] |
| ; |
| %x0 = load double, ptr %p |
| %q = getelementptr double, ptr %p, i64 1 |
| %x1 = load double, ptr %q |
| %m0 = fmul double 2.0, %x1 |
| %s0 = fadd double 3.0, %m0 |
| %m1 = fmul double 2.0, %x0 |
| %s1 = fadd double 3.0, %m1 |
| %res = call double @llvm.fmuladd.f64(double %c, double %s0, double %s1) |
| ret double %res |
| } |