[loongarch][DAG][FREEZE] Fix crash when FREEZE a half(f16) type on lo… · llvm/llvm-project@13280d9 (original) (raw)

`@@ -126,42 +126,40 @@ define void @test_fptrunc_double(double %d, ptr %p) nounwind {

`

126

126

`define half @test_fadd_reg(half %a, half %b) nounwind {

`

127

127

`; LA32-LABEL: test_fadd_reg:

`

128

128

`; LA32: # %bb.0:

`

129

``

`-

; LA32-NEXT: addi.w sp,sp, sp,sp, -32

`

130

``

`-

; LA32-NEXT: st.w ra,ra, ra,sp, 28 # 4-byte Folded Spill

`

131

``

`-

; LA32-NEXT: fst.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Spill

`

132

``

`-

; LA32-NEXT: fst.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Spill

`

``

129

`+

; LA32-NEXT: addi.w sp,sp, sp,sp, -16

`

``

130

`+

; LA32-NEXT: st.w ra,ra, ra,sp, 12 # 4-byte Folded Spill

`

``

131

`+

; LA32-NEXT: st.w fp,fp, fp,sp, 8 # 4-byte Folded Spill

`

``

132

`+

; LA32-NEXT: fst.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Spill

`

``

133

`+

; LA32-NEXT: move fp,fp, fp,a0

`

``

134

`+

; LA32-NEXT: move a0,a0, a0,a1

`

``

135

`+

; LA32-NEXT: bl %plt(__gnu_h2f_ieee)

`

133

136

`; LA32-NEXT: fmov.s fs0,fs0, fs0,fa0

`

134

``

`-

; LA32-NEXT: fmov.s fa0,fa0, fa0,fa1

`

135

``

`-

; LA32-NEXT: bl %plt(__gnu_f2h_ieee)

`

``

137

`+

; LA32-NEXT: move a0,a0, a0,fp

`

136

138

`; LA32-NEXT: bl %plt(__gnu_h2f_ieee)

`

137

``

`-

; LA32-NEXT: fmov.s fs1,fs1, fs1,fa0

`

138

``

`-

; LA32-NEXT: fmov.s fa0,fa0, fa0,fs0

`

``

139

`+

; LA32-NEXT: fadd.s fa0,fa0, fa0,fa0, $fs0

`

139

140

`; LA32-NEXT: bl %plt(__gnu_f2h_ieee)

`

140

``

`-

; LA32-NEXT: bl %plt(__gnu_h2f_ieee)

`

141

``

`-

; LA32-NEXT: fadd.s fa0,fa0, fa0,fa0, $fs1

`

142

``

`-

; LA32-NEXT: fld.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Reload

`

143

``

`-

; LA32-NEXT: fld.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Reload

`

144

``

`-

; LA32-NEXT: ld.w ra,ra, ra,sp, 28 # 4-byte Folded Reload

`

145

``

`-

; LA32-NEXT: addi.w sp,sp, sp,sp, 32

`

``

141

`+

; LA32-NEXT: fld.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Reload

`

``

142

`+

; LA32-NEXT: ld.w fp,fp, fp,sp, 8 # 4-byte Folded Reload

`

``

143

`+

; LA32-NEXT: ld.w ra,ra, ra,sp, 12 # 4-byte Folded Reload

`

``

144

`+

; LA32-NEXT: addi.w sp,sp, sp,sp, 16

`

146

145

`; LA32-NEXT: ret

`

147

146

`;

`

148

147

`; LA64-LABEL: test_fadd_reg:

`

149

148

`; LA64: # %bb.0:

`

150

149

`; LA64-NEXT: addi.d sp,sp, sp,sp, -32

`

151

150

`; LA64-NEXT: st.d ra,ra, ra,sp, 24 # 8-byte Folded Spill

`

152

``

`-

; LA64-NEXT: fst.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Spill

`

153

``

`-

; LA64-NEXT: fst.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Spill

`

``

151

`+

; LA64-NEXT: st.d fp,fp, fp,sp, 16 # 8-byte Folded Spill

`

``

152

`+

; LA64-NEXT: fst.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Spill

`

``

153

`+

; LA64-NEXT: move fp,fp, fp,a0

`

``

154

`+

; LA64-NEXT: move a0,a0, a0,a1

`

``

155

`+

; LA64-NEXT: bl %plt(__gnu_h2f_ieee)

`

