WIP: nir: Add a new fmulz opcode

OpenGL ARB programs have different floating-point rules than GLSL.
While GLSL aims to be mostly compliant with IEEE-754 (up to a rough
equivalent of -ffast-math), ARB programs do not.  They require that NaN
is never generated.  While not generating NaN isn't too hard most of the
time, there is one particular place it's tricky: 0*inf.  According to
the IEEE-754 rules (and most hardware), 0*inf = NaN but ARB programs
explicitly specify that 0*x=0 for any value of x, including NaN.

Currently, in Mesa, this is handled by each driver itself.  On Intel, we
handle it by enabling the ALT floating-point mode.  On AMD, they have
different multiply instructions.  For most of the GLES-focused drivers,
it's ignored even if they claim desktop GL because no one has bothered
to care.  For drivers like Zink and the d3d12 gallium driver, they need
to handle it with shader code-gen if they want to be correct.  (Neither
layered implementation is correct today.)

The best way to do this (and this is good for AMD as well), is likely to
have an opcode in NIR which has old alternative behavior.  Then we make
the ARB -> NIR pass generate that opcode along with whatever other
fix-ups we need for things like flog to ensure we never get NaN.
Alternatively, we could add an "old school float" lowering pass.
Back-ends will then have to handle the new fmulz instruction by either
emitting special instructions (if they have them), emitting extra code
to fix up a regular MUL, or ignoring it if you're a GLES driver and just
don't care.

Thoughts?
156 jobs for !12794 with wip/nir-fmulz in 19 seconds (queued for 34 seconds)
latest detached
Status Name Job ID Coverage
  Sanity
passed sanity #13526225

00:00:19

 
  Container
manual debian/arm_build #13526228
aarch64 manual
manual debian/x86_build-base #13526226
manual
manual debian/x86_test-base #13526227
manual
manual fedora/x86_build #13526229
manual
manual windows_build_vs2019 #13526230
windows shell 1809 mesa manual
 
  Container 2
created debian/android_build #13526235
created debian/i386_build #13526232
created debian/ppc64el_build #13526233
created debian/s390x_build #13526234
created debian/x86_build #13526231
created debian/x86_test-gl #13526236
created debian/x86_test-vk #13526237
created kernel+rootfs_amd64 #13526238
created kernel+rootfs_arm64 #13526239
aarch64
created kernel+rootfs_armhf #13526240
aarch64
 
  Build X86 64
created debian-clang #13526247
created debian-clover #13526248
created debian-clover-testing #13526243
created debian-gallium #13526244
created debian-release #13526245
created debian-testing #13526241
created debian-testing-asan #13526242
created debian-vulkan #13526249
created fedora-release #13526246
 
  Build Misc
created debian-android #13526251
created debian-arm64 #13526253
aarch64
created debian-arm64-asan #13526254
aarch64
created debian-arm64-build-test #13526255
aarch64
created debian-armhf #13526252
aarch64
created debian/arm_test #13526250
created debian-i386 #13526257
created debian-mingw32-x86_64 #13526260
created debian-ppc64el #13526259
created debian-s390x #13526258
kvm
created windows-vs2019 #13526256
windows docker 1809 mesa
 
  Amd
created radeonsi-stoney-gles2:amd64 #13526265
mesa-ci-x86-64-lava-hp-11A-G6-EE-grunt
created radeonsi-stoney-gles31:amd64 1/2 #13526268
mesa-ci-x86-64-lava-hp-11A-G6-EE-grunt
created radeonsi-stoney-gles31:amd64 2/2 #13526269
mesa-ci-x86-64-lava-hp-11A-G6-EE-grunt
created radeonsi-stoney-gles3:amd64 1/2 #13526266
mesa-ci-x86-64-lava-hp-11A-G6-EE-grunt
created radeonsi-stoney-gles3:amd64 2/2 #13526267
mesa-ci-x86-64-lava-hp-11A-G6-EE-grunt
created radeonsi-stoney-piglit-gl:amd64 #13526271
mesa-ci-x86-64-lava-hp-11A-G6-EE-grunt
created radeonsi-stoney-traces:amd64 #13526270
mesa-ci-x86-64-lava-hp-11A-G6-EE-grunt
created radv-fossils #13526264
created radv_stoney_vkcts:amd64 1/3 #13526261
mesa-ci-x86-64-lava-hp-11A-G6-EE-grunt
created radv_stoney_vkcts:amd64 2/3 #13526262
mesa-ci-x86-64-lava-hp-11A-G6-EE-grunt
created radv_stoney_vkcts:amd64 3/3 #13526263
mesa-ci-x86-64-lava-hp-11A-G6-EE-grunt
 
  Intel
