brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 8f9a86e Raw
133 lines · plain
1; RUN: opt -mtriple=x86_64-unknown-linux-gnu -passes=load-store-vectorizer -S -o - %s | FileCheck %s2; RUN: opt -mtriple=x86_64-unknown-linux-gnu -aa-pipeline=basic-aa -passes='function(load-store-vectorizer)' -S -o - %s | FileCheck %s3 4target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"5 6; Vectorized subsets of the load/store chains in the presence of7; interleaved loads/stores8 9; CHECK-LABEL: @interleave_2L_2S(10; CHECK: load <2 x i32>11; CHECK: store <2 x i32>12; CHECK: load <2 x i32>13define void @interleave_2L_2S(ptr noalias %ptr) {14  %next.gep1 = getelementptr i32, ptr %ptr, i64 115  %next.gep2 = getelementptr i32, ptr %ptr, i64 216 17  %l1 = load i32, ptr %next.gep1, align 418  %l2 = load i32, ptr %ptr, align 419  store i32 0, ptr %next.gep1, align 420  store i32 0, ptr %ptr, align 421  %l3 = load i32, ptr %next.gep1, align 422  %l4 = load i32, ptr %next.gep2, align 423 24  ret void25}26 27; CHECK-LABEL: @interleave_3L_2S_1L(28; CHECK: load <2 x i32>29; CHECK: store <2 x i32>30; CHECK: load <2 x i32>31 32define void @interleave_3L_2S_1L(ptr noalias %ptr) {33  %next.gep1 = getelementptr i32, ptr %ptr, i64 134  %next.gep2 = getelementptr i32, ptr %ptr, i64 235 36  %l2 = load i32, ptr %ptr, align 437  %l1 = load i32, ptr %next.gep1, align 438  store i32 0, ptr %next.gep1, align 439  store i32 0, ptr %ptr, align 440  %l3 = load i32, ptr %next.gep1, align 441  %l4 = load i32, ptr %next.gep2, align 442 43  ret void44}45 46; CHECK-LABEL: @chain_suffix(47; CHECK: load i3248; CHECK: store <2 x i32>49; CHECK: load <2 x i32>50define void @chain_suffix(ptr noalias %ptr) {51  %next.gep1 = getelementptr i32, ptr %ptr, i64 152  %next.gep2 = getelementptr i32, ptr %ptr, i64 253 54  %l2 = load i32, ptr %ptr, align 455  store i32 0, ptr %next.gep1, align 456  store i32 0, ptr %ptr, align 457  %l3 = load i32, ptr %next.gep1, align 458  %l4 = load i32, ptr %next.gep2, align 459 60  ret void61}62 63 64; CHECK-LABEL: @chain_prefix_suffix(65; CHECK: load <2 x i32>66; CHECK: store <2 x i32>67; CHECK: load <3 x i32>68define void  @chain_prefix_suffix(ptr noalias %ptr) {69  %next.gep1 = getelementptr i32, ptr %ptr, i64 170  %next.gep2 = getelementptr i32, ptr %ptr, i64 271  %next.gep3 = getelementptr i32, ptr %ptr, i64 372 73  %l1 = load i32, ptr %ptr, align 474  %l2 = load i32, ptr %next.gep1, align 475  store i32 0, ptr %next.gep1, align 476  store i32 0, ptr %next.gep2, align 477  %l3 = load i32, ptr %next.gep1, align 478  %l4 = load i32, ptr %next.gep2, align 479  %l5 = load i32, ptr %next.gep3, align 480 81  ret void82}83 84; CHECK-LABEL: @interleave_get_longest85; CHECK: load <2 x i32>86; CHECK: store <2 x i32> zeroinitializer87; CHECK: load <3 x i32>88; CHECK: load i3289 90define void @interleave_get_longest(ptr noalias %ptr) {91  %tmp2 = getelementptr i32, ptr %ptr, i64 192  %tmp3 = getelementptr i32, ptr %ptr, i64 293  %tmp4 = getelementptr i32, ptr %ptr, i64 394  %tmp5 = getelementptr i32, ptr %ptr, i64 495 96  %l1 = load i32, ptr %tmp2, align 497  %l2 = load i32, ptr %ptr, align 498  store i32 0, ptr %tmp2, align 499  store i32 0, ptr %ptr, align 4100  %l3 = load i32, ptr %tmp2, align 4101  %l4 = load i32, ptr %tmp3, align 4102  %l5 = load i32, ptr %tmp4, align 4103  %l6 = load i32, ptr %tmp5, align 4104  %l7 = load i32, ptr %tmp5, align 4105 106  ret void107}108 109; CHECK-LABEL: @interleave_get_longest_aligned110; CHECK: load <2 x i32>111; CHECK: store <2 x i32> zeroinitializer112; CHECK: load <4 x i32>113 114define void @interleave_get_longest_aligned(ptr noalias %ptr) {115  %tmp2 = getelementptr i32, ptr %ptr, i64 1116  %tmp3 = getelementptr i32, ptr %ptr, i64 2117  %tmp4 = getelementptr i32, ptr %ptr, i64 3118  %tmp5 = getelementptr i32, ptr %ptr, i64 4119 120  %l1 = load i32, ptr %tmp2, align 4121  %l2 = load i32, ptr %ptr, align 4122  store i32 0, ptr %tmp2, align 4123  store i32 0, ptr %ptr, align 4124  %l3 = load i32, ptr %tmp2, align 16125  %l4 = load i32, ptr %tmp3, align 4126  %l5 = load i32, ptr %tmp4, align 8127  %l6 = load i32, ptr %tmp5, align 4128  %l7 = load i32, ptr %tmp5, align 4129 130  ret void131}132 133