Index: llvm/lib/CodeGen/CodeGenPrepare.cpp =================================================================== --- llvm/lib/CodeGen/CodeGenPrepare.cpp +++ llvm/lib/CodeGen/CodeGenPrepare.cpp @@ -5900,21 +5900,37 @@ for (Instruction *D : Defs) { if (isa(D)) { ValMap[D] = D->getOperand(0); + salvageDebugInfo(*D); DeletedInstrs.insert(D); } else { - ValMap[D] = + Instruction *N = new BitCastInst(D, ConvertTy, D->getName() + ".bc", D->getNextNode()); + N->setDebugLoc(D->getDebugLoc()); + ValMap[D] = N; } } - for (PHINode *Phi : PhiNodes) - ValMap[Phi] = PHINode::Create(ConvertTy, Phi->getNumIncomingValues(), - Phi->getName() + ".tc", Phi); + for (PHINode *Phi : PhiNodes) { + PHINode *N = PHINode::Create(ConvertTy, Phi->getNumIncomingValues(), + Phi->getName() + ".tc", Phi); + N->setDebugLoc(Phi->getDebugLoc()); + ValMap[Phi] = N; + } // Pipe together all the PhiNodes. for (PHINode *Phi : PhiNodes) { PHINode *NewPhi = cast(ValMap[Phi]); for (int i = 0, e = Phi->getNumIncomingValues(); i < e; i++) NewPhi->addIncoming(ValMap[Phi->getIncomingValue(i)], Phi->getIncomingBlock(i)); + + SmallVector DbgValues; + findDbgValues(DbgValues, Phi); + for (DbgValueInst *DVI : DbgValues) { + // Bitcasts are apparently irrelevant for debug info. Rewrite the dbg.value + // to use the new phi. + DVI->setOperand(0, MetadataAsValue::get(Phi->getContext(), + ValueAsMetadata::get(NewPhi))); + LLVM_DEBUG(dbgs() << "SALVAGE: " << DVI << '\n'); + } Visited.insert(NewPhi); } // And finally pipe up the stores and bitcasts @@ -5923,8 +5939,10 @@ DeletedInstrs.insert(U); U->replaceAllUsesWith(ValMap[U->getOperand(0)]); } else { - U->setOperand(0, - new BitCastInst(ValMap[U->getOperand(0)], PhiTy, "bc", U)); + Instruction *N = + new BitCastInst(ValMap[U->getOperand(0)], PhiTy, "bc", U); + N->setDebugLoc(U->getDebugLoc()); + U->setOperand(0, N); } } Index: llvm/test/CodeGen/AArch64/convertphitype.ll =================================================================== --- llvm/test/CodeGen/AArch64/convertphitype.ll +++ llvm/test/CodeGen/AArch64/convertphitype.ll @@ -29,17 +29,17 @@ ; DEBUG-NEXT: br i1 [[CMP15]], label [[THEN:%.*]], label [[ELSE:%.*]], [[DBG17:!dbg !.*]] ; DEBUG: then: ; DEBUG-NEXT: [[LS:%.*]] = load i32, i32* [[S:%.*]], align 4, [[DBG18:!dbg !.*]] -; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float +; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float, [[DBG18]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LS]], [[META11:metadata !.*]], metadata !DIExpression()), [[DBG18]] ; DEBUG-NEXT: br label [[END:%.*]], [[DBG19:!dbg !.*]] ; DEBUG: else: ; DEBUG-NEXT: [[LD:%.*]] = load i32, i32* [[D:%.*]], align 4, [[DBG20:!dbg !.*]] -; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast i32 [[LD]] to float +; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast i32 [[LD]] to float, [[DBG20]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LD]], [[META13:metadata !.*]], metadata !DIExpression()), [[DBG20]] ; DEBUG-NEXT: br label [[END]], [[DBG21:!dbg !.*]] ; DEBUG: end: -; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ [[LS_BC]], [[THEN]] ], [ [[LD_BC]], [[ELSE]] ] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META14:metadata !.*]], metadata !DIExpression()), [[DBG22:!dbg !.*]] +; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ [[LS_BC]], [[THEN]] ], [ [[LD_BC]], [[ELSE]] ], [[DBG22:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META14:metadata !.*]], metadata !DIExpression()), [[DBG22]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META15:metadata !.*]], metadata !DIExpression()), [[DBG23:!dbg !.*]] ; DEBUG-NEXT: ret float [[PHI_TC]], [[DBG24:!dbg !.*]] ; @@ -81,12 +81,12 @@ ; DEBUG-NEXT: br i1 [[CMP15]], label [[THEN:%.*]], label [[END:%.*]], [[DBG32:!dbg !.*]] ; DEBUG: then: ; DEBUG-NEXT: [[LS:%.*]] = load i32, i32* [[S:%.*]], align 4, [[DBG33:!dbg !.*]] -; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float +; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float, [[DBG33]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LS]], [[META28:metadata !.*]], metadata !DIExpression()), [[DBG33]] ; DEBUG-NEXT: br label [[END]], [[DBG34:!dbg !.*]] ; DEBUG: end: -; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ [[LS_BC]], [[THEN]] ], [ undef, [[ENTRY:%.*]] ] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META29:metadata !.*]], metadata !DIExpression()), [[DBG35:!dbg !.*]] +; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ [[LS_BC]], [[THEN]] ], [ undef, [[ENTRY:%.*]] ], [[DBG35:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META29:metadata !.*]], metadata !DIExpression()), [[DBG35]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META30:metadata !.*]], metadata !DIExpression()), [[DBG36:!dbg !.*]] ; DEBUG-NEXT: ret float [[PHI_TC]], [[DBG37:!dbg !.*]] ; @@ -121,16 +121,16 @@ ; DEBUG-NEXT: entry: ; DEBUG-NEXT: [[CMP15:%.*]] = icmp sgt i32 [[N:%.*]], 0, [[DBG45:!dbg !.*]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[CMP15]], [[META40:metadata !.*]], metadata !DIExpression()), [[DBG45]] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META41:metadata !.*]], metadata !DIExpression()), [[DBG46:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[F:%.*]], [[META41:metadata !.*]], metadata !DIExpression()), [[DBG46:!dbg !.*]] ; DEBUG-NEXT: br i1 [[CMP15]], label [[THEN:%.*]], label [[END:%.*]], [[DBG47:!dbg !.*]] ; DEBUG: then: ; DEBUG-NEXT: [[LS:%.*]] = load i32, i32* [[S:%.*]], align 4, [[DBG48:!dbg !.*]] -; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float +; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float, [[DBG48]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LS]], [[META42:metadata !.*]], metadata !DIExpression()), [[DBG48]] ; DEBUG-NEXT: br label [[END]], [[DBG49:!dbg !.*]] ; DEBUG: end: -; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ [[LS_BC]], [[THEN]] ], [ [[F:%.*]], [[ENTRY:%.*]] ] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META43:metadata !.*]], metadata !DIExpression()), [[DBG50:!dbg !.*]] +; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ [[LS_BC]], [[THEN]] ], [ [[F]], [[ENTRY:%.*]] ], [[DBG50:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META43:metadata !.*]], metadata !DIExpression()), [[DBG50]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META44:metadata !.*]], metadata !DIExpression()), [[DBG51:!dbg !.*]] ; DEBUG-NEXT: ret float [[PHI_TC]], [[DBG52:!dbg !.*]] ; @@ -168,18 +168,18 @@ ; DEBUG-NEXT: entry: ; DEBUG-NEXT: [[CMP15:%.*]] = icmp sgt i32 [[N:%.*]], 0, [[DBG59:!dbg !.*]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[CMP15]], [[META55:metadata !.*]], metadata !DIExpression()), [[DBG59]] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META56:metadata !.*]], metadata !DIExpression()), [[DBG60:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[F:%.*]], [[META56:metadata !.*]], metadata !DIExpression()), [[DBG60:!dbg !.*]] ; DEBUG-NEXT: br i1 [[CMP15]], label [[THEN:%.*]], label [[END:%.*]], [[DBG61:!dbg !.*]] ; DEBUG: then: ; DEBUG-NEXT: [[LS:%.*]] = load i32, i32* [[S:%.*]], align 4, [[DBG62:!dbg !.*]] -; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float +; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float, [[DBG62]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LS]], [[META57:metadata !.*]], metadata !DIExpression()), [[DBG62]] ; DEBUG-NEXT: br label [[END]], [[DBG63:!dbg !.*]] ; DEBUG: end: -; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ [[LS_BC]], [[THEN]] ], [ [[F:%.*]], [[ENTRY:%.*]] ] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META58:metadata !.*]], metadata !DIExpression()), [[DBG64:!dbg !.*]] -; DEBUG-NEXT: [[BC:%.*]] = bitcast float [[PHI_TC]] to i32 -; DEBUG-NEXT: store i32 [[BC]], i32* [[D:%.*]], align 4, [[DBG65:!dbg !.*]] +; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ [[LS_BC]], [[THEN]] ], [ [[F]], [[ENTRY:%.*]] ], [[DBG64:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META58:metadata !.*]], metadata !DIExpression()), [[DBG64]] +; DEBUG-NEXT: [[BC:%.*]] = bitcast float [[PHI_TC]] to i32, [[DBG65:!dbg !.*]] +; DEBUG-NEXT: store i32 [[BC]], i32* [[D:%.*]], align 4, [[DBG65]] ; DEBUG-NEXT: ret void, [[DBG66:!dbg !.*]] ; entry: @@ -221,17 +221,17 @@ ; DEBUG-NEXT: br i1 [[CMP15]], label [[THEN:%.*]], label [[ELSE:%.*]], [[DBG76:!dbg !.*]] ; DEBUG: then: ; DEBUG-NEXT: [[LS:%.*]] = load double, double* [[S:%.*]], align 4, [[DBG77:!dbg !.*]] -; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast double [[LS]] to i64 +; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast double [[LS]] to i64, [[DBG77]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata double [[LS]], [[META70:metadata !.*]], metadata !DIExpression()), [[DBG77]] ; DEBUG-NEXT: br label [[END:%.*]], [[DBG78:!dbg !.*]] ; DEBUG: else: ; DEBUG-NEXT: [[LD:%.*]] = load double, double* [[D:%.*]], align 4, [[DBG79:!dbg !.*]] -; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast double [[LD]] to i64 +; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast double [[LD]] to i64, [[DBG79]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata double [[LD]], [[META72:metadata !.*]], metadata !DIExpression()), [[DBG79]] ; DEBUG-NEXT: br label [[END]], [[DBG80:!dbg !.*]] ; DEBUG: end: -; DEBUG-NEXT: [[PHI_TC:%.*]] = phi i64 [ [[LS_BC]], [[THEN]] ], [ [[LD_BC]], [[ELSE]] ] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata double undef, [[META73:metadata !.*]], metadata !DIExpression()), [[DBG81:!dbg !.*]] +; DEBUG-NEXT: [[PHI_TC:%.*]] = phi i64 [ [[LS_BC]], [[THEN]] ], [ [[LD_BC]], [[ELSE]] ], [[DBG81:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata i64 [[PHI_TC]], [[META73:metadata !.*]], metadata !DIExpression()), [[DBG81]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i64 [[PHI_TC]], [[META74:metadata !.*]], metadata !DIExpression()), [[DBG82:!dbg !.*]] ; DEBUG-NEXT: ret i64 [[PHI_TC]], [[DBG83:!dbg !.*]] ; @@ -277,17 +277,17 @@ ; DEBUG-NEXT: br i1 [[CMP15]], label [[THEN:%.*]], label [[ELSE:%.*]], [[DBG92:!dbg !.*]] ; DEBUG: then: ; DEBUG-NEXT: [[LS:%.*]] = load float, float* [[S:%.*]], align 4, [[DBG93:!dbg !.*]] -; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast float [[LS]] to i32 +; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast float [[LS]] to i32, [[DBG93]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[LS]], [[META87:metadata !.*]], metadata !DIExpression()), [[DBG93]] ; DEBUG-NEXT: br label [[END:%.*]], [[DBG94:!dbg !.*]] ; DEBUG: else: ; DEBUG-NEXT: [[LD:%.*]] = load float, float* [[D:%.*]], align 4, [[DBG95:!dbg !.*]] -; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast float [[LD]] to i32 +; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast float [[LD]] to i32, [[DBG95]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[LD]], [[META88:metadata !.*]], metadata !DIExpression()), [[DBG95]] ; DEBUG-NEXT: br label [[END]], [[DBG96:!dbg !.*]] ; DEBUG: end: -; DEBUG-NEXT: [[PHI_TC:%.*]] = phi i32 [ [[LS_BC]], [[THEN]] ], [ [[LD_BC]], [[ELSE]] ] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata float undef, [[META89:metadata !.*]], metadata !DIExpression()), [[DBG97:!dbg !.*]] +; DEBUG-NEXT: [[PHI_TC:%.*]] = phi i32 [ [[LS_BC]], [[THEN]] ], [ [[LD_BC]], [[ELSE]] ], [[DBG97:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[PHI_TC]], [[META89:metadata !.*]], metadata !DIExpression()), [[DBG97]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[PHI_TC]], [[META90:metadata !.*]], metadata !DIExpression()), [[DBG98:!dbg !.*]] ; DEBUG-NEXT: ret i32 [[PHI_TC]], [[DBG99:!dbg !.*]] ; @@ -333,17 +333,17 @@ ; DEBUG-NEXT: br i1 [[CMP15]], label [[THEN:%.*]], label [[ELSE:%.*]], [[DBG109:!dbg !.*]] ; DEBUG: then: ; DEBUG-NEXT: [[LS:%.*]] = load half, half* [[S:%.*]], align 4, [[DBG110:!dbg !.*]] -; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast half [[LS]] to i16 +; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast half [[LS]] to i16, [[DBG110]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata half [[LS]], [[META103:metadata !.*]], metadata !DIExpression()), [[DBG110]] ; DEBUG-NEXT: br label [[END:%.*]], [[DBG111:!dbg !.*]] ; DEBUG: else: ; DEBUG-NEXT: [[LD:%.*]] = load half, half* [[D:%.*]], align 4, [[DBG112:!dbg !.*]] -; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast half [[LD]] to i16 +; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast half [[LD]] to i16, [[DBG112]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata half [[LD]], [[META105:metadata !.*]], metadata !DIExpression()), [[DBG112]] ; DEBUG-NEXT: br label [[END]], [[DBG113:!dbg !.*]] ; DEBUG: end: -; DEBUG-NEXT: [[PHI_TC:%.*]] = phi i16 [ [[LS_BC]], [[THEN]] ], [ [[LD_BC]], [[ELSE]] ] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata half undef, [[META106:metadata !.*]], metadata !DIExpression()), [[DBG114:!dbg !.*]] +; DEBUG-NEXT: [[PHI_TC:%.*]] = phi i16 [ [[LS_BC]], [[THEN]] ], [ [[LD_BC]], [[ELSE]] ], [[DBG114:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata i16 [[PHI_TC]], [[META106:metadata !.*]], metadata !DIExpression()), [[DBG114]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i16 [[PHI_TC]], [[META107:metadata !.*]], metadata !DIExpression()), [[DBG115:!dbg !.*]] ; DEBUG-NEXT: ret i16 [[PHI_TC]], [[DBG116:!dbg !.*]] ; @@ -389,17 +389,17 @@ ; DEBUG-NEXT: br i1 [[CMP15]], label [[THEN:%.*]], label [[ELSE:%.*]], [[DBG126:!dbg !.*]] ; DEBUG: then: ; DEBUG-NEXT: [[LS:%.*]] = load fp128, fp128* [[S:%.*]], align 4, [[DBG127:!dbg !.*]] -; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast fp128 [[LS]] to i128 +; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast fp128 [[LS]] to i128, [[DBG127]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata fp128 [[LS]], [[META120:metadata !.*]], metadata !DIExpression()), [[DBG127]] ; DEBUG-NEXT: br label [[END:%.*]], [[DBG128:!dbg !.*]] ; DEBUG: else: ; DEBUG-NEXT: [[LD:%.*]] = load fp128, fp128* [[D:%.*]], align 4, [[DBG129:!dbg !.*]] -; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast fp128 [[LD]] to i128 +; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast fp128 [[LD]] to i128, [[DBG129]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata fp128 [[LD]], [[META122:metadata !.*]], metadata !DIExpression()), [[DBG129]] ; DEBUG-NEXT: br label [[END]], [[DBG130:!dbg !.*]] ; DEBUG: end: -; DEBUG-NEXT: [[PHI_TC:%.*]] = phi i128 [ [[LS_BC]], [[THEN]] ], [ [[LD_BC]], [[ELSE]] ] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata fp128 undef, [[META123:metadata !.*]], metadata !DIExpression()), [[DBG131:!dbg !.*]] +; DEBUG-NEXT: [[PHI_TC:%.*]] = phi i128 [ [[LS_BC]], [[THEN]] ], [ [[LD_BC]], [[ELSE]] ], [[DBG131:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata i128 [[PHI_TC]], [[META123:metadata !.*]], metadata !DIExpression()), [[DBG131]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i128 [[PHI_TC]], [[META124:metadata !.*]], metadata !DIExpression()), [[DBG132:!dbg !.*]] ; DEBUG-NEXT: ret i128 [[PHI_TC]], [[DBG133:!dbg !.*]] ; @@ -499,16 +499,16 @@ ; DEBUG-NEXT: [[CMP15:%.*]] = icmp sgt i64 [[N:%.*]], 0, [[DBG161:!dbg !.*]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[CMP15]], [[META152:metadata !.*]], metadata !DIExpression()), [[DBG161]] ; DEBUG-NEXT: [[LS:%.*]] = load i32, i32* [[S:%.*]], align 4, [[DBG162:!dbg !.*]] -; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float +; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float, [[DBG162]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LS]], [[META153:metadata !.*]], metadata !DIExpression()), [[DBG162]] ; DEBUG-NEXT: br i1 [[CMP15]], label [[LOOP:%.*]], label [[END:%.*]], [[DBG163:!dbg !.*]] ; DEBUG: loop: ; DEBUG-NEXT: [[IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ], [[DBG164:!dbg !.*]] -; DEBUG-NEXT: [[LPHI_TC:%.*]] = phi float [ [[LS_BC]], [[ENTRY]] ], [ [[LD_BC:%.*]], [[LOOP]] ] +; DEBUG-NEXT: [[LPHI_TC:%.*]] = phi float [ [[LS_BC]], [[ENTRY]] ], [ [[LD_BC:%.*]], [[LOOP]] ], [[DBG165:!dbg !.*]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i64 [[IV]], [[META154:metadata !.*]], metadata !DIExpression()), [[DBG164]] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META155:metadata !.*]], metadata !DIExpression()), [[DBG165:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[LPHI_TC]], [[META155:metadata !.*]], metadata !DIExpression()), [[DBG165]] ; DEBUG-NEXT: [[LD:%.*]] = load i32, i32* [[D:%.*]], align 4, [[DBG166:!dbg !.*]] -; DEBUG-NEXT: [[LD_BC]] = bitcast i32 [[LD]] to float +; DEBUG-NEXT: [[LD_BC]] = bitcast i32 [[LD]] to float, [[DBG166]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LD]], [[META156:metadata !.*]], metadata !DIExpression()), [[DBG166]] ; DEBUG-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1, [[DBG167:!dbg !.*]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i64 [[IV_NEXT]], [[META157:metadata !.*]], metadata !DIExpression()), [[DBG167]] @@ -516,8 +516,8 @@ ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[EXITCOND]], [[META158:metadata !.*]], metadata !DIExpression()), [[DBG168]] ; DEBUG-NEXT: br i1 [[EXITCOND]], label [[END]], label [[LOOP]], [[DBG169:!dbg !.*]] ; DEBUG: end: -; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ undef, [[ENTRY]] ], [ [[LPHI_TC]], [[LOOP]] ] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META159:metadata !.*]], metadata !DIExpression()), [[DBG170:!dbg !.*]] +; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ undef, [[ENTRY]] ], [ [[LPHI_TC]], [[LOOP]] ], [[DBG170:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META159:metadata !.*]], metadata !DIExpression()), [[DBG170]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META160:metadata !.*]], metadata !DIExpression()), [[DBG171:!dbg !.*]] ; DEBUG-NEXT: ret float [[PHI_TC]], [[DBG172:!dbg !.*]] ; @@ -624,18 +624,18 @@ ; DEBUG-NEXT: [[CMP15:%.*]] = icmp sgt i64 [[N:%.*]], 0, [[DBG208:!dbg !.*]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[CMP15]], [[META198:metadata !.*]], metadata !DIExpression()), [[DBG208]] ; DEBUG-NEXT: [[LS:%.*]] = load i32, i32* [[S:%.*]], align 4, [[DBG209:!dbg !.*]] -; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float +; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float, [[DBG209]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LS]], [[META199:metadata !.*]], metadata !DIExpression()), [[DBG209]] ; DEBUG-NEXT: br i1 [[CMP15]], label [[LOOP:%.*]], label [[END:%.*]], [[DBG210:!dbg !.*]] ; DEBUG: loop: ; DEBUG-NEXT: [[IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ], [[DBG211:!dbg !.*]] -; DEBUG-NEXT: [[LPHI_TC:%.*]] = phi float [ [[LS_BC]], [[ENTRY]] ], [ [[LD_BC:%.*]], [[LOOP]] ] -; DEBUG-NEXT: [[LPHI2_TC:%.*]] = phi float [ undef, [[ENTRY]] ], [ [[LPHI_TC]], [[LOOP]] ] +; DEBUG-NEXT: [[LPHI_TC:%.*]] = phi float [ [[LS_BC]], [[ENTRY]] ], [ [[LD_BC:%.*]], [[LOOP]] ], [[DBG212:!dbg !.*]] +; DEBUG-NEXT: [[LPHI2_TC:%.*]] = phi float [ undef, [[ENTRY]] ], [ [[LPHI_TC]], [[LOOP]] ], [[DBG213:!dbg !.*]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i64 [[IV]], [[META200:metadata !.*]], metadata !DIExpression()), [[DBG211]] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META201:metadata !.*]], metadata !DIExpression()), [[DBG212:!dbg !.*]] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META202:metadata !.*]], metadata !DIExpression()), [[DBG213:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[LPHI_TC]], [[META201:metadata !.*]], metadata !DIExpression()), [[DBG212]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[LPHI2_TC]], [[META202:metadata !.*]], metadata !DIExpression()), [[DBG213]] ; DEBUG-NEXT: [[LD:%.*]] = load i32, i32* [[D:%.*]], align 4, [[DBG214:!dbg !.*]] -; DEBUG-NEXT: [[LD_BC]] = bitcast i32 [[LD]] to float +; DEBUG-NEXT: [[LD_BC]] = bitcast i32 [[LD]] to float, [[DBG214]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LD]], [[META203:metadata !.*]], metadata !DIExpression()), [[DBG214]] ; DEBUG-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1, [[DBG215:!dbg !.*]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i64 [[IV_NEXT]], [[META204:metadata !.*]], metadata !DIExpression()), [[DBG215]] @@ -643,8 +643,8 @@ ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[EXITCOND]], [[META205:metadata !.*]], metadata !DIExpression()), [[DBG216]] ; DEBUG-NEXT: br i1 [[EXITCOND]], label [[END]], label [[LOOP]], [[DBG217:!dbg !.*]] ; DEBUG: end: -; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ undef, [[ENTRY]] ], [ [[LPHI2_TC]], [[LOOP]] ] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META206:metadata !.*]], metadata !DIExpression()), [[DBG218:!dbg !.*]] +; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ undef, [[ENTRY]] ], [ [[LPHI2_TC]], [[LOOP]] ], [[DBG218:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META206:metadata !.*]], metadata !DIExpression()), [[DBG218]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META207:metadata !.*]], metadata !DIExpression()), [[DBG219:!dbg !.*]] ; DEBUG-NEXT: ret float [[PHI_TC]], [[DBG220:!dbg !.*]] ; @@ -706,43 +706,43 @@ ; DEBUG-NEXT: [[CMP:%.*]] = icmp eq i64 [[N:%.*]], 1, [[DBG236:!dbg !.*]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[CMP]], [[META223:metadata !.*]], metadata !DIExpression()), [[DBG236]] ; DEBUG-NEXT: [[LS:%.*]] = load i32, i32* [[S:%.*]], align 4, [[DBG237:!dbg !.*]] -; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float +; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float, [[DBG237]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LS]], [[META224:metadata !.*]], metadata !DIExpression()), [[DBG237]] ; DEBUG-NEXT: br i1 [[CMP]], label [[THEN:%.*]], label [[IFEND:%.*]], [[DBG238:!dbg !.*]] ; DEBUG: then: ; DEBUG-NEXT: [[LD:%.*]] = load i32, i32* [[D:%.*]], align 4, [[DBG239:!dbg !.*]] -; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast i32 [[LD]] to float +; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast i32 [[LD]] to float, [[DBG239]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LD]], [[META225:metadata !.*]], metadata !DIExpression()), [[DBG239]] ; DEBUG-NEXT: br label [[IFEND]], [[DBG240:!dbg !.*]] ; DEBUG: ifend: -; DEBUG-NEXT: [[PHI1_TC:%.*]] = phi float [ [[LD_BC]], [[THEN]] ], [ [[LS_BC]], [[ENTRY:%.*]] ] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META226:metadata !.*]], metadata !DIExpression()), [[DBG241:!dbg !.*]] +; DEBUG-NEXT: [[PHI1_TC:%.*]] = phi float [ [[LD_BC]], [[THEN]] ], [ [[LS_BC]], [[ENTRY:%.*]] ], [[DBG241:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI1_TC]], [[META226:metadata !.*]], metadata !DIExpression()), [[DBG241]] ; DEBUG-NEXT: [[CMP15:%.*]] = icmp sgt i64 [[N]], 0, [[DBG242:!dbg !.*]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[CMP15]], [[META227:metadata !.*]], metadata !DIExpression()), [[DBG242]] ; DEBUG-NEXT: br i1 [[CMP15]], label [[LOOP:%.*]], label [[END:%.*]], [[DBG243:!dbg !.*]] ; DEBUG: loop: ; DEBUG-NEXT: [[IV:%.*]] = phi i64 [ 0, [[IFEND]] ], [ [[IV_NEXT:%.*]], [[LOOPEND:%.*]] ], [[DBG244:!dbg !.*]] -; DEBUG-NEXT: [[PHI2_TC:%.*]] = phi float [ [[PHI1_TC]], [[IFEND]] ], [ [[PHI3_TC:%.*]], [[LOOPEND]] ] +; DEBUG-NEXT: [[PHI2_TC:%.*]] = phi float [ [[PHI1_TC]], [[IFEND]] ], [ [[PHI3_TC:%.*]], [[LOOPEND]] ], [[DBG245:!dbg !.*]] ; DEBUG-NEXT: [[TMP0:%.*]] = icmp eq i64 [[N]], 1, [[DBG236]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i64 [[IV]], [[META228:metadata !.*]], metadata !DIExpression()), [[DBG244]] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META229:metadata !.*]], metadata !DIExpression()), [[DBG245:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI2_TC]], [[META229:metadata !.*]], metadata !DIExpression()), [[DBG245]] ; DEBUG-NEXT: br i1 [[TMP0]], label [[LOOPTHEN:%.*]], label [[LOOPEND]], [[DBG246:!dbg !.*]] ; DEBUG: loopthen: ; DEBUG-NEXT: [[LL:%.*]] = load i32, i32* [[D]], align 4, [[DBG247:!dbg !.*]] -; DEBUG-NEXT: [[LL_BC:%.*]] = bitcast i32 [[LL]] to float +; DEBUG-NEXT: [[LL_BC:%.*]] = bitcast i32 [[LL]] to float, [[DBG247]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LL]], [[META230:metadata !.*]], metadata !DIExpression()), [[DBG247]] ; DEBUG-NEXT: br label [[LOOPEND]], [[DBG248:!dbg !.*]] ; DEBUG: loopend: -; DEBUG-NEXT: [[PHI3_TC]] = phi float [ [[LL_BC]], [[LOOPTHEN]] ], [ [[PHI2_TC]], [[LOOP]] ] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META231:metadata !.*]], metadata !DIExpression()), [[DBG249:!dbg !.*]] +; DEBUG-NEXT: [[PHI3_TC]] = phi float [ [[LL_BC]], [[LOOPTHEN]] ], [ [[PHI2_TC]], [[LOOP]] ], [[DBG249:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI3_TC]], [[META231:metadata !.*]], metadata !DIExpression()), [[DBG249]] ; DEBUG-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1, [[DBG250:!dbg !.*]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i64 [[IV_NEXT]], [[META232:metadata !.*]], metadata !DIExpression()), [[DBG250]] ; DEBUG-NEXT: [[EXITCOND:%.*]] = icmp eq i64 [[IV_NEXT]], [[N]], [[DBG251:!dbg !.*]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[EXITCOND]], [[META233:metadata !.*]], metadata !DIExpression()), [[DBG251]] ; DEBUG-NEXT: br i1 [[EXITCOND]], label [[END]], label [[LOOP]], [[DBG252:!dbg !.*]] ; DEBUG: end: -; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ [[PHI1_TC]], [[IFEND]] ], [ [[PHI3_TC]], [[LOOPEND]] ] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META234:metadata !.*]], metadata !DIExpression()), [[DBG253:!dbg !.*]] +; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ [[PHI1_TC]], [[IFEND]] ], [ [[PHI3_TC]], [[LOOPEND]] ], [[DBG253:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META234:metadata !.*]], metadata !DIExpression()), [[DBG253]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META235:metadata !.*]], metadata !DIExpression()), [[DBG254:!dbg !.*]] ; DEBUG-NEXT: ret float [[PHI_TC]], [[DBG255:!dbg !.*]] ; @@ -924,17 +924,17 @@ ; DEBUG-NEXT: br i1 [[CMP15]], label [[THEN:%.*]], label [[ELSE:%.*]], [[DBG300:!dbg !.*]] ; DEBUG: then: ; DEBUG-NEXT: [[LS:%.*]] = load i32, i32* [[S:%.*]], align 4, [[DBG301:!dbg !.*]] -; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float +; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float, [[DBG301]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LS]], [[META295:metadata !.*]], metadata !DIExpression()), [[DBG301]] ; DEBUG-NEXT: br label [[END:%.*]], [[DBG302:!dbg !.*]] ; DEBUG: else: ; DEBUG-NEXT: [[LD:%.*]] = load i32, i32* [[D:%.*]], align 4, [[DBG303:!dbg !.*]] -; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast i32 [[LD]] to float +; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast i32 [[LD]] to float, [[DBG303]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LD]], [[META296:metadata !.*]], metadata !DIExpression()), [[DBG303]] ; DEBUG-NEXT: br label [[END]], [[DBG304:!dbg !.*]] ; DEBUG: end: -; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ [[LS_BC]], [[THEN]] ], [ [[LD_BC]], [[ELSE]] ] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META297:metadata !.*]], metadata !DIExpression()), [[DBG305:!dbg !.*]] +; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ [[LS_BC]], [[THEN]] ], [ [[LD_BC]], [[ELSE]] ], [[DBG305:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META297:metadata !.*]], metadata !DIExpression()), [[DBG305]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META298:metadata !.*]], metadata !DIExpression()), [[DBG306:!dbg !.*]] ; DEBUG-NEXT: store float [[PHI_TC]], float* [[E:%.*]], align 4, [[DBG307:!dbg !.*]] ; DEBUG-NEXT: ret float [[PHI_TC]], [[DBG308:!dbg !.*]] @@ -988,21 +988,21 @@ ; DEBUG-NEXT: [[CMP15:%.*]] = icmp sgt i32 [[N:%.*]], 0, [[DBG318:!dbg !.*]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i1 [[CMP15]], [[META311:metadata !.*]], metadata !DIExpression()), [[DBG318]] ; DEBUG-NEXT: [[LD:%.*]] = load i32, i32* [[D:%.*]], align 4, [[DBG319:!dbg !.*]] -; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast i32 [[LD]] to float +; DEBUG-NEXT: [[LD_BC:%.*]] = bitcast i32 [[LD]] to float, [[DBG319]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LD]], [[META312:metadata !.*]], metadata !DIExpression()), [[DBG319]] ; DEBUG-NEXT: br i1 [[CMP15]], label [[THEN:%.*]], label [[END:%.*]], [[DBG320:!dbg !.*]] ; DEBUG: then: ; DEBUG-NEXT: [[LS:%.*]] = load i32, i32* [[S:%.*]], align 4, [[DBG321:!dbg !.*]] -; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float +; DEBUG-NEXT: [[LS_BC:%.*]] = bitcast i32 [[LS]] to float, [[DBG321]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 [[LS]], [[META313:metadata !.*]], metadata !DIExpression()), [[DBG321]] ; DEBUG-NEXT: br label [[END]], [[DBG322:!dbg !.*]] ; DEBUG: end: -; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ [[LS_BC]], [[THEN]] ], [ [[LD_BC]], [[ENTRY:%.*]] ] +; DEBUG-NEXT: [[PHI_TC:%.*]] = phi float [ [[LS_BC]], [[THEN]] ], [ [[LD_BC]], [[ENTRY:%.*]] ], [[DBG323:!dbg !.*]] ; DEBUG-NEXT: [[TMP0:%.*]] = icmp sgt i32 [[N]], 0, [[DBG318]] -; DEBUG-NEXT: call void @llvm.dbg.value(metadata i32 undef, [[META314:metadata !.*]], metadata !DIExpression()), [[DBG323:!dbg !.*]] +; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META314:metadata !.*]], metadata !DIExpression()), [[DBG323]] ; DEBUG-NEXT: call void @llvm.dbg.value(metadata float [[PHI_TC]], [[META315:metadata !.*]], metadata !DIExpression()), [[DBG324:!dbg !.*]] -; DEBUG-NEXT: [[BC:%.*]] = bitcast float [[PHI_TC]] to i32 -; DEBUG-NEXT: store i32 [[BC]], i32* [[S]], align 4, [[DBG325:!dbg !.*]] +; DEBUG-NEXT: [[BC:%.*]] = bitcast float [[PHI_TC]] to i32, [[DBG325:!dbg !.*]] +; DEBUG-NEXT: store i32 [[BC]], i32* [[S]], align 4, [[DBG325]] ; DEBUG-NEXT: br i1 [[TMP0]], label [[THEN2:%.*]], label [[END2:%.*]], [[DBG326:!dbg !.*]] ; DEBUG: then2: ; DEBUG-NEXT: [[LF:%.*]] = load float, float* [[E:%.*]], align 4, [[DBG327:!dbg !.*]]