Test source: git
Comments: Alive#345
Source: <stdin> ERROR: Unsupported attribute: noalias ERROR: Unsupported attribute: noalias ERROR: Unsupported attribute: noalias ERROR: Unsupported attribute: noalias ERROR: Unsupported attribute: noalias ---------------------------------------- define void @copy(* %src, * %dst) { %0: %1 = load {*, i8, i24, i32}, * %src, align 8 store {*, i8, i24, i32} %1, * %dst, align 8 ret void } => define void @copy(* %src, * %dst) { %0: %1 = bitcast * %dst to * %2 = bitcast * %src to * memmove * %1 align 8, * %2 align 8, i64 16 ret void } Transformation seems to be correct! ERROR: Unsupported attribute: noalias ERROR: Unsupported attribute: noalias ---------------------------------------- define void @destroysrc(* %src, * %dst) { %0: %1 = load {*, i8, i24, i32}, * %src, align 8 store {*, i8, i24, i32} { null, 0, [padding], 0 }, * %src, align 8 store {*, i8, i24, i32} %1, * %dst, align 8 ret void } => define void @destroysrc(* %src, * %dst) { %0: %1 = load {*, i8, i24, i32}, * %src, align 8 %2 = bitcast * %src to * memset * %2 align 8, i8 0, i64 16 store {*, i8, i24, i32} %1, * %dst, align 8 ret void } Transformation seems to be correct! ERROR: Unsupported attribute: noalias ---------------------------------------- define void @copyalias(* %src, * %dst) { %0: %1 = load {*, i8, i24, i32}, * %src, align 8 %2 = load {*, i8, i24, i32}, * %src, align 8 store {*, i8, i24, i32} %1, * %dst, align 8 store {*, i8, i24, i32} %2, * %dst, align 8 ret void } => define void @copyalias(* %src, * %dst) { %0: %1 = load {*, i8, i24, i32}, * %src, align 8 %2 = bitcast * %dst to * %3 = bitcast * %src to * memmove * %2 align 8, * %3 align 8, i64 16 store {*, i8, i24, i32} %1, * %dst, align 8 ret void } Transformation seems to be correct! ---------------------------------------- define void @addrproducer(* %src, * %dst) { %0: %1 = load {*, i8, i24, i32}, * %src, align 8 store {*, i8, i24, i32} undef, * %dst, align 8 %dst2 = gep * %dst, 16 x i64 1 store {*, i8, i24, i32} %1, * %dst2, align 8 ret void } => define void @addrproducer(* %src, * %dst) { %0: %1 = bitcast * %dst to * %dst2 = gep * %dst, 16 x i64 1 %2 = bitcast * %dst2 to * %3 = bitcast * %src to * memmove * %2 align 8, * %3 align 8, i64 16 memset * %1 align 8, i8 undef, i64 16 ret void } Transformation doesn't verify! ERROR: Mismatch in memory Example: * %src = pointer(non-local, block_id=1, offset=32) * %dst = pointer(non-local, block_id=1, offset=0) Source: {*, i8, i24, i32} %1 = { poison, poison, poison, poison } * %dst2 = pointer(non-local, block_id=1, offset=16) SOURCE MEMORY STATE =================== NON-LOCAL BLOCKS: Block 0 > size: 0 align: 1 alloc type: 0 Block 1 > size: 131 align: 4294967296 alloc type: 0 Block 2 > size: 8 align: 2 alloc type: 0 Block 3 > size: 8 align: 2 alloc type: 0 Target: * %1 = pointer(non-local, block_id=1, offset=0) * %dst2 = pointer(non-local, block_id=1, offset=16) * %2 = pointer(non-local, block_id=1, offset=16) * %3 = pointer(non-local, block_id=1, offset=32) Mismatch in pointer(non-local, block_id=1, offset=2) Source value: null, byte offset=2 Target value: #bp ------------------- SMT STATS ------------------- Num queries: 12 Num invalid: 0 Num skips: 0 Num trivial: 23 (65.7%) Num timeout: 0 (0.0%) Num errors: 0 (0.0%) Num SAT: 5 (41.7%) Num UNSAT: 7 (58.3%) Alive2: Transform doesn't verify; aborting!
+ : 'RUN: at line 2' + /home/nlopes/alive2/build/opt-alive.sh -memcpyopt -S -verify-memoryssa + /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/MemCpyOpt/fca2memcpy.ll FileCheck error: '<stdin>' is empty. FileCheck command line: /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/MemCpyOpt/fca2memcpy.ll