Page MenuHomePhabricator

markus (Markus Lavin)
User

Projects

User does not belong to any projects.

User Details

User Since
Nov 19 2018, 1:12 AM (106 w, 4 d)

Recent Activity

Tue, Dec 1

markus requested review of D87494: Improve LSR debug-info.
Tue, Dec 1, 8:20 AM · Restricted Project, debug-info
markus reopened D87494: Improve LSR debug-info.
Tue, Dec 1, 8:19 AM · Restricted Project, debug-info
markus updated the diff for D87494: Improve LSR debug-info.

Addressing the issues with use of stored SCEV after IR had been deleted (see https://reviews.llvm.org/D91711).

Tue, Dec 1, 8:19 AM · Restricted Project, debug-info
markus abandoned D91711: SCEV add function to see if SCEVUnknown is null.
Tue, Dec 1, 7:51 AM · Restricted Project

Fri, Nov 27

markus added a comment to D91711: SCEV add function to see if SCEVUnknown is null.

Thanks for the clarification. The offending patch has been reverted now (in 808fcfe5944755f0).

Fri, Nov 27, 12:04 AM · Restricted Project

Thu, Nov 26

markus added a reverting change for rG06758c6a6135: [DebugInfo] Improve dbg preservation in LSR.: rG808fcfe59447: Revert "[DebugInfo] Improve dbg preservation in LSR.".
Thu, Nov 26, 11:56 PM
markus committed rG808fcfe59447: Revert "[DebugInfo] Improve dbg preservation in LSR." (authored by markus).
Revert "[DebugInfo] Improve dbg preservation in LSR."
Thu, Nov 26, 11:56 PM
markus added a reverting change for D87494: Improve LSR debug-info: rG808fcfe59447: Revert "[DebugInfo] Improve dbg preservation in LSR.".
Thu, Nov 26, 11:56 PM · Restricted Project, debug-info
markus added a comment to D91711: SCEV add function to see if SCEVUnknown is null.

Right, there is nothing special with llvm.dbg.value besides that it is a debug intrinsic so it is not allowed to affect optimizations and the fact that such intrinsic uses another Value may not inhibit transformation on that Value. I just wanted to point it out since the situation that predecessors of an instruction get removed without the instruction itself is a bit unusual (but otherwise unimportant for this discussion).

Thu, Nov 26, 7:37 AM · Restricted Project

Wed, Nov 25

markus added a comment to D91711: SCEV add function to see if SCEVUnknown is null.

Do we know at which point LSR deletes the code? To me it looks like we just forgot to call forgetLoop or smth like this somewhere.

Wed, Nov 25, 4:10 AM · Restricted Project
markus added a comment to D91711: SCEV add function to see if SCEVUnknown is null.

The idea of having SCEV pointing to deleted instructions scares me. Imagine what if we had SCEVAddRecs referencing the loops we've already deleted. There is a vast field for nasty bugs caused by UB and memory corruption. I'd rather expect that we fail some assertion if we try to optimize with SCEV in that state.

Wed, Nov 25, 2:02 AM · Restricted Project

Mon, Nov 23

markus added reviewers for D91711: SCEV add function to see if SCEVUnknown is null: nikic, mkazantsev, lebedev.ri, jmorse.
Mon, Nov 23, 11:57 PM · Restricted Project

Wed, Nov 18

markus added a reviewer for D91711: SCEV add function to see if SCEVUnknown is null: reames.
Wed, Nov 18, 11:40 PM · Restricted Project
markus requested review of D91711: SCEV add function to see if SCEVUnknown is null.
Wed, Nov 18, 7:27 AM · Restricted Project

Oct 29 2020

markus added inline comments to D89218: [DebugInfo] Support for DW_TAG_generic_subrange.
Oct 29 2020, 2:50 AM · debug-info, Restricted Project

Oct 21 2020

markus added a comment to D89838: [DebugInfo] Fix legacy ZExt emission when FromBits >= 64 (PR47927).

Some nits below but in general looks good to me.

Oct 21 2020, 12:53 AM · Restricted Project

Oct 8 2020

markus committed rG06758c6a6135: [DebugInfo] Improve dbg preservation in LSR. (authored by markus).
[DebugInfo] Improve dbg preservation in LSR.
Oct 8 2020, 4:20 AM

Oct 6 2020

markus added a comment to D87494: Improve LSR debug-info.

@nikic, @saugustine, thanks for reverting and having a look. I did not receive any notification mail about those build-bot failures AFAICT. I got two but one failure went away on a subsequent run and the other complained about internal compiler error in g++ which seemed unrelated. Anyway I will try to reproduce locally and address the issue as suggested. Thanks again.

Oct 6 2020, 5:47 AM · Restricted Project, debug-info

Oct 5 2020

markus committed rGa3caf7f6102d: [DebugInfo] Improve dbg preservation in LSR. (authored by markus).
[DebugInfo] Improve dbg preservation in LSR.
Oct 5 2020, 12:56 AM
markus closed D87494: Improve LSR debug-info.
Oct 5 2020, 12:55 AM · Restricted Project, debug-info

Oct 1 2020

markus requested review of D87494: Improve LSR debug-info.

Really minor changes since last approved revision but I would prefer if someone gave a renewed blessing.

Oct 1 2020, 1:50 AM · Restricted Project, debug-info
markus updated the diff for D87494: Improve LSR debug-info.

Tuns out that previous "safety code" caused problems when bootstraping clang. Apparently it is not safe to do getType() on all SCEVs so instead we now store away the type information and compare on the Value instead of the SCEV.

Oct 1 2020, 1:47 AM · Restricted Project, debug-info

Sep 30 2020

markus updated the diff for D87494: Improve LSR debug-info.

Added safety code to make sure that we are comparing SCEVs of the same Type.

Sep 30 2020, 4:20 AM · Restricted Project, debug-info

Sep 29 2020

markus updated the diff for D87494: Improve LSR debug-info.
Sep 29 2020, 5:16 AM · Restricted Project, debug-info
markus updated the diff for D87494: Improve LSR debug-info.

Addressed minor comments by @bjope

Sep 29 2020, 1:14 AM · Restricted Project, debug-info

Sep 23 2020

markus added a comment to D87494: Improve LSR debug-info.

This is looking good, a few nits inline. Some slightly broader questions: do you know if there's any risk of debug-info affecting decisions made by SCEV, i.e. causing codegen to change when compiling -g? I don't have any reason to believe that could be the case, but it's a fear in the back of my mind.

Sep 23 2020, 12:20 AM · Restricted Project, debug-info

Sep 22 2020

markus updated the diff for D87494: Improve LSR debug-info.

Fixed most of the review remarks.

Sep 22 2020, 11:58 PM · Restricted Project, debug-info

Sep 21 2020

markus updated the diff for D87494: Improve LSR debug-info.

Updated with full context patch.

Sep 21 2020, 1:23 AM · Restricted Project, debug-info

Sep 15 2020

markus retitled D87494: Improve LSR debug-info from [WIP] Improve LSR debug-info to Improve LSR debug-info.
Sep 15 2020, 5:11 AM · Restricted Project, debug-info

Sep 14 2020

markus updated the diff for D87494: Improve LSR debug-info.

Change of appraoch. Instead of hooking into deleteDeadPHIs with an AboutToDeleteCallback we do a pre-pass to store a way the llvm.dbg.value of the loop as well as their SCEV expressions. After LSR has done its thing we go through those stored away llvm.dbg.value and if any of them now has an undef variable location we try to update it using its stored SCEV.

Sep 14 2020, 3:58 AM · Restricted Project, debug-info

Sep 11 2020

markus added inline comments to D87494: Improve LSR debug-info.
Sep 11 2020, 12:40 AM · Restricted Project, debug-info

Sep 10 2020

markus added inline comments to D87494: Improve LSR debug-info.
Sep 10 2020, 11:12 PM · Restricted Project, debug-info
markus requested review of D87494: Improve LSR debug-info.
Sep 10 2020, 11:02 PM · Restricted Project, debug-info

Jun 4 2019

markus added a comment to D62604: [CodeGen] Generic Hardware Loop Support.

I would expect many targets to have some kind of validity check late on in the pipeline. loop.decrement.reg is designed so that it could just be selected to a machine sub, as the IV chain still exists along with the icmp and br. I have assumed that because the intrinsic behaves like a sub, any target should be able to, hopefully trivially, fall back to a machine sub late on. Is this something that would be difficult for you..? The loop.decrement, which produces an i1, would cause more problems but this framework allows the backend to make the best decision for itself.

Jun 4 2019, 4:19 AM
markus added a comment to D62604: [CodeGen] Generic Hardware Loop Support.

What happens if a target decides late (like addPreEmitPass() late) that a hardware loop is no longer possible due to reasons that are not detectable from the IR level hook. For PowerPC this does not seem to be an issue, or at least I cannot find it in the code, but for other targets there could be limitations that you need to analyse the actual machine instructions to find out about. Since the original IV chain has been replaced by intrinsic llvm.loop.decrement.reg (or whatever it iselected to) it seems we now would need to manually insert instructions to update the loop counter which could possibly be a bit hairy to do this late.

Jun 4 2019, 2:33 AM

Jun 3 2019

markus added inline comments to D62604: [CodeGen] Generic Hardware Loop Support.
Jun 3 2019, 6:08 AM
markus added inline comments to D62604: [CodeGen] Generic Hardware Loop Support.
Jun 3 2019, 4:06 AM

May 21 2019

markus added a comment to D62132: [RFC] Intrinsics for Hardware Loops.

This is interesting. Our (Ericsson's) out-of-tree target has hardware loops and we currently do a similar thing i.e.

May 21 2019, 12:39 AM

May 13 2019

markus added a comment to D61184: [Salvage] Change salvage debug info implementation to use new DW_OP_LLVM_convert where needed.

The DW_OP_LLVM_convert stuff looks-good-to-me but I don't feel that I have authority to approve for the rest so please don't wait for any input from my part.

May 13 2019, 7:57 AM · Restricted Project

May 9 2019

markus committed rG92d5db524e65: Make sub-registers index names case sensitive in the MIRParser (authored by markus).
Make sub-registers index names case sensitive in the MIRParser
May 9 2019, 1:27 AM
markus committed rL360318: Make sub-registers index names case sensitive in the MIRParser.
Make sub-registers index names case sensitive in the MIRParser
May 9 2019, 1:27 AM
markus closed D61499: Make sub-registers index names case sensitive in the MIRParser.
May 9 2019, 1:27 AM · Restricted Project

May 6 2019

markus committed rGa778074165ca: [DebugInfo] GlobalOpt DW_OP_deref_size instead of DW_OP_deref. (authored by markus).
[DebugInfo] GlobalOpt DW_OP_deref_size instead of DW_OP_deref.
May 6 2019, 12:20 AM
markus committed rL360013: [DebugInfo] GlobalOpt DW_OP_deref_size instead of DW_OP_deref..
[DebugInfo] GlobalOpt DW_OP_deref_size instead of DW_OP_deref.
May 6 2019, 12:19 AM
markus closed D60611: [DebugInfo] GlobalOpt DW_OP_deref_size instead of DW_OP_deref..
May 6 2019, 12:19 AM · Restricted Project, debug-info

May 3 2019

markus abandoned D60311: MIR printer should lowercase sub-register names to be in sync with parser?.

Superseded by https://reviews.llvm.org/D61499

May 3 2019, 6:18 AM · Restricted Project
markus created D61499: Make sub-registers index names case sensitive in the MIRParser.
May 3 2019, 6:16 AM · Restricted Project

Apr 30 2019

markus committed rGa475da36eb50: [DebugInfo] DW_OP_deref_size in PrologEpilogInserter. (authored by markus).
[DebugInfo] DW_OP_deref_size in PrologEpilogInserter.
Apr 30 2019, 1:00 AM
markus committed rL359535: [DebugInfo] DW_OP_deref_size in PrologEpilogInserter..
[DebugInfo] DW_OP_deref_size in PrologEpilogInserter.
Apr 30 2019, 12:57 AM
markus closed D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.
Apr 30 2019, 12:57 AM · Restricted Project, debug-info

Apr 29 2019

markus added a comment to D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.

Can (or should) I proceed to push this again? I am a bit confused since the accepted status remains even though I upload new patches.

Apr 29 2019, 2:50 AM · Restricted Project, debug-info
markus added a comment to D61184: [Salvage] Change salvage debug info implementation to use new DW_OP_LLVM_convert where needed.

A bit prettier would be to introduce a DW_OP_LLVM_reinterpret op to do that job.

I am preparing a patch for that right now. Regardless of this review it should make the existing DW_OP_LLVM_convert stuff a bit cleaner.

Apr 29 2019, 1:39 AM · Restricted Project
markus added a comment to D61184: [Salvage] Change salvage debug info implementation to use new DW_OP_LLVM_convert where needed.

A bit prettier would be to introduce a DW_OP_LLVM_reinterpret op to do that job.

Apr 29 2019, 12:10 AM · Restricted Project

Apr 26 2019

markus added a comment to D61184: [Salvage] Change salvage debug info implementation to use new DW_OP_LLVM_convert where needed.

Have you verified that this results in the desired DW_OPs being emitted in the end and that the (or a) debugger makes sense out of it?

Apr 26 2019, 6:17 AM · Restricted Project
markus updated the diff for D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.

Use MI.isIndirectDebugValue() and improved the test a bit.

Apr 26 2019, 12:47 AM · Restricted Project, debug-info

Apr 25 2019

markus updated the diff for D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.

After studying the reproducer and reading some in https://llvm.org/docs/SourceLevelDebugging.html I realize that maybe isImplicit() is not a sufficient condition and that we also need to include the second operand of the DBG_VALUE in the test.

Apr 25 2019, 5:30 AM · Restricted Project, debug-info
markus updated subscribers of D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.

You may already know this, but just in case: I'm using results delta (http://delta.tigris.org) for these kind of jobs with great results. There is also creduce, but in my personal experience it is slower than multidelta and more easily tripped by unusual inputs.

Apr 25 2019, 5:16 AM · Restricted Project, debug-info

Apr 18 2019

markus added a comment to D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.

! In D59687#1468571, @probinson wrote:
It sounds like you're trying to do this with aggregate types, and that won't work. Only base types (for DWARF 5) or address-like types (for DWARF <= 4) should end up on the stack.

Apr 18 2019, 2:44 AM · Restricted Project, debug-info

Apr 16 2019

markus updated the diff for D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.

The Chromium compilation segfault comes down to two issues:

Apr 16 2019, 6:56 AM · Restricted Project, debug-info

Apr 13 2019

markus reopened D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.

Has been reverted in

commit 0366e3e18142466e4dd99d3109d8facd093cedc8 (llvm.org/master, master)
Author: Hans Wennborg <hans@hanshq.net>
Date:   Fri Apr 12 12:54:52 2019 +0000
Apr 13 2019, 12:54 AM · Restricted Project, debug-info

Apr 12 2019

markus created D60611: [DebugInfo] GlobalOpt DW_OP_deref_size instead of DW_OP_deref..
Apr 12 2019, 5:45 AM · Restricted Project, debug-info
markus committed rG138c76129bbe: [DebugInfo] DW_OP_deref_size in PrologEpilogInserter. (authored by markus).
[DebugInfo] DW_OP_deref_size in PrologEpilogInserter.
Apr 12 2019, 1:24 AM
markus committed rL358268: [DebugInfo] DW_OP_deref_size in PrologEpilogInserter..
[DebugInfo] DW_OP_deref_size in PrologEpilogInserter.
Apr 12 2019, 1:24 AM
markus closed D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.
Apr 12 2019, 1:23 AM · Restricted Project, debug-info

Apr 11 2019

markus added inline comments to D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.
Apr 11 2019, 12:22 AM · Restricted Project, debug-info
markus updated the diff for D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.

Moved isImplicit() to .cpp file.

Apr 11 2019, 12:22 AM · Restricted Project, debug-info

Apr 9 2019

markus updated the diff for D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.

Rebased and updated isImplicit() to only check last elements.

Apr 9 2019, 6:44 AM · Restricted Project, debug-info

Apr 5 2019

markus added a comment to D60311: MIR printer should lowercase sub-register names to be in sync with parser?.

I think it would be better to let the printer use the same convention as the specified in the definitions (as used in the code).
And then I think it is a bug in the parser, as it tries to be case insensitive by matching the parsed string against a lower case definition. It should also lower the parsed string if we want the parser to be case insensitive.

If we fix the parser instead, then we still would get debug printouts etc that matches the mixed case used in the C++ code. Or maybe I haven't understood the problem correctly.

Apr 5 2019, 3:00 AM · Restricted Project
markus created D60311: MIR printer should lowercase sub-register names to be in sync with parser?.
Apr 5 2019, 1:29 AM · Restricted Project
markus added a comment to D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.

Ping @aprantl, just a friendly reminder.

Apr 5 2019, 1:07 AM · Restricted Project, debug-info

Mar 28 2019

markus abandoned D59685: [DebugInfo] MIRParser support to handle DW_OP_LLVM_convert ops.
Mar 28 2019, 9:44 AM · Restricted Project, debug-info
markus updated the diff for D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.

Rebased and fixed style nit.

Mar 28 2019, 5:42 AM · Restricted Project, debug-info
markus updated the diff for D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.

Moved isImplicit to DIExpression class and updated test to do sext instead of zext.

Mar 28 2019, 2:03 AM · Restricted Project, debug-info

Mar 26 2019

markus added a comment to D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.

Again (and sorry for possibly over emphasizing this) the purpose of this patch is that a DW_OP_deref needs to be inserted before a memory location description can be prepended to an already existing implicit location description as otherwise the latter expression would act on the former address and not the actual value in memory.

Mar 26 2019, 2:00 AM · Restricted Project, debug-info

Mar 25 2019

markus added a comment to D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.

I am a bit worried about the other DW_OP_deref used in the compiler and how they behave wrt big-endian targets when loading something that is smaller than the size of an address on the target machine. I do not have any concrete example of where it goes wrong but I have not actively looked for one either.

Mar 25 2019, 7:18 AM · Restricted Project, debug-info

Mar 22 2019

markus abandoned D57010: Fix sign/zero extension in Dwarf expressions (with pseudo ops).
Mar 22 2019, 3:40 AM · Restricted Project, debug-info
markus created D59687: [DebugInfo] Prologue inserter need to insert DW_OP_deref_size.
Mar 22 2019, 3:34 AM · Restricted Project, debug-info
markus created D59685: [DebugInfo] MIRParser support to handle DW_OP_LLVM_convert ops.
Mar 22 2019, 3:19 AM · Restricted Project, debug-info

Mar 20 2019

markus added inline comments to D59149: [LV] move useEmulatedMaskMemRefHack() functionality to TTI..
Mar 20 2019, 1:54 AM · Restricted Project

Mar 19 2019

markus committed rG00160e226f68: [DebugInfo] Move test files added in r356451 (authored by markus).
[DebugInfo] Move test files added in r356451
Mar 19 2019, 8:16 AM
markus committed rL356460: [DebugInfo] Move test files added in r356451.
[DebugInfo] Move test files added in r356451
Mar 19 2019, 8:16 AM
markus committed rGb86ce219f4da: [DebugInfo] Introduce DW_OP_LLVM_convert (authored by markus).
[DebugInfo] Introduce DW_OP_LLVM_convert
Mar 19 2019, 6:17 AM
markus committed rL356451: [DebugInfo] Introduce DW_OP_LLVM_convert.
[DebugInfo] Introduce DW_OP_LLVM_convert
Mar 19 2019, 6:15 AM
markus committed rGad78768d5933: Revert "[DebugInfo] Introduce DW_OP_LLVM_convert" (authored by markus).
Revert "[DebugInfo] Introduce DW_OP_LLVM_convert"
Mar 19 2019, 2:17 AM
markus committed rL356444: Revert "[DebugInfo] Introduce DW_OP_LLVM_convert".
Revert "[DebugInfo] Introduce DW_OP_LLVM_convert"
Mar 19 2019, 2:16 AM
markus added a comment to D59149: [LV] move useEmulatedMaskMemRefHack() functionality to TTI..

I guess what we want to achieve here (and please correct me if I am wrong) is

Mar 19 2019, 2:02 AM · Restricted Project
markus committed rGcd8a940b37b2: [DebugInfo] Introduce DW_OP_LLVM_convert (authored by markus).
[DebugInfo] Introduce DW_OP_LLVM_convert
Mar 19 2019, 1:49 AM
markus committed rL356442: [DebugInfo] Introduce DW_OP_LLVM_convert.
[DebugInfo] Introduce DW_OP_LLVM_convert
Mar 19 2019, 1:49 AM
markus closed D56587: Introduce DW_OP_LLVM_convert.
Mar 19 2019, 1:48 AM · Restricted Project, debug-info

Mar 12 2019

markus added a comment to D59149: [LV] move useEmulatedMaskMemRefHack() functionality to TTI..

Any improvement is an improvement so I am happy with that but it is still mentioned that this solution is a hack and I guess the

Mar 12 2019, 7:12 AM · Restricted Project

Mar 1 2019

markus added a comment to D56587: Introduce DW_OP_LLVM_convert.

We're almost there!

Yay :)

Mar 1 2019, 12:49 AM · Restricted Project, debug-info

Feb 28 2019

markus updated the diff for D56587: Introduce DW_OP_LLVM_convert.
  • Removed explicit check for DW_OP_convert and replaced with a generic handling of operands that should work with all types (regardless if it is first, second or both that is BaseTypeRef).
Feb 28 2019, 4:43 AM · Restricted Project, debug-info

Feb 27 2019

markus updated the diff for D56587: Introduce DW_OP_LLVM_convert.
  • Rewrote the expression parsing state machine in DwarfDebug::emitDebugLocEntry to use DWARFExpression as this avoids duplication of code describing ops and their arguments (got inspired by the dsymutil review).
Feb 27 2019, 7:44 AM · Restricted Project, debug-info

Feb 26 2019

markus added inline comments to D58534: dsymutil support for DW_OP_convert.
Feb 26 2019, 11:07 PM · Restricted Project, debug-info

Feb 25 2019

markus added inline comments to D58534: dsymutil support for DW_OP_convert.
Feb 25 2019, 11:38 PM · Restricted Project, debug-info

Feb 22 2019

markus added inline comments to D56587: Introduce DW_OP_LLVM_convert.
Feb 22 2019, 5:08 AM · Restricted Project, debug-info
markus updated the diff for D56587: Introduce DW_OP_LLVM_convert.
  • Added test with two CUs.
  • Updated some comments.
  • Removed the -generate-typed-dwarf5-expr option, will only produce DW_OP_convert for Dwarf v5, for all prior versions the mask & shift expression is used. I suggest that we forget about DW_OP_GNU_convert and debugger tunings for this review. If that is really desired it can be added later in a separate patch.
Feb 22 2019, 4:52 AM · Restricted Project, debug-info

Feb 21 2019

markus updated the diff for D56587: Introduce DW_OP_LLVM_convert.
  • updated to top of trunk to have the llvm-dwarfdump updates committed earlier today
  • updated tests and made additional improvements to llvm-dwarfdump
  • fixed segfault bug where we crashed on release builds but not debug builds (the allocation of DIEBaseTypeRef)
Feb 21 2019, 5:50 AM · Restricted Project, debug-info
markus committed rG76dda218a06e: [DebugInfo] Prep llvm-dwarfdump for typed DW5 ops. (authored by markus).
[DebugInfo] Prep llvm-dwarfdump for typed DW5 ops.
Feb 21 2019, 12:21 AM
markus committed rL354552: [DebugInfo] Prep llvm-dwarfdump for typed DW5 ops..
[DebugInfo] Prep llvm-dwarfdump for typed DW5 ops.
Feb 21 2019, 12:20 AM