Closed
Description
Bugzilla Link | 49942 |
Version | 10.0 |
OS | All |
Blocks | #30613 |
CC | @RKSimon,@Nuullll |
Extended Description
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.