xref: /llvm-project/llvm/test/Transforms/SLPVectorizer/X86/const-in-different-functions.ll (revision 5ce47a5813506e08daddc1e3d59b06f7a452c300)
1*5ce47a58SVitaly Buka; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2*5ce47a58SVitaly Buka; RUN: opt -S -mtriple=x86_64 -passes=slp-vectorizer < %s | FileCheck %s
3*5ce47a58SVitaly Buka
4*5ce47a58SVitaly Buka; Test that SLP vectorize doesn't crash if a stored constant is used in multiple
5*5ce47a58SVitaly Buka; functions.
6*5ce47a58SVitaly Buka
7*5ce47a58SVitaly Buka@p = external global [64 x float]
8*5ce47a58SVitaly Buka
9*5ce47a58SVitaly Bukadefine void @_Z1hPfl() {
10*5ce47a58SVitaly Buka; CHECK-LABEL: define void @_Z1hPfl() {
11*5ce47a58SVitaly Buka; CHECK-NEXT:  [[ENTRY:.*:]]
12*5ce47a58SVitaly Buka; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i8, ptr @p, i64 28
13*5ce47a58SVitaly Buka; CHECK-NEXT:    store <2 x float> <float 0.000000e+00, float 1.000000e+00>, ptr [[TMP0]], align 4
14*5ce47a58SVitaly Buka; CHECK-NEXT:    ret void
15*5ce47a58SVitaly Buka;
16*5ce47a58SVitaly Bukaentry:
17*5ce47a58SVitaly Buka  %0 = getelementptr i8, ptr @p, i64 28
18*5ce47a58SVitaly Buka  store float 0.000000e+00, ptr %0, align 4
19*5ce47a58SVitaly Buka  %1 = getelementptr i8, ptr @p, i64 32
20*5ce47a58SVitaly Buka  store float 1.000000e+00, ptr %1, align 16
21*5ce47a58SVitaly Buka  ret void
22*5ce47a58SVitaly Buka}
23*5ce47a58SVitaly Buka
24*5ce47a58SVitaly Bukadefine void @_Z1mv(i64 %arrayidx4.i.2.idx) {
25*5ce47a58SVitaly Buka; CHECK-LABEL: define void @_Z1mv(
26*5ce47a58SVitaly Buka; CHECK-SAME: i64 [[ARRAYIDX4_I_2_IDX:%.*]]) {
27*5ce47a58SVitaly Buka; CHECK-NEXT:  [[ENTRY:.*:]]
28*5ce47a58SVitaly Buka; CHECK-NEXT:    ret void
29*5ce47a58SVitaly Buka; CHECK:       [[FOR_COND1_PREHEADER_LR_PH_I:.*:]]
30*5ce47a58SVitaly Buka; CHECK-NEXT:    br label %[[FOR_COND1_PREHEADER_I:.*]]
31*5ce47a58SVitaly Buka; CHECK:       [[FOR_COND1_PREHEADER_I]]:
32*5ce47a58SVitaly Buka; CHECK-NEXT:    store float 1.000000e+00, ptr @p, align 4
33*5ce47a58SVitaly Buka; CHECK-NEXT:    [[ARRAYIDX4_I_2:%.*]] = getelementptr i8, ptr @p, i64 [[ARRAYIDX4_I_2_IDX]]
34*5ce47a58SVitaly Buka; CHECK-NEXT:    store float 0.000000e+00, ptr [[ARRAYIDX4_I_2]], align 4
35*5ce47a58SVitaly Buka; CHECK-NEXT:    br label %[[FOR_COND1_PREHEADER_I]]
36*5ce47a58SVitaly Buka;
37*5ce47a58SVitaly Bukaentry:
38*5ce47a58SVitaly Buka  ret void
39*5ce47a58SVitaly Buka
40*5ce47a58SVitaly Bukafor.cond1.preheader.lr.ph.i:                      ; No predecessors!
41*5ce47a58SVitaly Buka  br label %for.cond1.preheader.i
42*5ce47a58SVitaly Buka
43*5ce47a58SVitaly Bukafor.cond1.preheader.i:                            ; preds = %for.cond1.preheader.i, %for.cond1.preheader.lr.ph.i
44*5ce47a58SVitaly Buka  store float 1.000000e+00, ptr @p, align 4
45*5ce47a58SVitaly Buka  %arrayidx4.i.2 = getelementptr i8, ptr @p, i64 %arrayidx4.i.2.idx
46*5ce47a58SVitaly Buka  store float 0.000000e+00, ptr %arrayidx4.i.2, align 4
47*5ce47a58SVitaly Buka  br label %for.cond1.preheader.i
48*5ce47a58SVitaly Buka}
49