; RUN: llc -o - %s | FileCheck %s ; Make sure we do not try to compute liveness for FPSCR which in this case ; is read before being written to (this is fine because becase FPSCR is ; reserved). target triple = "thumbv7s-apple-ios" %struct.wibble = type { double } @global = common global i32 0, align 4 @global.1 = common global i32 0, align 4 ; CHECK-LABEL: eggs: ; CHECK: sub sp, #8 ; VMRS instruction comes before any other instruction writing FPSCR: ; CHECK-NOT: vcmp ; CHECK: vmrs {{r[0-9]}}, fpscr ; CHECK; vcmp ; ... ; CHECK: add sp, #8 ; CHECK: bx lr define i32 @eggs(double* nocapture readnone %arg) { bb: %tmp = alloca %struct.wibble, align 4 %tmp1 = bitcast %struct.wibble* %tmp to i8* %tmp2 = tail call i32 @llvm.flt.rounds() %tmp3 = ptrtoint %struct.wibble* %tmp to i32 %tmp4 = sitofp i32 %tmp3 to double %tmp5 = fmul double %tmp4, 0x0123456789ABCDEF %tmp6 = fptosi double %tmp5 to i32 %tmp7 = fcmp une double %tmp5, 0.000000e+00 %tmp8 = sitofp i32 %tmp6 to double %tmp9 = fcmp une double %tmp5, %tmp8 %tmp10 = and i1 %tmp7, %tmp9 %tmp11 = sext i1 %tmp10 to i32 %tmp12 = add nsw i32 %tmp11, %tmp6 store i32 %tmp12, i32* @global, align 4 %tmp13 = icmp ne i32 %tmp12, 0 %tmp14 = icmp ne i32 %tmp2, 0 %tmp15 = and i1 %tmp14, %tmp13 br i1 %tmp15, label %bb16, label %bb18 bb16: ; preds = %bb %tmp17 = load i32, i32* @global.1, align 4 br label %bb18 bb18: ; preds = %bb16, %bb ret i32 undef } declare i32 @llvm.flt.rounds() declare i32 @zot(...)