74 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=slp-vectorizer -mtriple=aarch64-unknown-unknown -mcpu=cortex-a53 -S | FileCheck %s3 4@b = common global i32 0, align 45@a = common global ptr null, align 86 7define void @foo(ptr %d, ptr %e) {8; CHECK-LABEL: @foo(9; CHECK-NEXT: entry:10; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [4 x double], ptr [[D:%.*]], i64 211; CHECK-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds [4 x double], ptr [[D]], i64 0, i64 312; CHECK-NEXT: [[TMP0:%.*]] = load double, ptr [[ARRAYIDX3]], align 813; CHECK-NEXT: [[ARRAYIDX4:%.*]] = getelementptr inbounds [4 x double], ptr [[E:%.*]], i64 314; CHECK-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds [4 x double], ptr [[D]], i64 1, i64 315; CHECK-NEXT: [[TMP1:%.*]] = load double, ptr [[ARRAYIDX15]], align 816; CHECK-NEXT: [[ARRAYIDX17:%.*]] = getelementptr inbounds [4 x double], ptr [[D]], i64 3, i64 217; CHECK-NEXT: [[TMP2:%.*]] = load double, ptr [[ARRAYIDX17]], align 818; CHECK-NEXT: [[ARRAYIDX19:%.*]] = getelementptr inbounds [4 x double], ptr [[E]], i64 2, i64 319; CHECK-NEXT: [[TMP3:%.*]] = load double, ptr [[ARRAYIDX19]], align 820; CHECK-NEXT: [[TMP4:%.*]] = tail call double @llvm.fmuladd.f64(double [[TMP2]], double [[TMP3]], double [[TMP1]])21; CHECK-NEXT: [[ARRAYIDX21:%.*]] = getelementptr inbounds [4 x double], ptr [[D]], i64 3, i64 322; CHECK-NEXT: [[TMP5:%.*]] = load double, ptr [[ARRAYIDX21]], align 823; CHECK-NEXT: [[ARRAYIDX23:%.*]] = getelementptr inbounds [4 x double], ptr [[E]], i64 3, i64 324; CHECK-NEXT: [[TMP6:%.*]] = load double, ptr [[ARRAYIDX23]], align 825; CHECK-NEXT: [[TMP7:%.*]] = tail call double @llvm.fmuladd.f64(double [[TMP5]], double [[TMP6]], double [[TMP4]])26; CHECK-NEXT: [[TMP8:%.*]] = load ptr, ptr @a, align 827; CHECK-NEXT: [[TMP9:%.*]] = load <2 x double>, ptr [[ARRAYIDX]], align 828; CHECK-NEXT: [[TMP10:%.*]] = load <2 x double>, ptr [[ARRAYIDX4]], align 829; CHECK-NEXT: [[TMP11:%.*]] = insertelement <2 x double> poison, double [[TMP0]], i32 030; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <2 x double> [[TMP11]], <2 x double> poison, <2 x i32> zeroinitializer31; CHECK-NEXT: [[TMP13:%.*]] = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> [[TMP12]], <2 x double> [[TMP10]], <2 x double> [[TMP9]])32; CHECK-NEXT: store <2 x double> [[TMP13]], ptr [[TMP8]], align 833; CHECK-NEXT: [[F_SROA_539_0__SROA_IDX:%.*]] = getelementptr inbounds i8, ptr [[TMP8]], i64 4034; CHECK-NEXT: store double [[TMP7]], ptr [[F_SROA_539_0__SROA_IDX]], align 835; CHECK-NEXT: store i32 6, ptr @b, align 436; CHECK-NEXT: ret void37;38entry:39 %arrayidx = getelementptr inbounds [4 x double], ptr %d, i64 240 %0 = load double, ptr %arrayidx, align 841 %arrayidx3 = getelementptr inbounds [4 x double], ptr %d, i64 0, i64 342 %1 = load double, ptr %arrayidx3, align 843 %arrayidx4 = getelementptr inbounds [4 x double], ptr %e, i64 344 %2 = load double, ptr %arrayidx4, align 845 %3 = tail call double @llvm.fmuladd.f64(double %1, double %2, double %0)46 %arrayidx8 = getelementptr inbounds [4 x double], ptr %d, i64 2, i64 147 %4 = load double, ptr %arrayidx8, align 848 %arrayidx12 = getelementptr inbounds [4 x double], ptr %e, i64 3, i64 149 %5 = load double, ptr %arrayidx12, align 850 %6 = tail call double @llvm.fmuladd.f64(double %1, double %5, double %4)51 %arrayidx15 = getelementptr inbounds [4 x double], ptr %d, i64 1, i64 352 %7 = load double, ptr %arrayidx15, align 853 %arrayidx17 = getelementptr inbounds [4 x double], ptr %d, i64 3, i64 254 %8 = load double, ptr %arrayidx17, align 855 %arrayidx19 = getelementptr inbounds [4 x double], ptr %e, i64 2, i64 356 %9 = load double, ptr %arrayidx19, align 857 %10 = tail call double @llvm.fmuladd.f64(double %8, double %9, double %7)58 %arrayidx21 = getelementptr inbounds [4 x double], ptr %d, i64 3, i64 359 %11 = load double, ptr %arrayidx21, align 860 %arrayidx23 = getelementptr inbounds [4 x double], ptr %e, i64 3, i64 361 %12 = load double, ptr %arrayidx23, align 862 %13 = tail call double @llvm.fmuladd.f64(double %11, double %12, double %10)63 %14 = load ptr, ptr @a, align 864 store double %3, ptr %14, align 865 %f.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %14, i64 866 store double %6, ptr %f.sroa.4.0..sroa_idx, align 867 %f.sroa.539.0..sroa_idx = getelementptr inbounds i8, ptr %14, i64 4068 store double %13, ptr %f.sroa.539.0..sroa_idx, align 869 store i32 6, ptr @b, align 470 ret void71}72 73declare double @llvm.fmuladd.f64(double, double, double)74