blob: 648d6624e7b3ebca8cab5d9767327d9d76dbaf08 [file] [edit]
// RUN: tco --target=x86_64-unknown-linux-gnu %s | FileCheck %s --check-prefixes=CHECK,POSIX
// RUN: tco --target=aarch64-apple-darwin %s | FileCheck %s --check-prefixes=CHECK,DARWIN
// RUN: tco --target=nvptx64-nvidia-cuda %s | FileCheck %s --check-prefixes=CHECK,FALLBACK
// RUN: tco --target=amdgcn-amd-amdhsa %s | FileCheck %s --check-prefixes=CHECK,FALLBACK
// RUN: tco --target=x86_64-pc-windows-msvc %s | FileCheck %s --check-prefixes=CHECK,FALLBACK
// CHECK-LABEL: define ptr @allocmem_array_aligned(
// POSIX: call ptr @aligned_alloc(i64 64, i64 4032)
// DARWIN: %[[MEMPTR:.*]] = alloca ptr, i64 1
// DARWIN: store ptr null, ptr %[[MEMPTR]]
// DARWIN: %{{.*}} = call i32 @posix_memalign(ptr %[[MEMPTR]], i64 64, i64 4000)
// DARWIN: %{{.*}} = load ptr, ptr %[[MEMPTR]]
// FALLBACK: call ptr @malloc(i64 4000)
func.func @allocmem_array_aligned() -> !fir.heap<!fir.array<1000xf32>> {
%1 = fir.allocmem !fir.array<1000xf32> {alignment = 64 : i64}
return %1 : !fir.heap<!fir.array<1000xf32>>
}
// CHECK-LABEL: define ptr @allocmem_array_dynamic_aligned(
// DARWIN: %[[MEMPTR:.*]] = alloca ptr, i64 1
// CHECK: %[[SIZE:.*]] = mul i64 4, %{{.*}}
// CHECK: %[[NONZERO:.*]] = select i1 %{{.*}}, i64 %[[SIZE]], i64 1
// POSIX: %[[PLUS:.*]] = add i64 %[[NONZERO]], 63
// POSIX: %[[ROUNDED:.*]] = and i64 %[[PLUS]], -64
// POSIX: call ptr @aligned_alloc(i64 64, i64 %[[ROUNDED]])
// DARWIN: store ptr null, ptr %[[MEMPTR]]
// DARWIN: %{{.*}} = call i32 @posix_memalign(ptr %[[MEMPTR]], i64 64, i64 %[[NONZERO]])
// DARWIN: %{{.*}} = load ptr, ptr %[[MEMPTR]]
// FALLBACK: call ptr @malloc(i64 %[[NONZERO]])
func.func @allocmem_array_dynamic_aligned(%n : index) -> !fir.heap<!fir.array<?xf32>> {
%1 = fir.allocmem !fir.array<?xf32>, %n {alignment = 64 : i64}
return %1 : !fir.heap<!fir.array<?xf32>>
}