550 lines · plain
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 52// RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -cl-std=CL1.2 \3// RUN: -emit-llvm -o - | FileCheck --check-prefixes=OPENCL12 %s4// RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -cl-std=CL2.0 \5// RUN: -emit-llvm -o - | FileCheck --check-prefixes=OPENCL20 %s6// RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -cl-std=CL3.0 \7// RUN: -emit-llvm -o - | FileCheck --check-prefixes=OPENCL30 %s8// RUN: %clang_cc1 %s -O0 -triple amdgcn-amd-amdhsa -cl-std=CL3.0 -cl-ext=+__opencl_c_generic_address_space \9// RUN: -emit-llvm -o - | FileCheck --check-prefixes=OPENCL30GAS %s10 11// OPENCL-LABEL: define dso_local void @test1_builtin_alloca(12// OPENCL-SAME: i32 noundef [[N:%.*]]) #[[ATTR0:[0-9]+]] {13// OPENCL-NEXT: [[ENTRY:.*:]]14// OPENCL-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)15// OPENCL-NEXT: [[ALLOC_PTR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)16// OPENCL-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 417// OPENCL-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 418// OPENCL-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i6419// OPENCL-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 420// OPENCL-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 8, addrspace(5)21// OPENCL-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR]], align 422// OPENCL-NEXT: ret void23// OPENCL12-LABEL: define dso_local void @test1_builtin_alloca(24// OPENCL12-SAME: i32 noundef [[N:%.*]]) #[[ATTR0:[0-9]+]] {25// OPENCL12-NEXT: [[ENTRY:.*:]]26// OPENCL12-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)27// OPENCL12-NEXT: [[ALLOC_PTR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)28// OPENCL12-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 429// OPENCL12-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 430// OPENCL12-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i6431// OPENCL12-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 432// OPENCL12-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 8, addrspace(5)33// OPENCL12-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR]], align 434// OPENCL12-NEXT: ret void35//36// OPENCL20-LABEL: define dso_local void @test1_builtin_alloca(37// OPENCL20-SAME: i32 noundef [[N:%.*]]) #[[ATTR0:[0-9]+]] {38// OPENCL20-NEXT: [[ENTRY:.*:]]39// OPENCL20-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)40// OPENCL20-NEXT: [[ALLOC_PTR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)41// OPENCL20-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr42// OPENCL20-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 443// OPENCL20-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 444// OPENCL20-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i6445// OPENCL20-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 446// OPENCL20-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 8, addrspace(5)47// OPENCL20-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR]], align 448// OPENCL20-NEXT: ret void49//50// OPENCL30-LABEL: define dso_local void @test1_builtin_alloca(51// OPENCL30-SAME: i32 noundef [[N:%.*]]) #[[ATTR0:[0-9]+]] {52// OPENCL30-NEXT: [[ENTRY:.*:]]53// OPENCL30-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)54// OPENCL30-NEXT: [[ALLOC_PTR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)55// OPENCL30-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 456// OPENCL30-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 457// OPENCL30-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i6458// OPENCL30-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 459// OPENCL30-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 8, addrspace(5)60// OPENCL30-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR]], align 461// OPENCL30-NEXT: ret void62//63// OPENCL30GAS-LABEL: define dso_local void @test1_builtin_alloca(64// OPENCL30GAS-SAME: i32 noundef [[N:%.*]]) #[[ATTR0:[0-9]+]] {65// OPENCL30GAS-NEXT: [[ENTRY:.*:]]66// OPENCL30GAS-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)67// OPENCL30GAS-NEXT: [[ALLOC_PTR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)68// OPENCL30GAS-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr69// OPENCL30GAS-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 470// OPENCL30GAS-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 471// OPENCL30GAS-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i6472// OPENCL30GAS-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 473// OPENCL30GAS-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 8, addrspace(5)74// OPENCL30GAS-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR]], align 475// OPENCL30GAS-NEXT: ret void76//77void test1_builtin_alloca(unsigned n) {78 __private float* alloc_ptr = (__private float*)__builtin_alloca(n*sizeof(int));79}80 81// OPENCL-LABEL: define dso_local void @test1_builtin_alloca_uninitialized(82// OPENCL-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {83// OPENCL-NEXT: [[ENTRY:.*:]]84// OPENCL-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)85// OPENCL-NEXT: [[ALLOC_PTR_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)86// OPENCL-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 487// OPENCL-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 488// OPENCL-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i6489// OPENCL-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 490// OPENCL-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 8, addrspace(5)91// OPENCL-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_UNINITIALIZED]], align 492// OPENCL-NEXT: ret void93// OPENCL12-LABEL: define dso_local void @test1_builtin_alloca_uninitialized(94// OPENCL12-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {95// OPENCL12-NEXT: [[ENTRY:.*:]]96// OPENCL12-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)97// OPENCL12-NEXT: [[ALLOC_PTR_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)98// OPENCL12-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 499// OPENCL12-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4100// OPENCL12-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64101// OPENCL12-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 4102// OPENCL12-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 8, addrspace(5)103// OPENCL12-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_UNINITIALIZED]], align 4104// OPENCL12-NEXT: ret void105//106// OPENCL20-LABEL: define dso_local void @test1_builtin_alloca_uninitialized(107// OPENCL20-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {108// OPENCL20-NEXT: [[ENTRY:.*:]]109// OPENCL20-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)110// OPENCL20-NEXT: [[ALLOC_PTR_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)111// OPENCL20-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr112// OPENCL20-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 4113// OPENCL20-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 4114// OPENCL20-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64115// OPENCL20-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 4116// OPENCL20-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 8, addrspace(5)117// OPENCL20-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_UNINITIALIZED]], align 4118// OPENCL20-NEXT: ret void119//120// OPENCL30-LABEL: define dso_local void @test1_builtin_alloca_uninitialized(121// OPENCL30-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {122// OPENCL30-NEXT: [[ENTRY:.*:]]123// OPENCL30-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)124// OPENCL30-NEXT: [[ALLOC_PTR_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)125// OPENCL30-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4126// OPENCL30-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4127// OPENCL30-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64128// OPENCL30-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 4129// OPENCL30-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 8, addrspace(5)130// OPENCL30-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_UNINITIALIZED]], align 4131// OPENCL30-NEXT: ret void132//133// OPENCL30GAS-LABEL: define dso_local void @test1_builtin_alloca_uninitialized(134// OPENCL30GAS-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {135// OPENCL30GAS-NEXT: [[ENTRY:.*:]]136// OPENCL30GAS-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)137// OPENCL30GAS-NEXT: [[ALLOC_PTR_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)138// OPENCL30GAS-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr139// OPENCL30GAS-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 4140// OPENCL30GAS-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 4141// OPENCL30GAS-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64142// OPENCL30GAS-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 4143// OPENCL30GAS-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 8, addrspace(5)144// OPENCL30GAS-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_UNINITIALIZED]], align 4145// OPENCL30GAS-NEXT: ret void146//147void test1_builtin_alloca_uninitialized(unsigned n) {148 __private float* alloc_ptr_uninitialized = (__private float*)__builtin_alloca_uninitialized(n*sizeof(int));149}150 151// OPENCL-LABEL: define dso_local void @test1_builtin_alloca_with_align(152// OPENCL-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {153// OPENCL-NEXT: [[ENTRY:.*:]]154// OPENCL-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)155// OPENCL-NEXT: [[ALLOC_PTR_ALIGN:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)156// OPENCL-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4157// OPENCL-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4158// OPENCL-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64159// OPENCL-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 4160// OPENCL-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 1, addrspace(5)161// OPENCL-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN]], align 4162// OPENCL-NEXT: ret void163// OPENCL12-LABEL: define dso_local void @test1_builtin_alloca_with_align(164// OPENCL12-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {165// OPENCL12-NEXT: [[ENTRY:.*:]]166// OPENCL12-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)167// OPENCL12-NEXT: [[ALLOC_PTR_ALIGN:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)168// OPENCL12-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4169// OPENCL12-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4170// OPENCL12-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64171// OPENCL12-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 4172// OPENCL12-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 1, addrspace(5)173// OPENCL12-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN]], align 4174// OPENCL12-NEXT: ret void175//176// OPENCL20-LABEL: define dso_local void @test1_builtin_alloca_with_align(177// OPENCL20-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {178// OPENCL20-NEXT: [[ENTRY:.*:]]179// OPENCL20-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)180// OPENCL20-NEXT: [[ALLOC_PTR_ALIGN:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)181// OPENCL20-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr182// OPENCL20-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 4183// OPENCL20-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 4184// OPENCL20-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64185// OPENCL20-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 4186// OPENCL20-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 1, addrspace(5)187// OPENCL20-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN]], align 4188// OPENCL20-NEXT: ret void189//190// OPENCL30-LABEL: define dso_local void @test1_builtin_alloca_with_align(191// OPENCL30-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {192// OPENCL30-NEXT: [[ENTRY:.*:]]193// OPENCL30-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)194// OPENCL30-NEXT: [[ALLOC_PTR_ALIGN:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)195// OPENCL30-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4196// OPENCL30-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4197// OPENCL30-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64198// OPENCL30-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 4199// OPENCL30-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 1, addrspace(5)200// OPENCL30-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN]], align 4201// OPENCL30-NEXT: ret void202//203// OPENCL30GAS-LABEL: define dso_local void @test1_builtin_alloca_with_align(204// OPENCL30GAS-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {205// OPENCL30GAS-NEXT: [[ENTRY:.*:]]206// OPENCL30GAS-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)207// OPENCL30GAS-NEXT: [[ALLOC_PTR_ALIGN:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)208// OPENCL30GAS-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr209// OPENCL30GAS-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 4210// OPENCL30GAS-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 4211// OPENCL30GAS-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64212// OPENCL30GAS-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 4213// OPENCL30GAS-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 1, addrspace(5)214// OPENCL30GAS-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN]], align 4215// OPENCL30GAS-NEXT: ret void216//217void test1_builtin_alloca_with_align(unsigned n) {218 __private float* alloc_ptr_align = (__private float*)__builtin_alloca_with_align((n*sizeof(int)), 8);219}220 221// OPENCL-LABEL: define dso_local void @test1_builtin_alloca_with_align_uninitialized(222// OPENCL-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {223// OPENCL-NEXT: [[ENTRY:.*:]]224// OPENCL-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)225// OPENCL-NEXT: [[ALLOC_PTR_ALIGN_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)226// OPENCL-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4227// OPENCL-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4228// OPENCL-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64229// OPENCL-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 4230// OPENCL-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 1, addrspace(5)231// OPENCL-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN_UNINITIALIZED]], align 4232// OPENCL-NEXT: ret void233// OPENCL12-LABEL: define dso_local void @test1_builtin_alloca_with_align_uninitialized(234// OPENCL12-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {235// OPENCL12-NEXT: [[ENTRY:.*:]]236// OPENCL12-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)237// OPENCL12-NEXT: [[ALLOC_PTR_ALIGN_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)238// OPENCL12-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4239// OPENCL12-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4240// OPENCL12-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64241// OPENCL12-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 4242// OPENCL12-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 1, addrspace(5)243// OPENCL12-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN_UNINITIALIZED]], align 4244// OPENCL12-NEXT: ret void245//246// OPENCL20-LABEL: define dso_local void @test1_builtin_alloca_with_align_uninitialized(247// OPENCL20-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {248// OPENCL20-NEXT: [[ENTRY:.*:]]249// OPENCL20-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)250// OPENCL20-NEXT: [[ALLOC_PTR_ALIGN_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)251// OPENCL20-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr252// OPENCL20-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 4253// OPENCL20-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 4254// OPENCL20-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64255// OPENCL20-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 4256// OPENCL20-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 1, addrspace(5)257// OPENCL20-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN_UNINITIALIZED]], align 4258// OPENCL20-NEXT: ret void259//260// OPENCL30-LABEL: define dso_local void @test1_builtin_alloca_with_align_uninitialized(261// OPENCL30-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {262// OPENCL30-NEXT: [[ENTRY:.*:]]263// OPENCL30-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)264// OPENCL30-NEXT: [[ALLOC_PTR_ALIGN_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)265// OPENCL30-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4266// OPENCL30-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4267// OPENCL30-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64268// OPENCL30-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 4269// OPENCL30-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 1, addrspace(5)270// OPENCL30-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN_UNINITIALIZED]], align 4271// OPENCL30-NEXT: ret void272//273// OPENCL30GAS-LABEL: define dso_local void @test1_builtin_alloca_with_align_uninitialized(274// OPENCL30GAS-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {275// OPENCL30GAS-NEXT: [[ENTRY:.*:]]276// OPENCL30GAS-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)277// OPENCL30GAS-NEXT: [[ALLOC_PTR_ALIGN_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)278// OPENCL30GAS-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr279// OPENCL30GAS-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 4280// OPENCL30GAS-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 4281// OPENCL30GAS-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64282// OPENCL30GAS-NEXT: [[MUL:%.*]] = mul i64 [[CONV]], 4283// OPENCL30GAS-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[MUL]], align 1, addrspace(5)284// OPENCL30GAS-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN_UNINITIALIZED]], align 4285// OPENCL30GAS-NEXT: ret void286//287void test1_builtin_alloca_with_align_uninitialized(unsigned n) {288 __private float* alloc_ptr_align_uninitialized = (__private float*)__builtin_alloca_with_align_uninitialized((n*sizeof(int)), 8);289}290 291// OPENCL-LABEL: define dso_local void @test2_builtin_alloca(292// OPENCL-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {293// OPENCL-NEXT: [[ENTRY:.*:]]294// OPENCL-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)295// OPENCL-NEXT: [[ALLOC_PTR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)296// OPENCL-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4297// OPENCL-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4298// OPENCL-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64299// OPENCL-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 8, addrspace(5)300// OPENCL-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR]], align 4301// OPENCL-NEXT: ret void302// OPENCL12-LABEL: define dso_local void @test2_builtin_alloca(303// OPENCL12-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {304// OPENCL12-NEXT: [[ENTRY:.*:]]305// OPENCL12-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)306// OPENCL12-NEXT: [[ALLOC_PTR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)307// OPENCL12-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4308// OPENCL12-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4309// OPENCL12-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64310// OPENCL12-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 8, addrspace(5)311// OPENCL12-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR]], align 4312// OPENCL12-NEXT: ret void313//314// OPENCL20-LABEL: define dso_local void @test2_builtin_alloca(315// OPENCL20-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {316// OPENCL20-NEXT: [[ENTRY:.*:]]317// OPENCL20-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)318// OPENCL20-NEXT: [[ALLOC_PTR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)319// OPENCL20-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr320// OPENCL20-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 4321// OPENCL20-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 4322// OPENCL20-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64323// OPENCL20-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 8, addrspace(5)324// OPENCL20-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR]], align 4325// OPENCL20-NEXT: ret void326//327// OPENCL30-LABEL: define dso_local void @test2_builtin_alloca(328// OPENCL30-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {329// OPENCL30-NEXT: [[ENTRY:.*:]]330// OPENCL30-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)331// OPENCL30-NEXT: [[ALLOC_PTR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)332// OPENCL30-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4333// OPENCL30-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4334// OPENCL30-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64335// OPENCL30-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 8, addrspace(5)336// OPENCL30-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR]], align 4337// OPENCL30-NEXT: ret void338//339// OPENCL30GAS-LABEL: define dso_local void @test2_builtin_alloca(340// OPENCL30GAS-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {341// OPENCL30GAS-NEXT: [[ENTRY:.*:]]342// OPENCL30GAS-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)343// OPENCL30GAS-NEXT: [[ALLOC_PTR:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)344// OPENCL30GAS-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr345// OPENCL30GAS-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 4346// OPENCL30GAS-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 4347// OPENCL30GAS-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64348// OPENCL30GAS-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 8, addrspace(5)349// OPENCL30GAS-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR]], align 4350// OPENCL30GAS-NEXT: ret void351//352void test2_builtin_alloca(unsigned n) {353 __private void *alloc_ptr = __builtin_alloca(n);354}355 356// OPENCL-LABEL: define dso_local void @test2_builtin_alloca_uninitialized(357// OPENCL-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {358// OPENCL-NEXT: [[ENTRY:.*:]]359// OPENCL-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)360// OPENCL-NEXT: [[ALLOC_PTR_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)361// OPENCL-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4362// OPENCL-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4363// OPENCL-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64364// OPENCL-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 8, addrspace(5)365// OPENCL-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_UNINITIALIZED]], align 4366// OPENCL-NEXT: ret void367// OPENCL12-LABEL: define dso_local void @test2_builtin_alloca_uninitialized(368// OPENCL12-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {369// OPENCL12-NEXT: [[ENTRY:.*:]]370// OPENCL12-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)371// OPENCL12-NEXT: [[ALLOC_PTR_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)372// OPENCL12-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4373// OPENCL12-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4374// OPENCL12-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64375// OPENCL12-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 8, addrspace(5)376// OPENCL12-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_UNINITIALIZED]], align 4377// OPENCL12-NEXT: ret void378//379// OPENCL20-LABEL: define dso_local void @test2_builtin_alloca_uninitialized(380// OPENCL20-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {381// OPENCL20-NEXT: [[ENTRY:.*:]]382// OPENCL20-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)383// OPENCL20-NEXT: [[ALLOC_PTR_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)384// OPENCL20-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr385// OPENCL20-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 4386// OPENCL20-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 4387// OPENCL20-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64388// OPENCL20-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 8, addrspace(5)389// OPENCL20-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_UNINITIALIZED]], align 4390// OPENCL20-NEXT: ret void391//392// OPENCL30-LABEL: define dso_local void @test2_builtin_alloca_uninitialized(393// OPENCL30-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {394// OPENCL30-NEXT: [[ENTRY:.*:]]395// OPENCL30-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)396// OPENCL30-NEXT: [[ALLOC_PTR_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)397// OPENCL30-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4398// OPENCL30-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4399// OPENCL30-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64400// OPENCL30-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 8, addrspace(5)401// OPENCL30-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_UNINITIALIZED]], align 4402// OPENCL30-NEXT: ret void403//404// OPENCL30GAS-LABEL: define dso_local void @test2_builtin_alloca_uninitialized(405// OPENCL30GAS-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {406// OPENCL30GAS-NEXT: [[ENTRY:.*:]]407// OPENCL30GAS-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)408// OPENCL30GAS-NEXT: [[ALLOC_PTR_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)409// OPENCL30GAS-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr410// OPENCL30GAS-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 4411// OPENCL30GAS-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 4412// OPENCL30GAS-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64413// OPENCL30GAS-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 8, addrspace(5)414// OPENCL30GAS-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_UNINITIALIZED]], align 4415// OPENCL30GAS-NEXT: ret void416//417void test2_builtin_alloca_uninitialized(unsigned n) {418 __private void *alloc_ptr_uninitialized = __builtin_alloca_uninitialized(n);419}420 421// OPENCL-LABEL: define dso_local void @test2_builtin_alloca_with_align(422// OPENCL-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {423// OPENCL-NEXT: [[ENTRY:.*:]]424// OPENCL-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)425// OPENCL-NEXT: [[ALLOC_PTR_ALIGN:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)426// OPENCL-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4427// OPENCL-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4428// OPENCL-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64429// OPENCL-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 1, addrspace(5)430// OPENCL-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN]], align 4431// OPENCL-NEXT: ret void432// OPENCL12-LABEL: define dso_local void @test2_builtin_alloca_with_align(433// OPENCL12-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {434// OPENCL12-NEXT: [[ENTRY:.*:]]435// OPENCL12-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)436// OPENCL12-NEXT: [[ALLOC_PTR_ALIGN:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)437// OPENCL12-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4438// OPENCL12-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4439// OPENCL12-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64440// OPENCL12-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 1, addrspace(5)441// OPENCL12-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN]], align 4442// OPENCL12-NEXT: ret void443//444// OPENCL20-LABEL: define dso_local void @test2_builtin_alloca_with_align(445// OPENCL20-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {446// OPENCL20-NEXT: [[ENTRY:.*:]]447// OPENCL20-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)448// OPENCL20-NEXT: [[ALLOC_PTR_ALIGN:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)449// OPENCL20-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr450// OPENCL20-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 4451// OPENCL20-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 4452// OPENCL20-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64453// OPENCL20-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 1, addrspace(5)454// OPENCL20-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN]], align 4455// OPENCL20-NEXT: ret void456//457// OPENCL30-LABEL: define dso_local void @test2_builtin_alloca_with_align(458// OPENCL30-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {459// OPENCL30-NEXT: [[ENTRY:.*:]]460// OPENCL30-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)461// OPENCL30-NEXT: [[ALLOC_PTR_ALIGN:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)462// OPENCL30-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4463// OPENCL30-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4464// OPENCL30-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64465// OPENCL30-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 1, addrspace(5)466// OPENCL30-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN]], align 4467// OPENCL30-NEXT: ret void468//469// OPENCL30GAS-LABEL: define dso_local void @test2_builtin_alloca_with_align(470// OPENCL30GAS-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {471// OPENCL30GAS-NEXT: [[ENTRY:.*:]]472// OPENCL30GAS-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)473// OPENCL30GAS-NEXT: [[ALLOC_PTR_ALIGN:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)474// OPENCL30GAS-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr475// OPENCL30GAS-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 4476// OPENCL30GAS-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 4477// OPENCL30GAS-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64478// OPENCL30GAS-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 1, addrspace(5)479// OPENCL30GAS-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN]], align 4480// OPENCL30GAS-NEXT: ret void481//482void test2_builtin_alloca_with_align(unsigned n) {483 __private void *alloc_ptr_align = __builtin_alloca_with_align(n, 8);484}485 486// OPENCL-LABEL: define dso_local void @test2_builtin_alloca_with_align_uninitialized(487// OPENCL-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {488// OPENCL-NEXT: [[ENTRY:.*:]]489// OPENCL-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)490// OPENCL-NEXT: [[ALLOC_PTR_ALIGN_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)491// OPENCL-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4492// OPENCL-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4493// OPENCL-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64494// OPENCL-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 1, addrspace(5)495// OPENCL-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN_UNINITIALIZED]], align 4496// OPENCL-NEXT: ret void497// OPENCL12-LABEL: define dso_local void @test2_builtin_alloca_with_align_uninitialized(498// OPENCL12-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {499// OPENCL12-NEXT: [[ENTRY:.*:]]500// OPENCL12-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)501// OPENCL12-NEXT: [[ALLOC_PTR_ALIGN_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)502// OPENCL12-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4503// OPENCL12-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4504// OPENCL12-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64505// OPENCL12-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 1, addrspace(5)506// OPENCL12-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN_UNINITIALIZED]], align 4507// OPENCL12-NEXT: ret void508//509// OPENCL20-LABEL: define dso_local void @test2_builtin_alloca_with_align_uninitialized(510// OPENCL20-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {511// OPENCL20-NEXT: [[ENTRY:.*:]]512// OPENCL20-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)513// OPENCL20-NEXT: [[ALLOC_PTR_ALIGN_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)514// OPENCL20-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr515// OPENCL20-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 4516// OPENCL20-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 4517// OPENCL20-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64518// OPENCL20-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 1, addrspace(5)519// OPENCL20-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN_UNINITIALIZED]], align 4520// OPENCL20-NEXT: ret void521//522// OPENCL30-LABEL: define dso_local void @test2_builtin_alloca_with_align_uninitialized(523// OPENCL30-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {524// OPENCL30-NEXT: [[ENTRY:.*:]]525// OPENCL30-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)526// OPENCL30-NEXT: [[ALLOC_PTR_ALIGN_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)527// OPENCL30-NEXT: store i32 [[N]], ptr addrspace(5) [[N_ADDR]], align 4528// OPENCL30-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(5) [[N_ADDR]], align 4529// OPENCL30-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64530// OPENCL30-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 1, addrspace(5)531// OPENCL30-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN_UNINITIALIZED]], align 4532// OPENCL30-NEXT: ret void533//534// OPENCL30GAS-LABEL: define dso_local void @test2_builtin_alloca_with_align_uninitialized(535// OPENCL30GAS-SAME: i32 noundef [[N:%.*]]) #[[ATTR0]] {536// OPENCL30GAS-NEXT: [[ENTRY:.*:]]537// OPENCL30GAS-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4, addrspace(5)538// OPENCL30GAS-NEXT: [[ALLOC_PTR_ALIGN_UNINITIALIZED:%.*]] = alloca ptr addrspace(5), align 4, addrspace(5)539// OPENCL30GAS-NEXT: [[N_ADDR_ASCAST:%.*]] = addrspacecast ptr addrspace(5) [[N_ADDR]] to ptr540// OPENCL30GAS-NEXT: store i32 [[N]], ptr [[N_ADDR_ASCAST]], align 4541// OPENCL30GAS-NEXT: [[TMP0:%.*]] = load i32, ptr [[N_ADDR_ASCAST]], align 4542// OPENCL30GAS-NEXT: [[CONV:%.*]] = zext i32 [[TMP0]] to i64543// OPENCL30GAS-NEXT: [[TMP1:%.*]] = alloca i8, i64 [[CONV]], align 1, addrspace(5)544// OPENCL30GAS-NEXT: store ptr addrspace(5) [[TMP1]], ptr addrspace(5) [[ALLOC_PTR_ALIGN_UNINITIALIZED]], align 4545// OPENCL30GAS-NEXT: ret void546//547void test2_builtin_alloca_with_align_uninitialized(unsigned n) {548 __private void *alloc_ptr_align_uninitialized = __builtin_alloca_with_align_uninitialized(n, 8);549}550