nir/opcodes: Fix constant-folding of bitfield_insert
authorJames Legg <jlegg@feralinteractive.com>
Wed, 6 Dec 2017 11:55:14 +0000 (11:55 +0000)
committerAlex Smith <asmith@feralinteractive.com>
Thu, 7 Dec 2017 08:59:36 +0000 (08:59 +0000)
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104119
CC: <mesa-stable@lists.freedesktop.org>
CC: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/compiler/nir/nir_opcodes.py

index ac7333fe78186b104885b027f758ea102cbe9f07..278562b2bd1172dd4f2581e483fd874591245a5a 100644 (file)
@@ -724,12 +724,12 @@ opcode("bitfield_insert", 0, tuint32, [0, 0, 0, 0],
 unsigned base = src0, insert = src1;
 int offset = src2, bits = src3;
 if (bits == 0) {
-   dst = 0;
+   dst = base;
 } else if (offset < 0 || bits < 0 || bits + offset > 32) {
    dst = 0;
 } else {
    unsigned mask = ((1ull << bits) - 1) << offset;
-   dst = (base & ~mask) | ((insert << bits) & mask);
+   dst = (base & ~mask) | ((insert << offset) & mask);
 }
 """)