brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 7fb0220 Raw
93 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 22; RUN: opt < %s -passes=infer-alignment -S | FileCheck %s3 4target datalayout = "p1:64:64:64:32"5 6; ------------------------------------------------------------------------------7; load instructions8; ------------------------------------------------------------------------------9 10define void @load(ptr align 1 %ptr) {11; CHECK-LABEL: define void @load12; CHECK-SAME: (ptr align 1 [[PTR:%.*]]) {13; CHECK-NEXT:    [[ALIGNED_0:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[PTR]], i64 -2)14; CHECK-NEXT:    [[ALIGNED_1:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[PTR]], i64 -4)15; CHECK-NEXT:    [[ALIGNED_2:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[PTR]], i64 -8)16; CHECK-NEXT:    [[LOAD_0:%.*]] = load <16 x i8>, ptr [[ALIGNED_0]], align 217; CHECK-NEXT:    [[LOAD_1:%.*]] = load <16 x i8>, ptr [[ALIGNED_1]], align 418; CHECK-NEXT:    [[LOAD_2:%.*]] = load <16 x i8>, ptr [[ALIGNED_2]], align 819; CHECK-NEXT:    ret void20;21  %aligned.0 = call ptr @llvm.ptrmask.p0.i64(ptr %ptr, i64 -2)22  %aligned.1 = call ptr @llvm.ptrmask.p0.i64(ptr %ptr, i64 -4)23  %aligned.2 = call ptr @llvm.ptrmask.p0.i64(ptr %ptr, i64 -8)24 25  %load.0 = load <16 x i8>, ptr %aligned.0, align 126  %load.1 = load <16 x i8>, ptr %aligned.1, align 127  %load.2 = load <16 x i8>, ptr %aligned.2, align 128 29  ret void30}31 32; ------------------------------------------------------------------------------33; store instructions34; ------------------------------------------------------------------------------35 36define void @store(ptr align 1 %ptr) {37; CHECK-LABEL: define void @store38; CHECK-SAME: (ptr align 1 [[PTR:%.*]]) {39; CHECK-NEXT:    [[ALIGNED_0:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[PTR]], i64 -2)40; CHECK-NEXT:    [[ALIGNED_1:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[PTR]], i64 -4)41; CHECK-NEXT:    [[ALIGNED_2:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[PTR]], i64 -8)42; CHECK-NEXT:    store <16 x i8> zeroinitializer, ptr [[ALIGNED_0]], align 243; CHECK-NEXT:    store <16 x i8> zeroinitializer, ptr [[ALIGNED_1]], align 444; CHECK-NEXT:    store <16 x i8> zeroinitializer, ptr [[ALIGNED_2]], align 845; CHECK-NEXT:    ret void46;47  %aligned.0 = call ptr @llvm.ptrmask.p0.i64(ptr %ptr, i64 -2)48  %aligned.1 = call ptr @llvm.ptrmask.p0.i64(ptr %ptr, i64 -4)49  %aligned.2 = call ptr @llvm.ptrmask.p0.i64(ptr %ptr, i64 -8)50 51  store <16 x i8> zeroinitializer, ptr %aligned.0, align 152  store <16 x i8> zeroinitializer, ptr %aligned.1, align 153  store <16 x i8> zeroinitializer, ptr %aligned.2, align 154 55  ret void56}57 58; ------------------------------------------------------------------------------59; Overaligned pointer60; ------------------------------------------------------------------------------61 62; Underlying alignment greater than alignment forced by ptrmask63define void @ptrmask_overaligned(ptr align 16 %ptr) {64; CHECK-LABEL: define void @ptrmask_overaligned65; CHECK-SAME: (ptr align 16 [[PTR:%.*]]) {66; CHECK-NEXT:    [[ALIGNED:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[PTR]], i64 -8)67; CHECK-NEXT:    [[LOAD:%.*]] = load <16 x i8>, ptr [[ALIGNED]], align 1668; CHECK-NEXT:    store <16 x i8> zeroinitializer, ptr [[ALIGNED]], align 1669; CHECK-NEXT:    ret void70;71  %aligned = call ptr @llvm.ptrmask.p0.i64(ptr %ptr, i64 -8)72 73  %load = load <16 x i8>, ptr %aligned, align 174  store <16 x i8> zeroinitializer, ptr %aligned, align 175 76  ret void77}78 79define i8 @smaller_index_type(ptr addrspace(1) %ptr) {80; CHECK-LABEL: define i8 @smaller_index_type81; CHECK-SAME: (ptr addrspace(1) [[PTR:%.*]]) {82; CHECK-NEXT:    [[PTR2:%.*]] = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) [[PTR]], i32 -4)83; CHECK-NEXT:    [[LOAD:%.*]] = load i8, ptr addrspace(1) [[PTR2]], align 484; CHECK-NEXT:    ret i8 [[LOAD]]85;86  %ptr2 = call ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1) %ptr, i32 -4)87  %load = load i8, ptr addrspace(1) %ptr2, align 188  ret i8 %load89}90 91declare ptr @llvm.ptrmask.p0.i64(ptr, i64)92declare ptr addrspace(1) @llvm.ptrmask.p1.i32(ptr addrspace(1), i32)93