116 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --check-globals all --version 62// RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-unknown-unknown -fopenmp-targets=amdgcn-amd-amdhsa -emit-llvm-bc %s -o %t-ppc-host.bc3// RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-unknown-unknown -fopenmp-targets=amdgcn-amd-amdhsa -emit-llvm %s -o - | FileCheck %s --check-prefix=HOST4// RUN: %clang_cc1 -fopenmp -x c++ -triple amdgcn-amd-amdhsa -fopenmp-targets=amdgcn-amd-amdhsa -emit-llvm %s -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s --check-prefix=DEVICE5 6//.7// HOST: @_Z3Onev = weak alias i32 (), ptr @_Z5__Onev8// HOST: @_Z3Onef = weak alias float (float), ptr @_Z5__Onef9// HOST: @_Z4One_v = alias i32 (), ptr @_Z5__Onev10// HOST: @_Z4One_f = alias float (float), ptr @_Z5__Onef11// HOST: @_Z3Twov = weak alias i32 (), ptr @_Z5__Twov12// HOST: @_Z3Twof = weak alias float (float), ptr @_Z5__Twof13// HOST: @_Z4Two_v = alias i32 (), ptr @_Z5__Twov14// HOST: @_Z4Two_f = alias float (float), ptr @_Z5__Twof15// HOST: @_Z5Threev = weak alias i32 (), ptr @_Z7__Threev16// HOST: @_Z6Three_v = alias i32 (), ptr @_Z7__Threev17// HOST: @_Z4Fourv = weak alias i32 (), ptr @_Z6__Fourv18// HOST: @_Z5Four_v = alias i32 (), ptr @_Z6__Fourv19//.20// DEVICE: @_Z3Twov = weak hidden alias i32 (), ptr @_Z5__Twov21// DEVICE: @_Z3Twof = weak hidden alias float (float), ptr @_Z5__Twof22// DEVICE: @_Z4Two_v = hidden alias i32 (), ptr @_Z5__Twov23// DEVICE: @_Z4Two_f = hidden alias float (float), ptr @_Z5__Twof24// DEVICE: @_Z5Threev = weak hidden alias i32 (), ptr @_Z7__Threev25// DEVICE: @_Z6Three_v = hidden alias i32 (), ptr @_Z7__Threev26//.27// HOST-LABEL: define dso_local noundef i32 @_Z5__Onev(28// HOST-SAME: ) #[[ATTR0:[0-9]+]] {29// HOST-NEXT: [[ENTRY:.*:]]30// HOST-NEXT: ret i32 131//32int __One(void) { return 1; }33// HOST-LABEL: define dso_local noundef float @_Z5__Onef(34// HOST-SAME: float noundef [[F:%.*]]) #[[ATTR0]] {35// HOST-NEXT: [[ENTRY:.*:]]36// HOST-NEXT: [[F_ADDR:%.*]] = alloca float, align 437// HOST-NEXT: store float [[F]], ptr [[F_ADDR]], align 438// HOST-NEXT: [[TMP0:%.*]] = load float, ptr [[F_ADDR]], align 439// HOST-NEXT: [[MUL:%.*]] = fmul float 1.000000e+00, [[TMP0]]40// HOST-NEXT: ret float [[MUL]]41//42float __One(float f) { return 1.0f * f; }43int One(void) __attribute__((weak, alias("_Z5__Onev")));44float One(float f) __attribute__((weak, alias("_Z5__Onef")));45int One_(void) __attribute__((alias("_Z5__Onev")));46float One_(float f) __attribute__((alias("_Z5__Onef")));47 48#pragma omp declare target49// HOST-LABEL: define dso_local noundef i32 @_Z5__Twov(50// HOST-SAME: ) #[[ATTR0]] {51// HOST-NEXT: [[ENTRY:.*:]]52// HOST-NEXT: ret i32 253//54// DEVICE-LABEL: define hidden noundef i32 @_Z5__Twov(55// DEVICE-SAME: ) #[[ATTR0:[0-9]+]] {56// DEVICE-NEXT: [[ENTRY:.*:]]57// DEVICE-NEXT: [[RETVAL:%.*]] = alloca i32, align 4, addrspace(5)58// DEVICE-NEXT: [[RETVAL_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL]] to ptr59// DEVICE-NEXT: ret i32 260//61int __Two(void) { return 2; }62// HOST-LABEL: define dso_local noundef float @_Z5__Twof(63// HOST-SAME: float noundef [[F:%.*]]) #[[ATTR0]] {64// HOST-NEXT: [[ENTRY:.*:]]65// HOST-NEXT: [[F_ADDR:%.*]] = alloca float, align 466// HOST-NEXT: store float [[F]], ptr [[F_ADDR]], align 467// HOST-NEXT: [[TMP0:%.*]] = load float, ptr [[F_ADDR]], align 468// HOST-NEXT: [[MUL:%.*]] = fmul float 2.000000e+00, [[TMP0]]69// HOST-NEXT: ret float [[MUL]]70//71// DEVICE-LABEL: define hidden noundef float @_Z5__Twof(72// DEVICE-SAME: float noundef [[F:%.*]]) #[[ATTR0]] {73// DEVICE-NEXT: [[ENTRY:.*:]]74// DEVICE-NEXT: [[RETVAL:%.*]] = alloca float, align 4, addrspace(5)75// DEVICE-NEXT: [[F_ADDR:%.*]] = alloca float, align 4, addrspace(5)76// DEVICE-NEXT: [[RETVAL_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL]] to ptr77// DEVICE-NEXT: [[F_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[F_ADDR]] to ptr78// DEVICE-NEXT: store float [[F]], ptr [[F_ADDR_ASCAST]], align 479// DEVICE-NEXT: [[TMP0:%.*]] = load float, ptr [[F_ADDR_ASCAST]], align 480// DEVICE-NEXT: [[MUL:%.*]] = fmul float 2.000000e+00, [[TMP0]]81// DEVICE-NEXT: ret float [[MUL]]82//83float __Two(float f) { return 2.0f * f; }84int Two(void) __attribute__((weak, alias("_Z5__Twov")));85float Two(float f) __attribute__((weak, alias("_Z5__Twof")));86int Two_(void) __attribute__((alias("_Z5__Twov")));87float Two_(float f) __attribute__((alias("_Z5__Twof")));88#pragma omp end declare target89 90#pragma omp declare target91// HOST-LABEL: define linkonce_odr noundef i32 @_Z7__Threev(92// HOST-SAME: ) #[[ATTR0]] comdat {93// HOST-NEXT: [[ENTRY:.*:]]94// HOST-NEXT: ret i32 395//96// DEVICE-LABEL: define linkonce_odr hidden noundef i32 @_Z7__Threev(97// DEVICE-SAME: ) #[[ATTR0]] comdat {98// DEVICE-NEXT: [[ENTRY:.*:]]99// DEVICE-NEXT: [[RETVAL:%.*]] = alloca i32, align 4, addrspace(5)100// DEVICE-NEXT: [[RETVAL_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[RETVAL]] to ptr101// DEVICE-NEXT: ret i32 3102//103constexpr int __Three(void) { return 3; }104int Three(void) __attribute__((weak, alias("_Z7__Threev")));105int Three_(void) __attribute__((alias("_Z7__Threev")));106#pragma omp end declare target107 108// HOST-LABEL: define linkonce_odr noundef i32 @_Z6__Fourv(109// HOST-SAME: ) #[[ATTR0]] comdat {110// HOST-NEXT: [[ENTRY:.*:]]111// HOST-NEXT: ret i32 4112//113constexpr int __Four(void) { return 4; }114int Four(void) __attribute__((weak, alias("_Z6__Fourv")));115int Four_(void) __attribute__((alias("_Z6__Fourv")));116