aco: zero-initialize Temp
authorRhys Perry <pendingchaos02@gmail.com>
Mon, 6 Apr 2020 13:08:39 +0000 (14:08 +0100)
committerMarge Bot <eric+marge@anholt.net>
Mon, 6 Apr 2020 19:15:19 +0000 (19:15 +0000)
Fixes dEQP-VK.transform_feedback.* crashes from accesses garbage
temporaries in emit_extract_vector().

Fixes: 85521061 ("aco: prepare helper functions for subdword handling")
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4463>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4463>

src/amd/compiler/aco_instruction_selection.cpp
src/amd/compiler/aco_ir.h
src/amd/compiler/aco_optimizer.cpp

index 2d9b78792f357765dcf4f327404d009abf1f1cd7..6a63d5d87189f9e03ccf460721ea69b7607e5333 100644 (file)
@@ -274,7 +274,6 @@ Temp emit_extract_vector(isel_context* ctx, Temp src, uint32_t idx, RegClass dst
    assert(src.bytes() > (idx * dst_rc.bytes()));
    Builder bld(ctx->program, ctx->block);
    auto it = ctx->allocated_vec.find(src.id());
-   /* the size check needs to be early because elements other than 0 may be garbage */
    if (it != ctx->allocated_vec.end() && dst_rc.bytes() == it->second[idx].regClass().bytes()) {
       if (it->second[idx].regClass() == dst_rc) {
          return it->second[idx];
index b05f809d21fb7ebe32acdd9b1a23c10a7031afd3..17ce7e39f1b51d739398e8c0f1fcde31fcd899a0 100644 (file)
@@ -262,7 +262,7 @@ static constexpr RegClass v8b{RegClass::v8b};
  * and SSA id.
  */
 struct Temp {
-   Temp() = default;
+   Temp() noexcept : id_(0), reg_class(RegType::sgpr, 0) {}
    constexpr Temp(uint32_t id, RegClass cls) noexcept
       : id_(id), reg_class(cls) {}
 
index 7a5b8f9d7560d2f83bed9a8e0d0fac8f3927803e..72ae710f838b46f2d9921c7c8f605fe87f2ddfae 100644 (file)
@@ -103,6 +103,8 @@ struct ssa_info {
    };
    uint32_t label;
 
+   ssa_info() : label(0) {}
+
    void add_label(Label new_label)
    {
       /* Since all labels which use "instr" use it for the same thing