llvm-project/llvm/test
John Fastabend 13f6c81c5d [BPF] simplify zero extension with MOV_32_64
The current pattern matching for zext results in the following code snippet
being produced,

  w1 = w0
  r1 <<= 32
  r1 >>= 32

Because BPF implementations require zero extension on 32bit loads this
both adds a few extra unneeded instructions but also makes it a bit
harder for the verifier to track the r1 register bounds. For example in
this verifier trace we see at the end of the snippet R2 offset is unknown.
However, if we track this correctly we see w1 should have the same bounds
as r8. R8 smax is less than U32 max value so a zero extend load should keep
the same value. Adding a max value of 800 (R8=inv(id=0,smax_value=800)) to
an off=0, as seen in R7 should create a max offset of 800. However at the
end of the snippet we note the R2 max offset is 0xffffFFFF.

  R0=inv(id=0,smax_value=800)
  R1_w=inv(id=0,umax_value=2147483647,var_off=(0x0; 0x7fffffff))
  R6=ctx(id=0,off=0,imm=0) R7=map_value(id=0,off=0,ks=4,vs=1600,imm=0)
  R8_w=inv(id=0,smax_value=800,umax_value=4294967295,var_off=(0x0; 0xffffffff))
  R9=inv800 R10=fp0 fp-8=mmmm????
 58: (1c) w9 -= w8
 59: (bc) w1 = w8
 60: (67) r1 <<= 32
 61: (77) r1 >>= 32
 62: (bf) r2 = r7
 63: (0f) r2 += r1
 64: (bf) r1 = r6
 65: (bc) w3 = w9
 66: (b7) r4 = 0
 67: (85) call bpf_get_stack#67
  R0=inv(id=0,smax_value=800)
  R1_w=ctx(id=0,off=0,imm=0)
  R2_w=map_value(id=0,off=0,ks=4,vs=1600,umax_value=4294967295,var_off=(0x0; 0xffffffff))
  R3_w=inv(id=0,umax_value=800,var_off=(0x0; 0x3ff))
  R4_w=inv0 R6=ctx(id=0,off=0,imm=0)
  R7=map_value(id=0,off=0,ks=4,vs=1600,imm=0)
  R8_w=inv(id=0,smax_value=800,umax_value=4294967295,var_off=(0x0; 0xffffffff))
  R9_w=inv(id=0,umax_value=800,var_off=(0x0; 0x3ff))
  R10=fp0 fp-8=mmmm????

After this patch R1 bounds are not smashed by the <<=32 >>=32 shift and we
get correct bounds on R2 umax_value=800.

Further it reduces 3 insns to 1.

Signed-off-by: John Fastabend <john.fastabend@gmail.com>

Differential Revision: https://reviews.llvm.org/D73985
2020-05-27 11:26:39 -07:00
..
Analysis [StackSafety] Bailout on some function calls 2020-05-27 02:48:42 -07:00
Assembler AllocaInst should store Align instead of MaybeAlign. 2020-05-16 14:53:16 -07:00
Bindings
Bitcode StoreInst should store Align, not MaybeAlign 2020-05-15 12:26:58 -07:00
BugPoint
CodeGen [BPF] simplify zero extension with MOV_32_64 2020-05-27 11:26:39 -07:00
DebugInfo [debuginfo] Fix broken tests from MachineLICM salvaging fix 2020-05-26 22:46:07 +01:00
Demangle Give microsoftDemangle() an outparam for how many input bytes were consumed. 2020-05-20 16:17:31 -04:00
Examples
ExecutionEngine [FPEnv] Intrinsic llvm.roundeven 2020-05-26 19:24:58 +07:00
Feature StoreInst should store Align, not MaybeAlign 2020-05-15 12:26:58 -07:00
FileCheck [FileCheck] Allow parenthesized expressions 2020-05-27 16:31:39 +01:00
Instrumentation StoreInst should store Align, not MaybeAlign 2020-05-15 12:26:58 -07:00
Integer
JitListener
LTO Infer alignment of unmarked loads in IR/bitcode parsing. 2020-05-14 13:03:50 -07:00
Linker
MC [X86] Assemble movzb 1280(%rbx, %r12), %r12 after D80608 2020-05-27 09:55:55 -07:00
MachineVerifier GlobalISel: Merge G_PTR_MASK with llvm.ptrmask intrinsic 2020-05-26 11:48:13 -04:00
Object [yaml2obj] - Stop using square brackets for unique suffixes. 2020-05-19 12:59:13 +03:00
ObjectYAML
Other [Pass Manager] remove EarlyCSE as clean-up for VectorCombine 2020-05-24 12:36:21 -04:00
Reduce
SafepointIRVerifier
Support On Windows, handle interrupt signals without crash message 2020-05-21 13:27:10 +01:00
SymbolRewriter
TableGen [TableGen] Fix register class handling in TableGen's DAG ISel Matcher Generator 2020-05-13 10:17:03 +01:00
ThinLTO/X86 [LTO] Suppress emission of empty combined module by default 2020-05-04 18:31:09 -07:00
Transforms [UnJ] Update LI for inner nested loops 2020-05-27 14:36:38 +01:00
Unit
Verifier Modify verifier checks to support musttail + preallocated 2020-05-26 15:20:20 -07:00
YAMLParser
tools [llvm-readobj] - Do not crash when an invalid .eh_frame_hdr is dumped using --unwind. 2020-05-27 16:41:09 +03:00
.clang-format
CMakeLists.txt [examples] Skip building the Bye pass plugin on windows 2020-05-13 13:40:56 +03:00
TestRunner.sh
lit.cfg.py
lit.site.cfg.py.in Revert "Temporarily revert "build: use `find_package(Python3)` if available"" 2020-04-29 01:38:08 +00:00