154

156

`; LA64-NEXT: fmov.s fs0,fs0, fs0,fa0

`

155

``

`-

; LA64-NEXT: fmov.s fa0,fa0, fa0,fa1

`

156

``

`-

; LA64-NEXT: bl %plt(__gnu_f2h_ieee)

`

``

157

`+

; LA64-NEXT: move a0,a0, a0,fp

`

157

158

`; LA64-NEXT: bl %plt(__gnu_h2f_ieee)

`

158

``

`-

; LA64-NEXT: fmov.s fs1,fs1, fs1,fa0

`

159

``

`-

; LA64-NEXT: fmov.s fa0,fa0, fa0,fs0

`

``

159

`+

; LA64-NEXT: fadd.s fa0,fa0, fa0,fa0, $fs0

`

160

160

`; LA64-NEXT: bl %plt(__gnu_f2h_ieee)

`

161

``

`-

; LA64-NEXT: bl %plt(__gnu_h2f_ieee)

`

162

``

`-

; LA64-NEXT: fadd.s fa0,fa0, fa0,fa0, $fs1

`

163

``

`-

; LA64-NEXT: fld.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Reload

`

164

``

`-

; LA64-NEXT: fld.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Reload

`

``

161

`+

; LA64-NEXT: fld.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Reload

`

``

162

`+

; LA64-NEXT: ld.d fp,fp, fp,sp, 16 # 8-byte Folded Reload

`

165

163

`; LA64-NEXT: ld.d ra,ra, ra,sp, 24 # 8-byte Folded Reload

`

166

164

`; LA64-NEXT: addi.d sp,sp, sp,sp, 32

`

167

165

`; LA64-NEXT: ret

`

`@@ -177,16 +175,16 @@ define void @test_fadd_mem(ptr %p, ptr %q) nounwind {

`

177

175

`; LA32-NEXT: st.w fp,fp, fp,sp, 24 # 4-byte Folded Spill

`

178

176

`; LA32-NEXT: st.w s0,s0, s0,sp, 20 # 4-byte Folded Spill

`

179

177

`; LA32-NEXT: fst.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Spill

`

180

``

`-

; LA32-NEXT: move fp,fp, fp,a1

`

181

``

`-

; LA32-NEXT: move s0,s0, s0,a0

`

182

``

`-

; LA32-NEXT: ld.hu a0,a0, a0,a0, 0

`

``

178

`+

; LA32-NEXT: move fp,fp, fp,a0

`

``

179

`+

; LA32-NEXT: ld.hu s0,s0, s0,a0, 0

`

``

180

`+

; LA32-NEXT: ld.hu a0,a0, a0,a1, 0

`

183

181

`; LA32-NEXT: bl %plt(__gnu_h2f_ieee)

`

184

182

`; LA32-NEXT: fmov.s fs0,fs0, fs0,fa0

`

185

``

`-

; LA32-NEXT: ld.hu a0,a0, a0,fp, 0

`

``

183

`+

; LA32-NEXT: move a0,a0, a0,s0

`

186

184

`; LA32-NEXT: bl %plt(__gnu_h2f_ieee)

`

187

``

`-

; LA32-NEXT: fadd.s fa0,fa0, fa0,fs0, $fa0

`

``

185

`+

; LA32-NEXT: fadd.s fa0,fa0, fa0,fa0, $fs0

`

188

186

`; LA32-NEXT: bl %plt(__gnu_f2h_ieee)

`

189

``

`-

; LA32-NEXT: st.h a0,a0, a0,s0, 0

`

``

187

`+

; LA32-NEXT: st.h a0,a0, a0,fp, 0

`

190

188

`; LA32-NEXT: fld.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Reload

`

191

189

`; LA32-NEXT: ld.w s0,s0, s0,sp, 20 # 4-byte Folded Reload

`

192

190

`; LA32-NEXT: ld.w fp,fp, fp,sp, 24 # 4-byte Folded Reload

`

`@@ -201,16 +199,16 @@ define void @test_fadd_mem(ptr %p, ptr %q) nounwind {

`

201

199

`; LA64-NEXT: st.d fp,fp, fp,sp, 16 # 8-byte Folded Spill

`

202

200

`; LA64-NEXT: st.d s0,s0, s0,sp, 8 # 8-byte Folded Spill

`

203

201

`; LA64-NEXT: fst.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Spill

`

204

``

