Test Failure: Transforms/OpenMP/hide_mem_transfer_latency.ll

Test source: git

Log:

Source: <stdin>
ERROR: Unsupported attribute: noalias
ERROR: Unsupported attribute: noalias

----------------------------------------
@0 = global 24 bytes, align 8
@.offload_sizes.1 = constant 8 bytes, align 8
@.offload_maptypes = constant 8 bytes, align 8
@.__omp_offloading_heavyComputation1.region_id = constant 1 bytes, align 1
@.offload_maptypes.2 = constant 8 bytes, align 8

define double @heavyComputation1() {
#init:
  br label %entry

%entry:
  %a = alloca i64 8, align 8
  %.offload_baseptrs = alloca i64 8, align 8
  %.offload_ptrs = alloca i64 8, align 8
  %.offload_baseptrs4 = alloca i64 8, align 8
  %.offload_ptrs5 = alloca i64 8, align 8
  %call = call i32 @rand()
  %rem = srem i32 %call, 777
  %conv = sitofp i32 %rem to double
  store double %conv, * %a, align 8
  %call1 = call i32 @rand()
  %1 = gep inbounds * %.offload_baseptrs, 8 x i64 0, 8 x i64 0
  %2 = bitcast * %.offload_baseptrs to *
  store * %a, * %2, align 8
  %3 = gep inbounds * %.offload_ptrs, 8 x i64 0, 8 x i64 0
  %4 = bitcast * %.offload_ptrs to *
  store * %a, * %4, align 8
  %__constexpr_0 = gep inbounds * @.offload_sizes.1, 8 x i64 0, 8 x i64 0
  %__constexpr_1 = gep inbounds * @.offload_maptypes, 8 x i64 0, 8 x i64 0
  call void @__tgt_target_data_begin_mapper(* @0, i64 -1, i32 1, nonnull * %1, nonnull * %3, * %__constexpr_0, * %__constexpr_1, * null, * null)
  %5 = bitcast * %a to *
  %6 = load i64, * %5, align 8
  %7 = gep inbounds * %.offload_baseptrs4, 8 x i64 0, 8 x i64 0
  %8 = bitcast * %.offload_baseptrs4 to *
  store i64 %6, * %8, align 8
  %9 = gep inbounds * %.offload_ptrs5, 8 x i64 0, 8 x i64 0
  %10 = bitcast * %.offload_ptrs5 to *
  store i64 %6, * %10, align 8
  %__constexpr_2 = gep inbounds * @.offload_sizes.1, 8 x i64 0, 8 x i64 0
  %__constexpr_3 = gep inbounds * @.offload_maptypes.2, 8 x i64 0, 8 x i64 0
  %11 = call i32 @__tgt_target_teams_mapper(* @0, i64 -1, nonnull * @.__omp_offloading_heavyComputation1.region_id, i32 1, nonnull * %7, nonnull * %9, * %__constexpr_2, * %__constexpr_3, * null, * null, i32 0, i32 0)
  %.not = icmp eq i32 %11, 0
  br i1 %.not, label %omp_offload.cont, label %omp_offload.failed

%omp_offload.failed:
  call void @heavyComputation1FallBack(i64 %6)
  br label %omp_offload.cont

%omp_offload.cont:
  %conv2 = sitofp i32 %call1 to double
  %__constexpr_4 = gep inbounds * @.offload_sizes.1, 8 x i64 0, 8 x i64 0
  %__constexpr_5 = gep inbounds * @.offload_maptypes, 8 x i64 0, 8 x i64 0
  call void @__tgt_target_data_end_mapper(* @0, i64 -1, i32 1, nonnull * %1, nonnull * %3, * %__constexpr_4, * %__constexpr_5, * null, * null)
  %12 = load double, * %a, align 8
  %add = fadd double %12, %conv2
  ret double %add
}
=>
@0 = global 24 bytes, align 8
@.offload_sizes.1 = constant 8 bytes, align 8
@.offload_maptypes = constant 8 bytes, align 8
@.__omp_offloading_heavyComputation1.region_id = constant 1 bytes, align 1
@.offload_maptypes.2 = constant 8 bytes, align 8