created i915-g33-deqp #13526272
anholt-g33 manual
created i915-g33-piglit #13526273
anholt-g33 manual
created i915-g33-traces #13526274
anholt-g33 manual
created iris-apl-egl #13526279
mesa-ci-x86-64-lava-asus-C523NA-A20057-coral
created iris-apl-gl #13526278
mesa-ci-x86-64-lava-asus-C523NA-A20057-coral manual
created iris-apl-gles2 #13526275
mesa-ci-x86-64-lava-asus-C523NA-A20057-coral
created iris-apl-gles3 #13526276
mesa-ci-x86-64-lava-asus-C523NA-A20057-coral
created iris-apl-gles31 #13526277
mesa-ci-x86-64-lava-asus-C523NA-A20057-coral
created iris-apl-traces #13526285
mesa-ci-x86-64-lava-asus-C523NA-A20057-coral
created iris-cml-traces #13526289
mesa-ci-x86-64-lava-asus-C436FA-flip-hatch manual
created iris-glk-egl #13526284
mesa-ci-x86-64-lava-hp-x360-12b-ca0010nr-n4020-octopus manual
created iris-glk-gl #13526283
mesa-ci-x86-64-lava-hp-x360-12b-ca0010nr-n4020-octopus manual
created iris-glk-gles2 #13526280
mesa-ci-x86-64-lava-hp-x360-12b-ca0010nr-n4020-octopus manual
created iris-glk-gles3 #13526281
mesa-ci-x86-64-lava-hp-x360-12b-ca0010nr-n4020-octopus manual
created iris-glk-gles31 #13526282
mesa-ci-x86-64-lava-hp-x360-12b-ca0010nr-n4020-octopus manual
created iris-glk-traces #13526286
mesa-ci-x86-64-lava-hp-x360-12b-ca0010nr-n4020-octopus manual
created iris-kbl-traces #13526287
mesa-ci-x86-64-lava-hp-x360-14-G1-sona manual
created iris-whl-traces #13526288
mesa-ci-x86-64-lava-dell-latitude-5400-4305U-sarien manual
 
  Arm
created lima-mali450-test:arm64 #13526290
mesa-ci-x86-64-lava-lima
created panfrost-g52-gl:arm64 1/3 #13526298
mesa-ci-x86-64-lava-meson-g12b-a311d-khadas-vim3
created panfrost-g52-gl:arm64 2/3 #13526299
mesa-ci-x86-64-lava-meson-g12b-a311d-khadas-vim3
created panfrost-g52-gl:arm64 3/3 #13526300
mesa-ci-x86-64-lava-meson-g12b-a311d-khadas-vim3
created panfrost-t720-gles2:arm64 #13526291
mesa-ci-x86-64-lava-sun50i-h6-pine-h64
created panfrost-t760-gles2:armhf #13526292
mesa-ci-x86-64-lava-rk3288-veyron-jaq
created panfrost-t760-traces:armhf #13526293
mesa-ci-x86-64-lava-rk3288-veyron-jaq
created panfrost-t860-gl:arm64 1/3 #13526294
mesa-ci-x86-64-lava-rk3399-gru-kevin
created panfrost-t860-gl:arm64 2/3 #13526295
mesa-ci-x86-64-lava-rk3399-gru-kevin
created panfrost-t860-gl:arm64 3/3 #13526296
mesa-ci-x86-64-lava-rk3399-gru-kevin
created panfrost-t860-traces:arm64 #13526297
mesa-ci-x86-64-lava-rk3399-gru-kevin
 
  Broadcom