`-

; LA64-NEXT: move fp,fp, fp,a1

`

205

``

`-

; LA64-NEXT: move s0,s0, s0,a0

`

206

``

`-

; LA64-NEXT: ld.hu a0,a0, a0,a0, 0

`

``

202

`+

; LA64-NEXT: move fp,fp, fp,a0

`

``

203

`+

; LA64-NEXT: ld.hu s0,s0, s0,a0, 0

`

``

204

`+

; LA64-NEXT: ld.hu a0,a0, a0,a1, 0

`

207

205

`; LA64-NEXT: bl %plt(__gnu_h2f_ieee)

`

208

206

`; LA64-NEXT: fmov.s fs0,fs0, fs0,fa0

`

209

``

`-

; LA64-NEXT: ld.hu a0,a0, a0,fp, 0

`

``

207

`+

; LA64-NEXT: move a0,a0, a0,s0

`

210

208

`; LA64-NEXT: bl %plt(__gnu_h2f_ieee)

`

211

``

`-

; LA64-NEXT: fadd.s fa0,fa0, fa0,fs0, $fa0

`

``

209

`+

; LA64-NEXT: fadd.s fa0,fa0, fa0,fa0, $fs0

`

212

210

`; LA64-NEXT: bl %plt(__gnu_f2h_ieee)

`

213

``

`-

; LA64-NEXT: st.h a0,a0, a0,s0, 0

`

``

211

`+

; LA64-NEXT: st.h a0,a0, a0,fp, 0

`

214

212

`; LA64-NEXT: fld.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Reload

`

215

213

`; LA64-NEXT: ld.d s0,s0, s0,sp, 8 # 8-byte Folded Reload

`

216

214

`; LA64-NEXT: ld.d fp,fp, fp,sp, 16 # 8-byte Folded Reload

`

`@@ -227,42 +225,40 @@ define void @test_fadd_mem(ptr %p, ptr %q) nounwind {

`

227

225

`define half @test_fmul_reg(half %a, half %b) nounwind {

`

228

226

`; LA32-LABEL: test_fmul_reg:

`

229

227

`; LA32: # %bb.0:

`

230

``

`-

; LA32-NEXT: addi.w sp,sp, sp,sp, -32

`

231

``

`-

; LA32-NEXT: st.w ra,ra, ra,sp, 28 # 4-byte Folded Spill

`

232

``

`-

; LA32-NEXT: fst.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Spill

`

233

``

`-

; LA32-NEXT: fst.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Spill

`

``

228

`+

; LA32-NEXT: addi.w sp,sp, sp,sp, -16

`

``

229

`+

; LA32-NEXT: st.w ra,ra, ra,sp, 12 # 4-byte Folded Spill

`

``

230

`+

; LA32-NEXT: st.w fp,fp, fp,sp, 8 # 4-byte Folded Spill

`

``

231

`+

; LA32-NEXT: fst.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Spill

`

``

232

`+

; LA32-NEXT: move fp,fp, fp,a0

`

``

233

`+

; LA32-NEXT: move a0,a0, a0,a1

`

``

234

`+

; LA32-NEXT: bl %plt(__gnu_h2f_ieee)

`

234

235

`; LA32-NEXT: fmov.s fs0,fs0, fs0,fa0

`

235

``

`-

; LA32-NEXT: fmov.s fa0,fa0, fa0,fa1

`

236

``

`-

; LA32-NEXT: bl %plt(__gnu_f2h_ieee)

`

``

236

`+

; LA32-NEXT: move a0,a0, a0,fp

`

237

237

`; LA32-NEXT: bl %plt(__gnu_h2f_ieee)

`

238

``

`-

; LA32-NEXT: fmov.s fs1,fs1, fs1,fa0

`

239

``

`-

; LA32-NEXT: fmov.s fa0,fa0, fa0,fs0

`

``

238

`+

; LA32-NEXT: fmul.s fa0,fa0, fa0,fa0, $fs0

`

240

239

`; LA32-NEXT: bl %plt(__gnu_f2h_ieee)

`

241

``

`-

; LA32-NEXT: bl %plt(__gnu_h2f_ieee)

`

242

``

`-

; LA32-NEXT: fmul.s fa0,fa0, fa0,fa0, $fs1

`

243

``

`-

; LA32-NEXT: fld.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Reload

`

244

``

`-

; LA32-NEXT: fld.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Reload

`