define double @heavyComputation1() {
#init:
  br label %entry

%entry:
  %handle = alloca i64 8, align 8
  %a = alloca i64 8, align 8
  %.offload_baseptrs = alloca i64 8, align 8
  %.offload_ptrs = alloca i64 8, align 8
  %.offload_baseptrs4 = alloca i64 8, align 8
  %.offload_ptrs5 = alloca i64 8, align 8
  %call = call i32 @rand()
  %rem = srem i32 %call, 777
  %conv = sitofp i32 %rem to double
  store double %conv, * %a, align 8
  %call1 = call i32 @rand()
  %1 = gep inbounds * %.offload_baseptrs, 8 x i64 0, 8 x i64 0
  %2 = bitcast * %.offload_baseptrs to *
  store * %a, * %2, align 8
  %3 = gep inbounds * %.offload_ptrs, 8 x i64 0, 8 x i64 0
  %4 = bitcast * %.offload_ptrs to *
  store * %a, * %4, align 8
  %__constexpr_0 = gep inbounds * @.offload_sizes.1, 8 x i64 0, 8 x i64 0
  %__constexpr_1 = gep inbounds * @.offload_maptypes, 8 x i64 0, 8 x i64 0
  call void @__tgt_target_data_begin_mapper_issue(* @0, i64 -1, i32 1, * %1, * %3, * %__constexpr_0, * %__constexpr_1, * null, * null, * %handle)
  %5 = bitcast * %a to *
  call void @__tgt_target_data_begin_mapper_wait(i64 -1, * %handle)
  %6 = load i64, * %5, align 8
  %7 = gep inbounds * %.offload_baseptrs4, 8 x i64 0, 8 x i64 0
  %8 = bitcast * %.offload_baseptrs4 to *
  store i64 %6, * %8, align 8
  %9 = gep inbounds * %.offload_ptrs5, 8 x i64 0, 8 x i64 0
  %10 = bitcast * %.offload_ptrs5 to *
  store i64 %6, * %10, align 8
  %__constexpr_2 = gep inbounds * @.offload_sizes.1, 8 x i64 0, 8 x i64 0
  %__constexpr_3 = gep inbounds * @.offload_maptypes.2, 8 x i64 0, 8 x i64 0
  %11 = call i32 @__tgt_target_teams_mapper(* @0, i64 -1, nonnull * @.__omp_offloading_heavyComputation1.region_id, i32 1, nonnull * %7, nonnull * %9, * %__constexpr_2, * %__constexpr_3, * null, * null, i32 0, i32 0)
  %.not = icmp eq i32 %11, 0
  br i1 %.not, label %omp_offload.cont, label %omp_offload.failed

%omp_offload.failed:
  call void @heavyComputation1FallBack(i64 %6)
  br label %omp_offload.cont

%omp_offload.cont:
  %conv2 = sitofp i32 %call1 to double
  %__constexpr_4 = gep inbounds * @.offload_sizes.1, 8 x i64 0, 8 x i64 0
  %__constexpr_5 = gep inbounds * @.offload_maptypes, 8 x i64 0, 8 x i64 0
  call void @__tgt_target_data_end_mapper(* @0, i64 -1, i32 1, nonnull * %1, nonnull * %3, * %__constexpr_4, * %__constexpr_5, * null, * null)
  %12 = load double, * %a, align 8
  %add = fadd double %12, %conv2
  ret double %add
}
Transformation doesn't verify!
ERROR: Source is more defined than target

Example:

Source:
* %a = pointer(local, block_id=8, offset=0)
* %.offload_baseptrs = pointer(local, block_id=9, offset=0)
* %.offload_ptrs = pointer(local, block_id=10, offset=0)
* %.offload_baseptrs4 = pointer(local, block_id=11, offset=0)
* %.offload_ptrs5 = pointer(local, block_id=12, offset=0)
i32 %call = poison
i32 %rem = poison
double %conv = poison
i32 %call1 = poison
* %1 = pointer(local, block_id=9, offset=0)
* %2 = pointer(local, block_id=9, offset=0)
* %3 = pointer(local, block_id=10, offset=0)
* %4 = pointer(local, block_id=10, offset=0)
* %__constexpr_0 = pointer(non-local, block_id=1, offset=0)
* %__constexpr_1 = pointer(non-local, block_id=2, offset=0)
* %5 = pointer(local, block_id=8, offset=0)
i64 %6 = poison
* %7 = pointer(local, block_id=11, offset=0)
* %8 = pointer(local, block_id=11, offset=0)
* %9 = pointer(local, block_id=12, offset=0)
* %10 = pointer(local, block_id=12, offset=0)
* %__constexpr_2 = pointer(non-local, block_id=1, offset=0)
* %__constexpr_3 = pointer(non-local, block_id=4, offset=0)
i32 %11 = #x00000000 (0)
i1 %.not = #x1 (1)
double %conv2 = poison
* %__constexpr_4 = pointer(non-local, block_id=1, offset=0)
* %__constexpr_5 = pointer(non-local, block_id=2, offset=0)
double %12 = poison
double %add = poison