created v3d-rpi4-egl:armhf #13526312
igalia-rpi4
created v3d-rpi4-gles:armhf 1/8 #13526304
igalia-rpi4
created v3d-rpi4-gles:armhf 2/8 #13526305
igalia-rpi4
created v3d-rpi4-gles:armhf 3/8 #13526306
igalia-rpi4
created v3d-rpi4-gles:armhf 4/8 #13526307
igalia-rpi4
created v3d-rpi4-gles:armhf 5/8 #13526308
igalia-rpi4
created v3d-rpi4-gles:armhf 6/8 #13526309
igalia-rpi4
created v3d-rpi4-gles:armhf 7/8 #13526310
igalia-rpi4
created v3d-rpi4-gles:armhf 8/8 #13526311
igalia-rpi4
created v3d-rpi4-piglit:armhf 1/4 #13526313
igalia-rpi4
created v3d-rpi4-piglit:armhf 2/4 #13526314
igalia-rpi4
created v3d-rpi4-piglit:armhf 3/4 #13526315
igalia-rpi4
created v3d-rpi4-piglit:armhf 4/4 #13526316
igalia-rpi4
created v3dv-rpi4-vk:arm64 1/8 #13526317
igalia-rpi4
created v3dv-rpi4-vk:arm64 2/8 #13526318
igalia-rpi4
created v3dv-rpi4-vk:arm64 3/8 #13526319
igalia-rpi4
created v3dv-rpi4-vk:arm64 4/8 #13526320
igalia-rpi4
created v3dv-rpi4-vk:arm64 5/8 #13526321
igalia-rpi4
created v3dv-rpi4-vk:arm64 6/8 #13526322
igalia-rpi4
created v3dv-rpi4-vk:arm64 7/8 #13526323
igalia-rpi4
created v3dv-rpi4-vk:arm64 8/8 #13526324
igalia-rpi4
created vc4-rpi3-egl:armhf #13526303
igalia-rpi3
created vc4-rpi3-gles:armhf 1/2 #13526301
igalia-rpi3
created vc4-rpi3-gles:armhf 2/2 #13526302
igalia-rpi3
 
  Freedreno
created a306_gl 1/5 #13526325
google-freedreno-db410c
created a306_gl 2/5 #13526326
google-freedreno-db410c
created a306_gl 3/5 #13526327
google-freedreno-db410c
created a306_gl 4/5 #13526328
google-freedreno-db410c
created a306_gl 5/5 #13526329
google-freedreno-db410c
created a306-traces #13526330
google-freedreno-db410c
created a530_gl 1/5 #13526331
google-freedreno-db820c
created a530_gl 2/5 #13526332
google-freedreno-db820c
created a530_gl 3/5 #13526333
google-freedreno-db820c
created a530_gl 4/5 #13526334
google-freedreno-db820c
created a530_gl 5/5 #13526335
google-freedreno-db820c
created a530_piglit_gl #13526336
google-freedreno-db820c manual
created a530_piglit_shader 1/2 #13526337
google-freedreno-db820c
created a530_piglit_shader 2/2 #13526338
google-freedreno-db820c
created a530-traces #13526339
google-freedreno-db820c
created a630_egl #13526344
google-freedreno-cheza
created a630_gl 1/4 #13526340
google-freedreno-cheza
created a630_gl 2/4 #13526341
google-freedreno-cheza
created a630_gl 3/4 #13526342
google-freedreno-cheza
created a630_gl 4/4 #13526343
google-freedreno-cheza
created a630_piglit #13526350
google-freedreno-cheza
created a630-traces #13526351
google-freedreno-cheza
created a630_vk 1/3 #13526345
google-freedreno-cheza
created a630_vk 2/3 #13526346
google-freedreno-cheza
created a630_vk 3/3 #13526347
google-freedreno-cheza
created a630_vk_full 1/2 #13526348
google-freedreno-cheza manual
created a630_vk_full 2/2 #13526349
google-freedreno-cheza manual
 
  Software Renderer
created lavapipe-nir-stress #13526366
created lavapipe-vk #13526365
created lavapipe-vk-asan #13526367
created llvmpipe-deqp 1/2 #13526357
created llvmpipe-deqp 2/2 #13526358
created llvmpipe-deqp-asan #13526359
created llvmpipe-egl #13526360
created llvmpipe-piglit-cl #13526352
created llvmpipe-piglit-glslparser #13526354
created llvmpipe-piglit-quick_gl #13526353
created llvmpipe-piglit-quick_shader #13526355
created llvmpipe-traces #13526356
created softpipe-asan-gles31 #13526363
created softpipe-deqp 1/2 #13526361
created softpipe-deqp 2/2 #13526362
created softpipe-piglit-quick #13526364
 
  Layered Backends
created test-d3d12-windows #13526380
windows docker 1809 mesa
created virgl-on-gl 1/6 #13526368
kvm
created virgl-on-gl 2/6 #13526369
kvm
created virgl-on-gl 3/6 #13526370
kvm
created virgl-on-gl 4/6 #13526371
kvm
created virgl-on-gl 5/6 #13526372
kvm
created virgl-on-gl 6/6 #13526373
kvm
created virgl-traces #13526374
kvm
created zink-lvp-deqp 1/2 #13526378
created zink-lvp-deqp 2/2 #13526379
created zink-piglit-lazy #13526377
created zink-piglit-no_timelines #13526376
created zink-piglit-timelines #13526375