245

``

`-

; LA32-NEXT: ld.w ra,ra, ra,sp, 28 # 4-byte Folded Reload

`

246

``

`-

; LA32-NEXT: addi.w sp,sp, sp,sp, 32

`

``

240

`+

; LA32-NEXT: fld.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Reload

`

``

241

`+

; LA32-NEXT: ld.w fp,fp, fp,sp, 8 # 4-byte Folded Reload

`

``

242

`+

; LA32-NEXT: ld.w ra,ra, ra,sp, 12 # 4-byte Folded Reload

`

``

243

`+

; LA32-NEXT: addi.w sp,sp, sp,sp, 16

`

247

244

`; LA32-NEXT: ret

`

248

245

`;

`

249

246

`; LA64-LABEL: test_fmul_reg:

`

250

247

`; LA64: # %bb.0:

`

251

248

`; LA64-NEXT: addi.d sp,sp, sp,sp, -32

`

252

249

`; LA64-NEXT: st.d ra,ra, ra,sp, 24 # 8-byte Folded Spill

`

253

``

`-

; LA64-NEXT: fst.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Spill

`

254

``

`-

; LA64-NEXT: fst.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Spill

`

``

250

`+

; LA64-NEXT: st.d fp,fp, fp,sp, 16 # 8-byte Folded Spill

`

``

251

`+

; LA64-NEXT: fst.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Spill

`

``

252

`+

; LA64-NEXT: move fp,fp, fp,a0

`

``

253

`+

; LA64-NEXT: move a0,a0, a0,a1

`

``

254

`+

; LA64-NEXT: bl %plt(__gnu_h2f_ieee)

`

255

255

`; LA64-NEXT: fmov.s fs0,fs0, fs0,fa0

`

256

``

`-

; LA64-NEXT: fmov.s fa0,fa0, fa0,fa1

`

257

``

`-

; LA64-NEXT: bl %plt(__gnu_f2h_ieee)

`

``

256

`+

; LA64-NEXT: move a0,a0, a0,fp

`

258

257

`; LA64-NEXT: bl %plt(__gnu_h2f_ieee)

`

259

``

`-

; LA64-NEXT: fmov.s fs1,fs1, fs1,fa0

`

260

``

`-

; LA64-NEXT: fmov.s fa0,fa0, fa0,fs0

`

``

258

`+

; LA64-NEXT: fmul.s fa0,fa0, fa0,fa0, $fs0

`

261

259

`; LA64-NEXT: bl %plt(__gnu_f2h_ieee)

`

262

``

`-

; LA64-NEXT: bl %plt(__gnu_h2f_ieee)

`

263

``

`-

; LA64-NEXT: fmul.s fa0,fa0, fa0,fa0, $fs1

`

264

``

`-

; LA64-NEXT: fld.d fs1,fs1, fs1,sp, 8 # 8-byte Folded Reload

`

265

``

`-

; LA64-NEXT: fld.d fs0,fs0, fs0,sp, 16 # 8-byte Folded Reload

`

``

260

`+

; LA64-NEXT: fld.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Reload

`

``

261

`+

; LA64-NEXT: ld.d fp,fp, fp,sp, 16 # 8-byte Folded Reload

`

266

262

`; LA64-NEXT: ld.d ra,ra, ra,sp, 24 # 8-byte Folded Reload

`

267

263

`; LA64-NEXT: addi.d sp,sp, sp,sp, 32

`

268

264

`; LA64-NEXT: ret

`

`@@ -278,16 +274,16 @@ define void @test_fmul_mem(ptr %p, ptr %q) nounwind {

`

278

274

`; LA32-NEXT: st.w fp,fp, fp,sp, 24 # 4-byte Folded Spill

`

279

275

`; LA32-NEXT: st.w s0,s0, s0,sp, 20 # 4-byte Folded Spill

`

280

276

`; LA32-NEXT: fst.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Spill

`

281

``

`-

; LA32-NEXT: move fp,fp, fp,a1

`

282

``

`-

; LA32-NEXT: move s0,s0, s0,a0

`

283

``

`-

; LA32-NEXT: ld.hu a0,a0, a0,a0, 0

`

``

277

`+

; LA32-NEXT: move fp,fp, fp,a0

`

``

278

`+

; LA32-NEXT: ld.hu s0,s0, s0,a0, 0

`

``

279

