xref: /llvm-project/llvm/test/Transforms/SLPVectorizer/AArch64/slp-frem.ll (revision f795d1a8b1d1e51d2bc815d5bbed8099b37da0b7)
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