; RUN: llc < %s ; In theory, the @llvm.lifetime intrinsics shouldn't contradict each other, but ; in practice they apparently do sometimes. When they do, we should probably be ; conservative. target datalayout = "e-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-p:32:32:32-v128:32:128-n32-S128" target triple = "asmjs-unknown-emscripten" ; Don't merge these two allocas, even though lifetime markers may initially ; appear to indicate that it's safe, because they also indicate that it's ; unsafe. ; CHECK: foo ; CHECK: HEAP8[$p] = 0; ; CHECK: HEAP8[$q] = 1; define void @foo() nounwind { entry: %p = alloca i8 %q = alloca i8 br label %loop loop: call void @llvm.lifetime.end(i64 1, i8* %q) store volatile i8 0, i8* %p store volatile i8 1, i8* %q call void @llvm.lifetime.start(i64 1, i8* %p) br i1 undef, label %loop, label %end end: ; preds = %red ret void } declare void @llvm.lifetime.start(i64, i8* nocapture) nounwind declare void @llvm.lifetime.end(i64, i8* nocapture) nounwind