`+

; LA32-NEXT: ld.hu a0,a0, a0,a1, 0

`

284

280

`; LA32-NEXT: bl %plt(__gnu_h2f_ieee)

`

285

281

`; LA32-NEXT: fmov.s fs0,fs0, fs0,fa0

`

286

``

`-

; LA32-NEXT: ld.hu a0,a0, a0,fp, 0

`

``

282

`+

; LA32-NEXT: move a0,a0, a0,s0

`

287

283

`; LA32-NEXT: bl %plt(__gnu_h2f_ieee)

`

288

``

`-

; LA32-NEXT: fmul.s fa0,fa0, fa0,fs0, $fa0

`

``

284

`+

; LA32-NEXT: fmul.s fa0,fa0, fa0,fa0, $fs0

`

289

285

`; LA32-NEXT: bl %plt(__gnu_f2h_ieee)

`

290

``

`-

; LA32-NEXT: st.h a0,a0, a0,s0, 0

`

``

286

`+

; LA32-NEXT: st.h a0,a0, a0,fp, 0

`

291

287

`; LA32-NEXT: fld.d fs0,fs0, fs0,sp, 8 # 8-byte Folded Reload

`

292

288

`; LA32-NEXT: ld.w s0,s0, s0,sp, 20 # 4-byte Folded Reload

`

293

289

`; LA32-NEXT: ld.w fp,fp, fp,sp, 24 # 4-byte Folded Reload

`

`@@ -302,16 +298,16 @@ define void @test_fmul_mem(ptr %p, ptr %q) nounwind {

`

302

298

`; LA64-NEXT: st.d fp,fp, fp,sp, 16 # 8-byte Folded Spill

`

303

299

`; LA64-NEXT: st.d s0,s0, s0,sp, 8 # 8-byte Folded Spill

`

304

300

`; LA64-NEXT: fst.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Spill

`

305

``

`-

; LA64-NEXT: move fp,fp, fp,a1

`

306

``

`-

; LA64-NEXT: move s0,s0, s0,a0

`

307

``

`-

; LA64-NEXT: ld.hu a0,a0, a0,a0, 0

`

``

301

`+

; LA64-NEXT: move fp,fp, fp,a0

`

``

302

`+

; LA64-NEXT: ld.hu s0,s0, s0,a0, 0

`

``

303

`+

; LA64-NEXT: ld.hu a0,a0, a0,a1, 0

`

308

304

`; LA64-NEXT: bl %plt(__gnu_h2f_ieee)

`

309

305

`; LA64-NEXT: fmov.s fs0,fs0, fs0,fa0

`

310

``

`-

; LA64-NEXT: ld.hu a0,a0, a0,fp, 0

`

``

306

`+

; LA64-NEXT: move a0,a0, a0,s0

`

311

307

`; LA64-NEXT: bl %plt(__gnu_h2f_ieee)

`

312

``

`-

; LA64-NEXT: fmul.s fa0,fa0, fa0,fs0, $fa0

`

``

308

`+

; LA64-NEXT: fmul.s fa0,fa0, fa0,fa0, $fs0

`

313

309

`; LA64-NEXT: bl %plt(__gnu_f2h_ieee)

`

314

``

`-

; LA64-NEXT: st.h a0,a0, a0,s0, 0

`

``

310

`+

; LA64-NEXT: st.h a0,a0, a0,fp, 0

`

315

311

`; LA64-NEXT: fld.d fs0,fs0, fs0,sp, 0 # 8-byte Folded Reload

`

316

312

`; LA64-NEXT: ld.d s0,s0, s0,sp, 8 # 8-byte Folded Reload

`

317

313

`; LA64-NEXT: ld.d fp,fp, fp,sp, 16 # 8-byte Folded Reload

`

`@@ -324,3 +320,61 @@ define void @test_fmul_mem(ptr %p, ptr %q) nounwind {

`

324

320

`store half %r, ptr %p

`

325

321

`ret void

`

326

322

`}

`

``

323

+

``

324

`+

define half @freeze_half_undef() nounwind {

`

``

325

`+

; LA32-LABEL: freeze_half_undef:

`

``

326

`+

; LA32: # %bb.0:

`

``

327

`+

; LA32-NEXT: addi.w sp,sp, sp,sp, -16

`

``

328

`+

; LA32-NEXT: st.w ra,ra, ra,sp, 12 # 4-byte Folded Spill

`

