blob: 0b43269acbc86977d9f5f0236607698e53930612 [file] [log] [blame] [edit]
// RUN: %eopt --print-activity-analysis=funcs=memalgn %s 2>&1 | FileCheck %s
module attributes {
dlti.dl_spec = #dlti.dl_spec<
#dlti.dl_entry<i1, dense<8> : vector<2xi64>>,
#dlti.dl_entry<i8, dense<8> : vector<2xi64>>,
#dlti.dl_entry<i16, dense<16> : vector<2xi64>>,
#dlti.dl_entry<i32, dense<32> : vector<2xi64>>,
#dlti.dl_entry<i64, dense<[32, 64]> : vector<2xi64>>,
#dlti.dl_entry<f16, dense<16> : vector<2xi64>>,
#dlti.dl_entry<f32, dense<64> : vector<2xi64>>,
#dlti.dl_entry<f128, dense<128> : vector<2xi64>>>} {
// Test aliasing of dense analysis (%5, which is stored to, aliases with %6, which is loaded from)
// CHECK-LABEL: @memalgn:
// CHECK: "arg0": Active
// CHECK: "retval": Active
llvm.func @memalgn(%arg0: f32 {enzyme.tag = "arg0"}) -> f32 {
%0 = llvm.mlir.constant(1 : i32) : i32
%1 = llvm.mlir.constant(8 : i64) : i64
%2 = llvm.alloca %0 x !llvm.ptr {alignment = 8 : i64} : (i32) -> !llvm.ptr
%3 = llvm.bitcast %2 : !llvm.ptr to !llvm.ptr
%4 = llvm.call @posix_memalign(%3, %1, %1) : (!llvm.ptr, i64, i64) -> i32
%5 = llvm.load %2 : !llvm.ptr -> !llvm.ptr
llvm.store %arg0, %5 : f32, !llvm.ptr
%6 = llvm.load %2 : !llvm.ptr -> !llvm.ptr
%7 = llvm.load %6 {tag = "retval"} : !llvm.ptr -> f32
llvm.return %7 : f32
}
llvm.func @posix_memalign(!llvm.ptr, i64, i64) -> i32
}