1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 2; RUN: opt < %s -S -mtriple=aarch64 -vector-library=ArmPL -passes=slp-vectorizer | FileCheck %s 3 4@a = common global ptr null, align 8 5 6define void @frem_v2double() { 7; CHECK-LABEL: define void @frem_v2double() { 8; CHECK-NEXT: entry: 9; CHECK-NEXT: [[TMP0:%.*]] = load <2 x double>, ptr @a, align 8 10; CHECK-NEXT: [[TMP1:%.*]] = load <2 x double>, ptr @a, align 8 11; CHECK-NEXT: [[TMP2:%.*]] = frem <2 x double> [[TMP0]], [[TMP1]] 12; CHECK-NEXT: store <2 x double> [[TMP2]], ptr @a, align 8 13; CHECK-NEXT: ret void 14; 15entry: 16 %a0 = load double, ptr getelementptr inbounds (double, ptr @a, i64 0), align 8 17 %a1 = load double, ptr getelementptr inbounds (double, ptr @a, i64 1), align 8 18 %b0 = load double, ptr getelementptr inbounds (double, ptr @a, i64 0), align 8 19 %b1 = load double, ptr getelementptr inbounds (double, ptr @a, i64 1), align 8 20 %r0 = frem double %a0, %b0 21 %r1 = frem double %a1, %b1 22 store double %r0, ptr getelementptr inbounds (double, ptr @a, i64 0), align 8 23 store double %r1, ptr getelementptr inbounds (double, ptr @a, i64 1), align 8 24 ret void 25} 26 27define void @frem_v4float() { 28; CHECK-LABEL: define void @frem_v4float() { 29; CHECK-NEXT: entry: 30; CHECK-NEXT: [[TMP0:%.*]] = load <4 x float>, ptr @a, align 8 31; CHECK-NEXT: [[TMP1:%.*]] = load <4 x float>, ptr @a, align 8 32; CHECK-NEXT: [[TMP2:%.*]] = frem <4 x float> [[TMP0]], [[TMP1]] 33; CHECK-NEXT: store <4 x float> [[TMP2]], ptr @a, align 8 34; CHECK-NEXT: ret void 35; 36entry: 37 %a0 = load float, ptr getelementptr inbounds (float, ptr @a, i64 0), align 8 38 %a1 = load float, ptr getelementptr inbounds (float, ptr @a, i64 1), align 8 39 %a2 = load float, ptr getelementptr inbounds (float, ptr @a, i64 2), align 8 40 %a3 = load float, ptr getelementptr inbounds (float, ptr @a, i64 3), align 8 41 %b0 = load float, ptr getelementptr inbounds (float, ptr @a, i64 0), align 8 42 %b1 = load float, ptr getelementptr inbounds (float, ptr @a, i64 1), align 8 43 %b2 = load float, ptr getelementptr inbounds (float, ptr @a, i64 2), align 8 44 %b3 = load float, ptr getelementptr inbounds (float, ptr @a, i64 3), align 8 45 %r0 = frem float %a0, %b0 46 %r1 = frem float %a1, %b1 47 %r2 = frem float %a2, %b2 48 %r3 = frem float %a3, %b3 49 store float %r0, ptr getelementptr inbounds (float, ptr @a, i64 0), align 8 50 store float %r1, ptr getelementptr inbounds (float, ptr @a, i64 1), align 8 51 store float %r2, ptr getelementptr inbounds (float, ptr @a, i64 2), align 8 52 store float %r3, ptr getelementptr inbounds (float, ptr @a, i64 3), align 8 53 ret void 54} 55 56