``

329

`+

; LA32-NEXT: movgr2fr.w fa0,fa0, fa0,zero

`

``

330

`+

; LA32-NEXT: bl %plt(__gnu_f2h_ieee)

`

``

331

`+

; LA32-NEXT: bl %plt(__gnu_h2f_ieee)

`

``

332

`+

; LA32-NEXT: fadd.s fa0,fa0, fa0,fa0, $fa0

`

``

333

`+

; LA32-NEXT: bl %plt(__gnu_f2h_ieee)

`

``

334

`+

; LA32-NEXT: ld.w ra,ra, ra,sp, 12 # 4-byte Folded Reload

`

``

335

`+

; LA32-NEXT: addi.w sp,sp, sp,sp, 16

`

``

336

`+

; LA32-NEXT: ret

`

``

337

`+

;

`

``

338

`+

; LA64-LABEL: freeze_half_undef:

`

``

339

`+

; LA64: # %bb.0:

`

``

340

`+

; LA64-NEXT: addi.d sp,sp, sp,sp, -16

`

``

341

`+

; LA64-NEXT: st.d ra,ra, ra,sp, 8 # 8-byte Folded Spill

`

``

342

`+

; LA64-NEXT: movgr2fr.w fa0,fa0, fa0,zero

`

``

343

`+

; LA64-NEXT: bl %plt(__gnu_f2h_ieee)

`

``

344

`+

; LA64-NEXT: bl %plt(__gnu_h2f_ieee)

`

``

345

`+

; LA64-NEXT: fadd.s fa0,fa0, fa0,fa0, $fa0

`

``

346

`+

; LA64-NEXT: bl %plt(__gnu_f2h_ieee)

`

``

347

`+

; LA64-NEXT: ld.d ra,ra, ra,sp, 8 # 8-byte Folded Reload

`

``

348

`+

; LA64-NEXT: addi.d sp,sp, sp,sp, 16

`

``

349

`+

; LA64-NEXT: ret

`

``

350

`+

%y1 = freeze half undef

`

``

351

`+

%t1 = fadd half %y1, %y1

`

``

352

`+

ret half %t1

`

``

353

`+

}

`

``

354

+

``

355

`+

define half @freeze_half_poison(half %maybe.poison) nounwind {

`

``

356

`+

; LA32-LABEL: freeze_half_poison:

`

``

357

`+

; LA32: # %bb.0:

`

``

358

`+

; LA32-NEXT: addi.w sp,sp, sp,sp, -16

`

``

359

`+

; LA32-NEXT: st.w ra,ra, ra,sp, 12 # 4-byte Folded Spill

`

``

360

`+

; LA32-NEXT: bl %plt(__gnu_h2f_ieee)

`

``

361

`+

; LA32-NEXT: fadd.s fa0,fa0, fa0,fa0, $fa0

`

``

362

`+

; LA32-NEXT: bl %plt(__gnu_f2h_ieee)

`

``

363

`+

; LA32-NEXT: ld.w ra,ra, ra,sp, 12 # 4-byte Folded Reload

`

``

364

`+

; LA32-NEXT: addi.w sp,sp, sp,sp, 16

`

``

365

`+

; LA32-NEXT: ret

`

``

366

`+

;

`

``

367

`+

; LA64-LABEL: freeze_half_poison:

`

``

368

`+

; LA64: # %bb.0:

`

``

369

`+

; LA64-NEXT: addi.d sp,sp, sp,sp, -16

`

``

370

`+

; LA64-NEXT: st.d ra,ra, ra,sp, 8 # 8-byte Folded Spill

`

``

371

`+

; LA64-NEXT: bl %plt(__gnu_h2f_ieee)

`

``

372

`+

; LA64-NEXT: fadd.s fa0,fa0, fa0,fa0, $fa0

`

``

373

`+

; LA64-NEXT: bl %plt(__gnu_f2h_ieee)

`

``

374

`+

; LA64-NEXT: ld.d ra,ra, ra,sp, 8 # 8-byte Folded Reload

`

``

375

`+

; LA64-NEXT: addi.d sp,sp, sp,sp, 16

`

``

376

`+

; LA64-NEXT: ret

`

``

377

`+

%y1 = freeze half %maybe.poison

`

``

378

`+

%t1 = fadd half %y1, %y1

`

``

379

`+

ret half %t1

`

``

380

`+

}

`