@@ -75,6 +75,138 @@ TEST_F(AArch64GISelMITest, TestCSE) {
75
75
auto MIBUnmerge2 = CSEB.buildUnmerge ({s32, s32}, Copies[0 ]);
76
76
EXPECT_TRUE (&*MIBUnmerge == &*MIBUnmerge2);
77
77
78
+ // Check G_FADD
79
+ {
80
+ auto MIBFAdd = CSEB.buildFAdd (s32, Copies[0 ], Copies[1 ]);
81
+ auto MIBFAdd2 = CSEB.buildFAdd (s32, Copies[0 ], Copies[1 ]);
82
+ EXPECT_TRUE (&*MIBFAdd == &*MIBFAdd2);
83
+
84
+ auto MIBFAdd3 =
85
+ CSEB.buildFAdd (s32, Copies[0 ], Copies[1 ], MachineInstr::FmNsz);
86
+ EXPECT_FALSE (&*MIBFAdd == &*MIBFAdd3);
87
+
88
+ MIBFAdd2->setFlag (MachineInstr::FmNsz);
89
+ MIBFAdd2->clearFlag (MachineInstr::FmNsz);
90
+ EXPECT_TRUE (&*MIBFAdd == &*MIBFAdd2);
91
+ }
92
+
93
+ // Check G_FSUB
94
+ {
95
+ auto MIBFSub = CSEB.buildFSub (s32, Copies[0 ], Copies[1 ]);
96
+ auto MIBFSub2 = CSEB.buildFSub (s32, Copies[0 ], Copies[1 ]);
97
+ EXPECT_TRUE (&*MIBFSub == &*MIBFSub2);
98
+
99
+ auto MIBFSub3 =
100
+ CSEB.buildFSub (s32, Copies[0 ], Copies[1 ], MachineInstr::FmNoNans);
101
+ EXPECT_FALSE (&*MIBFSub == &*MIBFSub3);
102
+
103
+ MIBFSub2->setFlag (MachineInstr::FmNoNans);
104
+ MIBFSub2->clearFlag (MachineInstr::FmNoNans);
105
+ EXPECT_TRUE (&*MIBFSub == &*MIBFSub2);
106
+ }
107
+
108
+ // Check G_FMUL
109
+ {
110
+ auto MIBFMul = CSEB.buildFMul (s32, Copies[0 ], Copies[1 ]);
111
+ auto MIBFMul2 = CSEB.buildFMul (s32, Copies[0 ], Copies[1 ]);
112
+ EXPECT_TRUE (&*MIBFMul == &*MIBFMul2);
113
+
114
+ auto MIBFMul3 =
115
+ CSEB.buildFMul (s32, Copies[0 ], Copies[1 ], MachineInstr::FmNoNans);
116
+ EXPECT_FALSE (&*MIBFMul == &*MIBFMul3);
117
+
118
+ MIBFMul2->setFlag (MachineInstr::FmNoNans);
119
+ MIBFMul2->clearFlag (MachineInstr::FmNoNans);
120
+ EXPECT_TRUE (&*MIBFMul == &*MIBFMul2);
121
+ }
122
+
123
+ // Check G_FDIV
124
+ {
125
+ auto MIBFDiv = CSEB.buildFDiv (s32, Copies[0 ], Copies[1 ]);
126
+ auto MIBFDiv2 = CSEB.buildFDiv (s32, Copies[0 ], Copies[1 ]);
127
+ EXPECT_TRUE (&*MIBFDiv == &*MIBFDiv2);
128
+
129
+ auto MIBFDiv3 =
130
+ CSEB.buildFDiv (s32, Copies[0 ], Copies[1 ], MachineInstr::FmNoNans);
131
+ EXPECT_FALSE (&*MIBFDiv == &*MIBFDiv3);
132
+
133
+ MIBFDiv2->setFlag (MachineInstr::FmNoNans);
134
+ MIBFDiv2->clearFlag (MachineInstr::FmNoNans);
135
+ EXPECT_TRUE (&*MIBFDiv == &*MIBFDiv2);
136
+ }
137
+
138
+ // Check G_FABS
139
+ {
140
+ auto MIBFAbs = CSEB.buildFAbs (s32, Copies[0 ]);
141
+ auto MIBFAbs2 = CSEB.buildFAbs (s32, Copies[0 ]);
142
+ EXPECT_TRUE (&*MIBFAbs == &*MIBFAbs2);
143
+
144
+ auto MIBFAbs3 = CSEB.buildFAbs (s32, Copies[0 ], MachineInstr::FmNsz);
145
+ EXPECT_FALSE (&*MIBFAbs == &*MIBFAbs3);
146
+
147
+ MIBFAbs2->setFlag (MachineInstr::FmNsz);
148
+ MIBFAbs2->clearFlag (MachineInstr::FmNsz);
149
+ EXPECT_TRUE (&*MIBFAbs == &*MIBFAbs2);
150
+ }
151
+
152
+ // Check G_FMINNUM/F_MAXNUM:
153
+ {
154
+ auto MIBFMinNum = CSEB.buildFMinNum (s32, Copies[0 ], Copies[1 ]);
155
+ auto MIBFMinNum2 = CSEB.buildFMinNum (s32, Copies[0 ], Copies[1 ]);
156
+ EXPECT_TRUE (&*MIBFMinNum == &*MIBFMinNum2);
157
+
158
+ auto MIBFMinNum3 =
159
+ CSEB.buildFMinNum (s32, Copies[0 ], Copies[1 ], MachineInstr::FmNsz);
160
+ EXPECT_FALSE (&*MIBFMinNum == &*MIBFMinNum3);
161
+
162
+ MIBFMinNum2->setFlag (MachineInstr::FmNsz);
163
+ MIBFMinNum2->clearFlag (MachineInstr::FmNsz);
164
+ EXPECT_TRUE (&*MIBFMinNum == &*MIBFMinNum2);
165
+ }
166
+
167
+ {
168
+ auto MIBFMaxNum = CSEB.buildFMaxNum (s32, Copies[0 ], Copies[1 ]);
169
+ auto MIBFMaxNum2 = CSEB.buildFMaxNum (s32, Copies[0 ], Copies[1 ]);
170
+ EXPECT_TRUE (&*MIBFMaxNum == &*MIBFMaxNum2);
171
+
172
+ auto MIBFMaxNum3 =
173
+ CSEB.buildFMaxNum (s32, Copies[0 ], Copies[1 ], MachineInstr::FmNsz);
174
+ EXPECT_FALSE (&*MIBFMaxNum == &*MIBFMaxNum3);
175
+
176
+ MIBFMaxNum2->setFlag (MachineInstr::FmNsz);
177
+ MIBFMaxNum2->clearFlag (MachineInstr::FmNsz);
178
+ EXPECT_TRUE (&*MIBFMaxNum == &*MIBFMaxNum2);
179
+ }
180
+
181
+ // Check G_FMINNUM_IEEE/F_MAXNUM_IEEE:
182
+ {
183
+ auto MIBFMinNumIEEE = CSEB.buildFMinNumIEEE (s32, Copies[0 ], Copies[1 ]);
184
+ auto MIBFMinNumIEEE2 = CSEB.buildFMinNumIEEE (s32, Copies[0 ], Copies[1 ]);
185
+ EXPECT_TRUE (&*MIBFMinNumIEEE == &*MIBFMinNumIEEE2);
186
+
187
+ auto MIBFMinNumIEEE3 =
188
+ CSEB.buildFMinNumIEEE (s32, Copies[0 ], Copies[1 ], MachineInstr::FmNsz);
189
+ EXPECT_FALSE (&*MIBFMinNumIEEE == &*MIBFMinNumIEEE3);
190
+
191
+ MIBFMinNumIEEE2->setFlag (MachineInstr::FmNsz);
192
+ MIBFMinNumIEEE2->clearFlag (MachineInstr::FmNsz);
193
+ EXPECT_TRUE (&*MIBFMinNumIEEE == &*MIBFMinNumIEEE2);
194
+ }
195
+
196
+ {
197
+ auto MIBFMaxNumIEEE = CSEB.buildFMaxNumIEEE (s32, Copies[0 ], Copies[1 ]);
198
+ auto MIBFMaxNumIEEE2 = CSEB.buildFMaxNumIEEE (s32, Copies[0 ], Copies[1 ]);
199
+ EXPECT_TRUE (&*MIBFMaxNumIEEE == &*MIBFMaxNumIEEE2);
200
+
201
+ auto MIBFMaxNumIEEE3 =
202
+ CSEB.buildFMaxNumIEEE (s32, Copies[0 ], Copies[1 ], MachineInstr::FmNsz);
203
+ EXPECT_FALSE (&*MIBFMaxNumIEEE == &*MIBFMaxNumIEEE3);
204
+
205
+ MIBFMaxNumIEEE2->setFlag (MachineInstr::FmNsz);
206
+ MIBFMaxNumIEEE2->clearFlag (MachineInstr::FmNsz);
207
+ EXPECT_TRUE (&*MIBFMaxNumIEEE == &*MIBFMaxNumIEEE2);
208
+ }
209
+
78
210
// Check G_BUILD_VECTOR
79
211
Register Reg1 = MRI->createGenericVirtualRegister (s32);
80
212
Register Reg2 = MRI->createGenericVirtualRegister (s32);
0 commit comments