Index: include/polly/Support/ScopHelper.h =================================================================== --- include/polly/Support/ScopHelper.h +++ include/polly/Support/ScopHelper.h @@ -198,8 +198,11 @@ return asLoad()->getAlignment(); if (isStore()) return asStore()->getAlignment(); + if (isMemTransferInst()) + return std::min(asMemTransferInst()->getDestAlignment(), + asMemTransferInst()->getSourceAlignment()); if (isMemIntrinsic()) - return asMemIntrinsic()->getAlignment(); + return asMemIntrinsic()->getDestAlignment(); if (isCallInst()) return 0; llvm_unreachable("Operation not supported on nullptr"); Index: test/ScopInfo/memcpy.ll =================================================================== --- test/ScopInfo/memcpy.ll +++ test/ScopInfo/memcpy.ll @@ -23,7 +23,7 @@ ; IR: %[[r4:[a-zA-Z0-9]*]] = bitcast i64* %scevgep8 to i8* ; ; IR: polly.stmt.for.body3: -; IR: call void @llvm.memcpy.p0i8.p0i8.i64(i8* %[[r2]], i8* %[[r4]], i64 37, i32 4, i1 false) +; IR: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %[[r2]], i8* align 4 %[[r4]], i64 37, i1 false) ; ; ; #include Index: test/ScopInfo/memmove.ll =================================================================== --- test/ScopInfo/memmove.ll +++ test/ScopInfo/memmove.ll @@ -23,7 +23,7 @@ ; IR: %[[r4:[a-zA-Z0-9]*]] = bitcast i64* %scevgep8 to i8* ; ; IR: polly.stmt.for.body3: -; IR: call void @llvm.memmove.p0i8.p0i8.i64(i8* %[[r2]], i8* %[[r4]], i64 32, i32 4, i1 false) +; IR: call void @llvm.memmove.p0i8.p0i8.i64(i8* align 4 %[[r2]], i8* align 4 %[[r4]], i64 32, i1 false) ; ; #include ; Index: test/ScopInfo/memset.ll =================================================================== --- test/ScopInfo/memset.ll +++ test/ScopInfo/memset.ll @@ -16,7 +16,7 @@ ; IR: %[[r1:[a-zA-Z0-9]*]] = bitcast i32* %A to i8* ; ; IR: polly.stmt.for.body3: -; IR: call void @llvm.memset.p0i8.i64(i8* %[[r1]], i8 36, i64 187, i32 4, i1 false) +; IR: call void @llvm.memset.p0i8.i64(i8* align 4 %[[r1]], i8 36, i64 187, i1 false) ; ; #include ;