SOURCE MEMORY STATE
===================
NON-LOCAL BLOCKS:
Block 0 >	size: 0	align: 1	alloc type: 0
Block 1 >	size: 8	align: 8	alloc type: 0
Block 2 >	size: 8	align: 8	alloc type: 0
Block 3 >	size: 1	align: 1	alloc type: 0
Block 4 >	size: 8	align: 8	alloc type: 0
Block 5 >	size: 24	align: 8	alloc type: 0
Block 6 >	size: 8	align: 2	alloc type: 0

LOCAL BLOCKS:
Block 8 >	size: 8	align: 8	alloc type: 1
Block 9 >	size: 8	align: 8	alloc type: 1
Block 10 >	size: 8	align: 8	alloc type: 1
Block 11 >	size: 8	align: 8	alloc type: 1
Block 12 >	size: 8	align: 8	alloc type: 1

Target:
* %handle = pointer(local, block_id=8, offset=0)
* %a = pointer(local, block_id=9, offset=0)
* %.offload_baseptrs = pointer(local, block_id=10, offset=0)
* %.offload_ptrs = pointer(local, block_id=11, offset=0)
* %.offload_baseptrs4 = pointer(local, block_id=12, offset=0)
* %.offload_ptrs5 = pointer(local, block_id=13, offset=0)
i32 %call = poison
i32 %rem = poison
double %conv = poison
i32 %call1 = poison
* %1 = pointer(local, block_id=10, offset=0)
* %2 = pointer(local, block_id=10, offset=0)
* %3 = pointer(local, block_id=11, offset=0)
* %4 = pointer(local, block_id=11, offset=0)
* %__constexpr_0 = pointer(non-local, block_id=1, offset=0)
* %__constexpr_1 = pointer(non-local, block_id=2, offset=0)
* %5 = pointer(local, block_id=9, offset=0)
i64 %6 = poison
* %7 = pointer(local, block_id=12, offset=0)
* %8 = pointer(local, block_id=12, offset=0)
* %9 = pointer(local, block_id=13, offset=0)
* %10 = pointer(local, block_id=13, offset=0)
* %__constexpr_2 = pointer(non-local, block_id=1, offset=0)
* %__constexpr_3 = pointer(non-local, block_id=4, offset=0)
i32 %11 = poison
i1 %.not = poison

TARGET MEMORY STATE
===================
LOCAL BLOCKS:
Block 8 >	size: 8	align: 8	alloc type: 1
Block 9 >	size: 8	align: 8	alloc type: 1
Block 10 >	size: 8	align: 8	alloc type: 1
Block 11 >	size: 8	align: 8	alloc type: 1
Block 12 >	size: 8	align: 8	alloc type: 1
Block 13 >	size: 8	align: 8	alloc type: 1



------------------- SMT STATS -------------------
Num queries: 15
Num invalid: 0
Num skips:   0
Num trivial: 41 (73.2%)
Num timeout: 0 (0.0%)
Num errors:  0 (0.0%)
Num SAT:     15 (100.0%)
Num UNSAT:   0 (0.0%)
Alive2: Transform doesn't verify; aborting!

stderr:

+ : 'RUN: at line 2'
+ /home/nlopes/alive2/build/opt-alive.sh -S -openmp-opt-cgscc -aa-pipeline=basic-aa -openmp-hide-memory-transfer-latency
+ /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/OpenMP/hide_mem_transfer_latency.ll

FileCheck error: '<stdin>' is empty.
FileCheck command line:  /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/OpenMP/hide_mem_transfer_latency.ll

 

<-- Back