brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · de79203 Raw
164 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-llvm -o - %s | FileCheck %s3 4typedef double * __attribute__((align_value(64))) aligned_double;5 6// CHECK-LABEL: @_Z3fooPdS_Rd(7// CHECK-NEXT:  entry:8// CHECK-NEXT:    [[X_ADDR:%.*]] = alloca ptr, align 89// CHECK-NEXT:    [[Y_ADDR:%.*]] = alloca ptr, align 810// CHECK-NEXT:    [[Z_ADDR:%.*]] = alloca ptr, align 811// CHECK-NEXT:    store ptr [[X:%.*]], ptr [[X_ADDR]], align 812// CHECK-NEXT:    store ptr [[Y:%.*]], ptr [[Y_ADDR]], align 813// CHECK-NEXT:    store ptr [[Z:%.*]], ptr [[Z_ADDR]], align 814// CHECK-NEXT:    ret void15//16void foo(aligned_double x, double * y __attribute__((align_value(32))),17         double & z __attribute__((align_value(128)))) { };18 19struct ad_struct {20  aligned_double a;21};22 23// CHECK-LABEL: @_Z3fooR9ad_struct(24// CHECK-NEXT:  entry:25// CHECK-NEXT:    [[X_ADDR:%.*]] = alloca ptr, align 826// CHECK-NEXT:    store ptr [[X:%.*]], ptr [[X_ADDR]], align 827// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 828// CHECK-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_AD_STRUCT:%.*]], ptr [[TMP0]], i32 0, i32 029// CHECK-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A]], align 830// CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[TMP1]], i64 64) ]31// CHECK-NEXT:    ret ptr [[TMP1]]32//33double *foo(ad_struct& x) {34 35  return x.a;36}37 38// CHECK-LABEL: @_Z3gooP9ad_struct(39// CHECK-NEXT:  entry:40// CHECK-NEXT:    [[X_ADDR:%.*]] = alloca ptr, align 841// CHECK-NEXT:    store ptr [[X:%.*]], ptr [[X_ADDR]], align 842// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 843// CHECK-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_AD_STRUCT:%.*]], ptr [[TMP0]], i32 0, i32 044// CHECK-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[A]], align 845// CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[TMP1]], i64 64) ]46// CHECK-NEXT:    ret ptr [[TMP1]]47//48double *goo(ad_struct *x) {49 50  return x->a;51}52 53// CHECK-LABEL: @_Z3barPPd(54// CHECK-NEXT:  entry:55// CHECK-NEXT:    [[X_ADDR:%.*]] = alloca ptr, align 856// CHECK-NEXT:    store ptr [[X:%.*]], ptr [[X_ADDR]], align 857// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 858// CHECK-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 859// CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[TMP1]], i64 64) ]60// CHECK-NEXT:    ret ptr [[TMP1]]61//62double *bar(aligned_double *x) {63 64  return *x;65}66 67// CHECK-LABEL: @_Z3carRPd(68// CHECK-NEXT:  entry:69// CHECK-NEXT:    [[X_ADDR:%.*]] = alloca ptr, align 870// CHECK-NEXT:    store ptr [[X:%.*]], ptr [[X_ADDR]], align 871// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 872// CHECK-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[TMP0]], align 873// CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[TMP1]], i64 64) ]74// CHECK-NEXT:    ret ptr [[TMP1]]75//76double *car(aligned_double &x) {77 78  return x;79}80 81// CHECK-LABEL: @_Z3darPPd(82// CHECK-NEXT:  entry:83// CHECK-NEXT:    [[X_ADDR:%.*]] = alloca ptr, align 884// CHECK-NEXT:    store ptr [[X:%.*]], ptr [[X_ADDR]], align 885// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 886// CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds ptr, ptr [[TMP0]], i64 587// CHECK-NEXT:    [[TMP1:%.*]] = load ptr, ptr [[ARRAYIDX]], align 888// CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[TMP1]], i64 64) ]89// CHECK-NEXT:    ret ptr [[TMP1]]90//91double *dar(aligned_double *x) {92 93  return x[5];94}95 96aligned_double eep();97// CHECK-LABEL: @_Z3retv(98// CHECK-NEXT:  entry:99// CHECK-NEXT:    [[CALL:%.*]] = call noundef ptr @_Z3eepv()100// CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[CALL]], i64 64) ]101// CHECK-NEXT:    ret ptr [[CALL]]102//103double *ret() {104 105  return eep();106}107 108// CHECK-LABEL: @_Z3no1PPd(109// CHECK-NEXT:  entry:110// CHECK-NEXT:    [[X_ADDR:%.*]] = alloca ptr, align 8111// CHECK-NEXT:    store ptr [[X:%.*]], ptr [[X_ADDR]], align 8112// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8113// CHECK-NEXT:    ret ptr [[TMP0]]114//115double **no1(aligned_double *x) {116  return x;117}118 119// CHECK-LABEL: @_Z3no2RPd(120// CHECK-NEXT:  entry:121// CHECK-NEXT:    [[X_ADDR:%.*]] = alloca ptr, align 8122// CHECK-NEXT:    store ptr [[X:%.*]], ptr [[X_ADDR]], align 8123// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8124// CHECK-NEXT:    ret ptr [[TMP0]]125//126double *&no2(aligned_double &x) {127  return x;128}129 130// CHECK-LABEL: @_Z3no3RPd(131// CHECK-NEXT:  entry:132// CHECK-NEXT:    [[X_ADDR:%.*]] = alloca ptr, align 8133// CHECK-NEXT:    store ptr [[X:%.*]], ptr [[X_ADDR]], align 8134// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8135// CHECK-NEXT:    ret ptr [[TMP0]]136//137double **no3(aligned_double &x) {138  return &x;139}140 141// CHECK-LABEL: @_Z3no3Pd(142// CHECK-NEXT:  entry:143// CHECK-NEXT:    [[X_ADDR:%.*]] = alloca ptr, align 8144// CHECK-NEXT:    store ptr [[X:%.*]], ptr [[X_ADDR]], align 8145// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8146// CHECK-NEXT:    [[TMP1:%.*]] = load double, ptr [[TMP0]], align 8147// CHECK-NEXT:    ret double [[TMP1]]148//149double no3(aligned_double x) {150  return *x;151}152 153// CHECK-LABEL: @_Z3no4Pd(154// CHECK-NEXT:  entry:155// CHECK-NEXT:    [[X_ADDR:%.*]] = alloca ptr, align 8156// CHECK-NEXT:    store ptr [[X:%.*]], ptr [[X_ADDR]], align 8157// CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr [[X_ADDR]], align 8158// CHECK-NEXT:    ret ptr [[TMP0]]159//160double *no4(aligned_double x) {161  return x;162}163 164