blob: 596f33629868c17dae6569923e3d393cfa467f1e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
2018-10-30 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/predicates.md (easy_fp_direct_move_constant):
Allow SFmode constants once again.
* config/rs6000/rs6000.md (movsf_const_direct_move): Allow SFmode
constants, but only allow targetting a VSX register.
(movsf_const_mem): Add combiner pattern to store constants in
memory.
(movsf_const_mem2): Likewise.
2018-10-30 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/predicates.md (easy_fp_direct_move_constant):
Disable SFmode constants.
* config/rs6000/rs6000.md (movsf_const_direct_move): Likewise.
2018-10-30 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/rs6000.md (UNSPEC_SF_CONST_MEM): New unspecs.
(UNSPEC_SF_CONST_GPR): Likewise.
(movsf_const_direct_move): Rework yet again, don't alais results,
use helper functions instead.
(movsf_const_mem): Likewise.
(movsf_const_gpr): Likewise.
2018-10-28 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/rs6000.c (rs6000_emit_move): Don't bother testing
if the destination of moving a SFmode constant is not a GPR.
* config/rs6000/rs6000.md (movsf_const_direct_move): Churn, churn,
churn. Combine vsx, gpr, memory cases.
2018-10-28 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/predicates.md (easy_fp_direct_move_constant): Use
TARGET_DIRECT_MOVE_FP_CONSTANT.
* config/rs6000/rs6000.h (TARGET_DIRECT_MOVE_FP_CONSTANT): New
macro to say whether we should optimize loading up floating point
constants by loading them in the GPRs and using direct move to
transfer them over.
* config/rs6000/rs6000.md (UNSPEC_SF_CONSTANT_VSX): Delete.
(movsf_const_direct_move): Use TARGET_DIRECT_MOVE_FP_CONSTANT.
Use p8_mtvsrd_sf to do the direct move.
(movsf_const_internal): Delete, no longer used.
2018-10-28 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/rs6000.md (UNSPEC_SF_CONSTANT_MEM): Delete.
(movsf_const_direct_move): Rework again, and move before movsf.
(movsf_const_internal): Likewise.
2018-10-28 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/rs6000.md (UNSPEC_SF_CONSTANT): Split into 2
separate unspecs.
(UNSPEC_SF_CONSTANT_VSX): Likewise.
(UNSPEC_SF_CONSTANT_MEM): Likewise.
(movsf_const_direct_move): Go back to just handling VSX
registers. Change UNSPEC.
(movsf_const_internal1): Likewise.
(movsf_const_memory): Rework optimizing storing constant to
memory.
(movsf_const_internal2): Likewise.
2018-10-28 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/rs6000.md (movsf_const_direct_move): Rework move
to GPR and memory.
(movsf_const_internal1): Likewise.
(movsf_const_internal2): Likewise.
2018-10-28 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/rs6000.md (movsf_const_direct_move): Re-add
support for loading up GPRs. Add support for storing constants to
memory.
(movsf_const_direct_move_internal): Likewise.
(movsf_const_store): Delete, folded into the above functions.
2018-10-27 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/rs6000.md (movsf_const_direct_move): Delete
loading up GPRs.
2018-10-27 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/rs6000.md (UNSPEC_SF_CONSTANT): New unspec for
moving SFmode constants from GPRs to VSX registers.
(movsf constant splitter): Use int_reg_operand.
(movsf_hardfloat): Don't allow moving SFmode constants that are
generated in the GPR registers to be used in the general move.
(movsf_const_direct_move): Rework.
(movsf_const_direct_move_internal): New insn to move SFmode
constants from GPRs to VSX registers after splitting.
(movsf_const_store): Optimize creating a SFmode constant and
storing it not to move the constant to the VSX registers.
2018-10-26 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/rs6000.md (movsf_const_direct_move): Always
allocate a scratch register due to loop unrolling where things
might move between the GPR registers and VSX registers in the
later stages.
2018-10-26 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/predicates.md (easy_fp_direct_move_constant): Add
support for SFmode.
* config/rs6000/rs6000.c (rs6000_emit_move): Add support to load
up SFmode values into a GPR and moving them to a either a VSX
register using the double format or a GPR register using the
single format.
* config/rs6000/rs6000.md (movsf_const_direct_move): Likewise.
2018-10-26 Michael Meissner <meissner@linux.ibm.com>
* config/rs6000/constraints.md (wG constraint): New constraint for
floating point constants that can be loaded quickly in a GPR and
transfered over to a vector register quickly.
* config/rs6000/predicates.md (easy_fp_direct_move_constant): New
predicate to determine which constants can be loaded without
loading them from memory.
(easy_fp_constant): If easy_fp_mtvsrd_constant is true, the
constant is easy.
* config/rs6000/rs6000.md (movdf constant splitter): Use
int_reg_operand instead of extra code to make sure we are
splitting loading up constants to GPRs.
(mov<mode>_hardfloat64): Add support for loading FP constants into
GPRs and using direct move to move them over.
* doc/md.texi (PowerPC constraints): Document wG constraint.
2018-10-26 Michael Meissner <meissner@linux.ibm.com>
Clone branch subversion id 265537
|