llvm/test/CodeGen/ARM
Evan Cheng 358dec5180 Part 1.
- Change register allocation hint to a pair of unsigned integers. The hint type is zero (which means prefer the register specified as second part of the pair) or entirely target dependent.
- Allow targets to specify alternative register allocation orders based on allocation hint.

Part 2.
- Use the register allocation hint system to implement more aggressive load / store multiple formation.
- Aggressively form LDRD / STRD. These are formed *before* register allocation. It has to be done this way to shorten live interval of base and offset registers. e.g.
v1025 = LDR v1024, 0
v1026 = LDR v1024, 0
=>
v1025,v1026 = LDRD v1024, 0

If this transformation isn't done before allocation, v1024 will overlap v1025 which means it more difficult to allocate a register pair.

- Even with the register allocation hint, it may not be possible to get the desired allocation. In that case, the post-allocation load / store multiple pass must fix the ldrd / strd instructions. They can either become ldm / stm instructions or back to a pair of ldr / str instructions.

This is work in progress, not yet enabled.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73381 91177308-0d34-0410-b5e6-96231b3b80d8
2009-06-15 08:28:29 +00:00
..
2006-11-10-CycleInDAG.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
2007-01-19-InfiniteLoop.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
2007-01-31-RegInfoAssert.ll -march=arm -enable-thumb => -march=thumb 2007-02-23 03:15:39 +00:00
2007-02-02-JoinIntervalsCrash.ll -march=arm -enable-thumb => -march=thumb 2007-02-23 03:15:39 +00:00
2007-03-06-AddR7.ll For PR1553: 2007-07-19 23:13:04 +00:00
2007-03-07-CombinerCrash.ll For PR1258: 2007-03-19 18:27:35 +00:00
2007-03-13-InstrSched.ll Expand GEPs in ScalarEvolution expressions. SCEV expressions can now 2009-04-16 03:18:22 +00:00
2007-03-21-JoinIntervalsCrash.ll Remove use of implementation keyword. 2007-03-28 02:38:26 +00:00
2007-03-26-RegScavengerAssert.ll For PR1553: 2007-07-19 23:13:04 +00:00
2007-03-27-RegScavengerAssert.ll Remove use of implementation keyword. 2007-03-28 02:38:26 +00:00
2007-03-30-RegScavengerAssert.ll Test case for PR1279 (part 2). 2007-03-30 20:15:22 +00:00
2007-04-02-RegScavengerAssert.ll New test case. 2007-04-02 18:47:13 +00:00
2007-04-03-PEIBug.ll For PR1319: 2007-04-16 17:36:08 +00:00
2007-04-03-UndefinedSymbol.ll For PR1319: 2007-04-16 17:36:08 +00:00
2007-04-30-CombinerCrash.ll Test a dag combiner crasher. 2007-05-01 00:40:38 +00:00
2007-05-03-BadPostIndexedLd.ll For PR1553: 2007-07-19 23:13:04 +00:00
2007-05-05-InvalidPushPop.ll Fix PR1390. 2007-05-05 23:44:41 +00:00
2007-05-07-jumptoentry.ll testcase for CodeGenPrepare bug fixed yesterday 2007-05-08 17:44:36 +00:00
2007-05-07-tailmerge-1.ll Testcases for PR1628. 2007-09-05 11:53:04 +00:00
2007-05-09-tailmerge-2.ll Testcases for PR1628. 2007-09-05 11:53:04 +00:00
2007-05-14-InlineAsmCstCrash.ll testcase that crashes llc 2007-05-15 01:13:42 +00:00
2007-05-14-RegScavengerAssert.ll Test for PR1406. 2007-05-14 21:12:43 +00:00
2007-05-22-tailmerge-3.ll Testcases for PR1628. 2007-09-05 11:53:04 +00:00
2007-05-23-BadPreIndexedStore.ll Add a new test case. 2007-05-24 02:31:15 +00:00
2007-05-31-RegScavengerInfiniteLoop.ll Add a test for PR1424. 2007-05-31 18:36:07 +00:00
2007-08-15-ReuseBug.ll This check is unnecessary, and getting rid of it removes a use of -disable-correct-folding. 2008-08-05 17:52:54 +00:00
2008-02-04-LocalRegAllocBug.ll It's PR1925, not PR1609. 2008-02-06 22:07:17 +00:00
2008-02-29-RegAllocLocal.ll DCE'ed this testcase. 2008-02-29 19:28:11 +00:00
2008-03-05-SxtInRegBug.ll Constant fold SIGN_EXTEND_INREG with ashr not lshr. 2008-03-06 08:20:51 +00:00
2008-03-07-RegScavengerAssert.ll Fixed a register scavenger bug. If a def is re-defining part of a super register, there must be an implicit def of the super-register on the MI. 2008-03-07 20:12:54 +00:00
2008-04-04-ScavengerAssert.ll New test. 2008-04-10 23:49:09 +00:00
2008-04-10-ScavengerAssert.ll New test. 2008-04-10 23:49:09 +00:00
2008-04-11-PHIofImpDef.ll If a PHI node has a single implicit_def source, replace it with an implicit_def instead of a copy. 2008-04-11 17:54:45 +00:00
2008-05-19-LiveIntervalsBug.ll Don't spill dead def. 2008-05-20 08:10:37 +00:00
2008-05-19-ScavengerAssert.ll More local spiller complexity! 2008-05-20 08:13:21 +00:00
2008-07-17-Fdiv.ll Softfloat support for FDIV. Patch by 2008-07-18 21:18:48 +00:00
2008-07-24-CodeGenPrepCrash.ll Teach ARM isLegalAddressingMode to handle unknown type without crashing. This fixes pr2589. 2008-07-25 00:55:17 +00:00
2008-08-07-AsmPrintBug.ll Clean up some ARM GV asm printing out; minor fixes to match what gcc does. 2008-12-06 02:00:55 +00:00
2008-09-14-CoaleserBug.ll Correctly update kill infos after extending a live range and merge 2 val#'s; fix 56165 - do not mark val# copy field if the copy does not define the val#. 2008-09-15 06:28:41 +00:00
2008-09-17-CoalescerBug.ll Unallocatable registers do not have live intervals. 2008-09-17 18:36:25 +00:00
2008-11-18-ScavengerAssert.ll Register scavenger should process early clobber defs first. A dead early clobber def should not interfere with a normal def which happens one slot later. 2008-11-18 22:28:38 +00:00
2008-11-19-ScavengerAssert.ll Changing allocation ordering from r3 ... r0 back to r0 ... r3. The order change no longer make sense after the coalescing changes we have made since then. 2009-06-05 19:08:58 +00:00
2009-02-16-SpillerBug.ll A couple of places where reused use operands should be marked kill. This is exposed by recent availability fallthrough changes. 2009-02-17 06:41:03 +00:00
2009-02-22-SoftenFloatVaArg.ll move a target-specific test into its directory so it isn't run if you 2009-04-10 23:58:38 +00:00
2009-02-27-SpillerBug.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
2009-03-07-SpillerBug.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
2009-03-09-AddrModeBug.ll ARM isLegalAddressImmediate should check if type is a simple type now that optimizer can create values of funky scalar types. 2009-03-09 19:15:00 +00:00
2009-04-06-AsmModifier.ll Use the output of the asm so the optimizer won't 2009-04-14 01:51:40 +00:00
2009-04-08-AggregateAddr.ll Add testcase for PR3795. 2009-04-08 18:00:55 +00:00
2009-04-08-FloatUndef.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
2009-04-08-FREM.ll Soft float support for FREM. 2009-04-08 16:20:57 +00:00
2009-04-09-RegScavengerAsm.ll Fix pr3954. The register scavenger asserts for inline assembly with 2009-04-09 17:16:43 +00:00
2009-05-05-DAGCombineBug.ll Do not use register as base ptr of pre- and post- inc/dec load / store nodes. 2009-05-06 18:25:01 +00:00
2009-05-07-RegAllocLocal.ll Fix pr4100. Do not remove no-op copies when they are dead. The register 2009-05-07 23:47:03 +00:00
2009-05-11-CodePlacementCrash.ll Fix pr4195: When iterating through predecessor blocks, break out of the loop 2009-05-12 03:48:10 +00:00
2009-05-18-InlineAsmMem.ll Fix pr4091: Add support for "m" constraint in ARM inline assembly. 2009-05-19 05:53:42 +00:00
2009-06-04-MissingLiveIn.ll A value defined by an implicit_def can be liven to a use BB. This is unfortunate. But register allocator still has to add it to the live-in set of the use BB. 2009-06-04 20:25:48 +00:00
2009-06-12-RegScavengerAssert.ll If killed register is defined by implicit_def, do not clear it since it's live range may overlap another def of same register. 2009-06-12 21:34:26 +00:00
addrmode.ll For PR1319: 2007-04-16 15:15:52 +00:00
aliases.ll Convert tests using "grep -c ... | grep ..." to use the count script. 2007-08-15 13:49:33 +00:00
align.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
alloca.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
argaddr.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
arguments2.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
arguments3.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
arguments4.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
arguments5.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
arguments6.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
arguments7.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
arguments8.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
arguments_f64_backfill.ll Add testcase for register scanveger assertion fix in r72755 2009-06-08 22:54:15 +00:00
arguments-nosplit-double.ll Fix pr4058 and pr4059. Do not split i64 or double arguments between r3 and 2009-05-19 10:02:36 +00:00
arguments-nosplit-i64.ll Fix pr4058 and pr4059. Do not split i64 or double arguments between r3 and 2009-05-19 10:02:36 +00:00
arguments.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
arm-asm.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
arm-negative-stride.ll Add nounwind to a few tests. 2009-05-18 15:16:49 +00:00
bits.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
branch.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
bx_fold.ll Fix test case. 2007-03-08 19:27:32 +00:00
call_nolink.ll For PR1319: 2007-04-16 17:36:08 +00:00
call.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
clz.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
compare-call.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
constants.ll Do not emit comments unless -asm-verbose. 2009-03-24 00:17:40 +00:00
cse-libcalls.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
ctors_dtors.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
dg.exp sabre brings to my attention that the 'tr' suffix is also obsolete 2008-05-20 21:00:03 +00:00
div.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
dyn-stackalloc.ll For PR1319: 2007-04-16 17:36:08 +00:00
extloadi1.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
fcopysign.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
fixunsdfdi.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
fmdrr-fmrrd.ll commit testcase I forgot to svn add. 2007-11-27 22:43:37 +00:00
fnmul.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
formal.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
fp.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
fparith.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
fpcmp_ueq.ll For PR1319: 2007-04-16 17:36:08 +00:00
fpcmp.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
fpconv.ll More soft fp fixes. 2008-04-01 02:18:22 +00:00
fpmem.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
fpow.ll Implement function notes as function attributes. 2008-09-26 23:51:19 +00:00
fpowi.ll Implement FPOWI ExpandOp. 2007-08-15 22:13:27 +00:00
fptoint.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
frame_thumb.ll In Thumb mode, the frame register must be R7. 2007-04-27 17:58:03 +00:00
hello.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
hidden-vis-2.ll Clean up some ARM GV asm printing out; minor fixes to match what gcc does. 2008-12-06 02:00:55 +00:00
hidden-vis-3.ll Clean up some ARM GV asm printing out; minor fixes to match what gcc does. 2008-12-06 02:00:55 +00:00
hidden-vis.ll Clean up some ARM GV asm printing out; minor fixes to match what gcc does. 2008-12-06 02:00:55 +00:00
iabs.ll For PR1319: 2007-04-16 15:15:52 +00:00
ifcvt1.ll -enable-arm-if-conversion is gone. 2007-09-20 18:03:23 +00:00
ifcvt2.ll -enable-arm-if-conversion is gone. 2007-09-20 18:03:23 +00:00
ifcvt3.ll -enable-arm-if-conversion is gone. 2007-09-20 18:03:23 +00:00
ifcvt4.ll -enable-arm-if-conversion is gone. 2007-09-20 18:03:23 +00:00
ifcvt5.ll -enable-arm-if-conversion is gone. 2007-09-20 18:03:23 +00:00
ifcvt6.ll -enable-arm-if-conversion is gone. 2007-09-20 18:03:23 +00:00
ifcvt7.ll -enable-arm-if-conversion is gone. 2007-09-20 18:03:23 +00:00
ifcvt8.ll -enable-arm-if-conversion is gone. 2007-09-20 18:03:23 +00:00
illegal-vector-bitcast.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
imm.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
inlineasm2.ll New asm test case. 2007-04-04 00:15:17 +00:00
inlineasm-imm-arm.ll Fix PR3862: Recognize some ARM-specific constraints for immediates in inline 2009-04-01 17:58:54 +00:00
inlineasm-imm-thumb.ll Fix PR3862: Recognize some ARM-specific constraints for immediates in inline 2009-04-01 17:58:54 +00:00
inlineasm.ll update syntax 2007-04-28 06:03:12 +00:00
insn-sched1.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
ispositive.ll For PR1370: 2007-04-30 05:11:58 +00:00
large-stack.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
ldm.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
ldr_ext.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
ldr_frame.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
ldr_post.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
ldr_pre.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
ldr.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
ldrd.ll Part 1. 2009-06-15 08:28:29 +00:00
load-global.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
load.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
long_shift.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
long-setcc.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
long.ll Do not emit comments unless -asm-verbose. 2009-03-24 00:17:40 +00:00
lsr-code-insertion.ll Mark some pattern-less instructions as neverHasSideEffects. 2009-06-12 20:46:18 +00:00
lsr-scale-addr-mode.ll Changing allocation ordering from r3 ... r0 back to r0 ... r3. The order change no longer make sense after the coalescing changes we have made since then. 2009-06-05 19:08:58 +00:00
mem.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
memcpy-inline.ll Changing allocation ordering from r3 ... r0 back to r0 ... r3. The order change no longer make sense after the coalescing changes we have made since then. 2009-06-05 19:08:58 +00:00
memfunc.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
mul.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
mulhi.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
mvn.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
pack.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
pr3502.ll If a use operand is marked isKill, don't forget to add kill to its live interval as well. 2009-02-22 08:35:56 +00:00
private.ll Add the private linkage. 2009-01-15 20:18:42 +00:00
remat.ll Turn on machine LICM in non-fast mode. 2009-02-05 08:46:33 +00:00
ret0.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
ret_arg1.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
ret_arg2.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
ret_arg3.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
ret_arg4.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
ret_arg5.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
ret_f32_arg2.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_f32_arg5.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_f64_arg2.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_f64_arg_reg_split.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_f64_arg_split.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_f64_arg_stack.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_i64_arg2.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_i64_arg3.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_i64_arg_split.ll Use CallConvLower.h and TableGen descriptions of the calling conventions 2009-04-17 19:07:39 +00:00
ret_i128_arg2.ll Rename file to have the correct suffix. 2009-04-17 20:40:20 +00:00
ret_void.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
rev.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
section.ll Print section flags ok on platforms, which use '@' as comment string. Fix test. 2008-08-07 09:55:06 +00:00
select_xform.ll add no-unwind, remove duplicate run line. 2009-03-12 05:56:37 +00:00
select.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
shifter_operand.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
smul.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
stack-frame.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
stm.ll Add a ARM specific pre-allocation pass that re-schedule loads / stores from 2009-06-13 09:12:55 +00:00
str_post.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
str_pre-2.ll Re-apply 72756 with fixes. One of those was introduced by we changed MachineInstrBuilder::addReg() interface. 2009-06-04 01:15:28 +00:00
str_pre.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
str_trunc.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
sxt_rot.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
thread_pointer.ll [ARM] Implement __builtin_thread_pointer. 2007-11-08 17:20:05 +00:00
thumb-imm.ll For PR1319: Upgrade to use new test harness 2007-04-15 19:11:47 +00:00
tls1.ll fix the test tls1. 2007-04-27 21:23:17 +00:00
tls2.ll add TLS tests. 2007-04-27 21:08:48 +00:00
tls3.ll [ARM] Fix code generation for: 2007-11-05 18:33:37 +00:00
trunc_ldr.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
truncstore-dag-combine.ll new testcase 2007-10-13 06:56:18 +00:00
tst_teq.ll For PR1319: Upgrade to use new test harness 2007-04-15 19:11:47 +00:00
uint64tof64.ll Actually ARM / Mac OS X does have UINTTOFP_I64_F{64|32} libcalls. 2008-11-04 22:19:55 +00:00
unaligned_load_store.ll Convert tests using "grep -c ... | grep ..." to use the count script. 2007-08-15 13:49:33 +00:00
unord.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
uxt_rot.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
uxtb.ll Recognize triplets starting with armv5-, armv6- etc. And set the ARM arch version accordingly. 2009-03-08 04:02:49 +00:00
vargs2.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
vargs_align.ll Convert tests using "| wc -l | grep ..." to use the count script. 2007-08-15 13:36:28 +00:00
vargs.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00
vfp.ll Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
weak2.ll remember to emit weak reference in one more case. 2007-04-25 14:50:40 +00:00
weak.ll Remove llvm-upgrade. 2008-02-17 20:02:20 +00:00