https://bugs.llvm.org/show_bug.cgi?id=49942

            Bug ID: 49942
           Summary: Loading a vector of i1 loads the wrong value
           Product: libraries
           Version: 10.0
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Core LLVM classes
          Assignee: [email protected]
          Reporter: [email protected]
                CC: [email protected]

This program:

```
@useFlag = private global <4 x i1> <i1 true, i1 true, i1 true, i1 true>


define i32 @get(i32 %arg)  {
    %ld = load <4 x i1>, <4 x i1>* @useFlag
    %zx = zext <4 x i1> %ld to <4 x i32>
    %ee = extractelement <4 x i32> %zx, i32 %arg
    ret i32 %ee
}

define i32 @main() {
  %g = call i32 @get(i32 2)
  ret i32 %g
}
```

will return 0.  I'd expect it to return 1 since it should load i1 true and then
zext that to i32 1.

Note that if you `get(i32 0)` then it returns 1 as expected.  Also, with -O3
this returns 1 correctly since the load is optimized out.

Tested with:

```
$ clang-10 --version
clang version 10.0.0
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
```

Sorry if this is a duplicate! I found some related notes on lists.llvm.org, but
not a bug report.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to