150
|
1 IRgen optimization opportunities.
|
|
2
|
|
3 //===---------------------------------------------------------------------===//
|
|
4
|
|
5 The common pattern of
|
|
6 --
|
|
7 short x; // or char, etc
|
|
8 (x == 10)
|
|
9 --
|
|
10 generates an zext/sext of x which can easily be avoided.
|
|
11
|
|
12 //===---------------------------------------------------------------------===//
|
|
13
|
|
14 Bitfields accesses can be shifted to simplify masking and sign
|
|
15 extension. For example, if the bitfield width is 8 and it is
|
|
16 appropriately aligned then is is a lot shorter to just load the char
|
|
17 directly.
|
|
18
|
|
19 //===---------------------------------------------------------------------===//
|
|
20
|
|
21 It may be worth avoiding creation of alloca's for formal arguments
|
|
22 for the common situation where the argument is never written to or has
|
|
23 its address taken. The idea would be to begin generating code by using
|
|
24 the argument directly and if its address is taken or it is stored to
|
|
25 then generate the alloca and patch up the existing code.
|
|
26
|
|
27 In theory, the same optimization could be a win for block local
|
|
28 variables as long as the declaration dominates all statements in the
|
|
29 block.
|
|
30
|
|
31 NOTE: The main case we care about this for is for -O0 -g compile time
|
|
32 performance, and in that scenario we will need to emit the alloca
|
|
33 anyway currently to emit proper debug info. So this is blocked by
|
|
34 being able to emit debug information which refers to an LLVM
|
|
35 temporary, not an alloca.
|
|
36
|
|
37 //===---------------------------------------------------------------------===//
|
|
38
|
|
39 We should try and avoid generating basic blocks which only contain
|
|
40 jumps. At -O0, this penalizes us all the way from IRgen (malloc &
|
|
41 instruction overhead), all the way down through code generation and
|
|
42 assembly time.
|
|
43
|
|
44 On 176.gcc:expr.ll, it looks like over 12% of basic blocks are just
|
|
45 direct branches!
|
|
46
|
|
47 //===---------------------------------------------------------------------===//
|