mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-05 18:27:59 +00:00
43fc5d0f42
The code in ConstantFoldGetElementPtr() assumes integers, and therefore it crashes trying to get the integer bidwith of a vector type (in this case <4 x i32>. I just changed the code to prevent the folding in case of vectors and I didn't bother to generalize as this doesn't seem to me something that really happens in practice, but I'm willing to change the patch if you think it's worth it. This is hard to trigger from -instsimplify or -instcombine only as the second instruction is dead, so the test uses loop-unroll. Differential Revision: https://reviews.llvm.org/D35956 llvm-svn: 309330
30 lines
812 B
LLVM
30 lines
812 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
; RUN: opt -loop-unroll -S %s | FileCheck %s
|
|
|
|
%struct.bar = type { i32 }
|
|
|
|
@global = external constant [78 x %struct.bar], align 4
|
|
|
|
define void @patatino(i32 %x) {
|
|
; CHECK-LABEL: @patatino(
|
|
; CHECK-NEXT: bb:
|
|
; CHECK-NEXT: br i1 true, label [[BB1_PREHEADER:%.*]], label [[BB3:%.*]]
|
|
; CHECK: bb1.preheader:
|
|
; CHECK-NEXT: br label [[BB1:%.*]]
|
|
; CHECK: bb1:
|
|
; CHECK-NEXT: br label [[BB3]]
|
|
; CHECK: bb3:
|
|
; CHECK-NEXT: ret void
|
|
;
|
|
bb:
|
|
br i1 true, label %bb1, label %bb3
|
|
|
|
bb1:
|
|
%tmp = getelementptr inbounds [78 x %struct.bar], [78 x %struct.bar]* @global, i32 0, <4 x i32> undef
|
|
%tmp2 = getelementptr inbounds %struct.bar, <4 x %struct.bar*> %tmp, i32 1
|
|
br i1 true, label %bb3, label %bb1
|
|
|
|
bb3:
|
|
ret void
|
|
}
|