
Auto-upgrades that rely on the pointer element type do not work in opaque pointer mode. The idea behind this patch is that we can instead work with type IDs, for which we can retain the pointer element type. For typed pointer bitcode, we will have a distinct type ID for pointers with distinct element type, even if there will only be a single corresponding opaque pointer type. The disclaimer here is that this is only the first step of the change, and there are still more getPointerElementType() calls to remove. I expect that two more patches will be needed: 1. Track all "contained" type IDs, which will allow us to handle function params (which are contained in the function type) and GEPs (which may use vectors of pointers) 2. Track type IDs for values, which is e.g. necessary to handle loads. Differential Revision: https://reviews.llvm.org/D118694
36 lines
1.1 KiB
LLVM
36 lines
1.1 KiB
LLVM
; RUN: llvm-dis -opaque-pointers=0 < %s.bc| FileCheck %s
|
|
; RUN: llvm-dis -opaque-pointers=1 < %s.bc| FileCheck %s
|
|
; RUN: verify-uselistorder < %s.bc
|
|
|
|
; aggregateOperations.3.2.ll.bc was generated by passing this file to llvm-as-3.2.
|
|
; The test checks that LLVM does not misread instructions with aggregate operands
|
|
; in older bitcode files.
|
|
|
|
define void @extractvalue([4 x i8] %x1, [4 x [4 x i8]] %x2, {{i32, float}} %x3){
|
|
entry:
|
|
; CHECK: %res1 = extractvalue [4 x i8] %x1, 0
|
|
%res1 = extractvalue [4 x i8] %x1, 0
|
|
|
|
; CHECK-NEXT: %res2 = extractvalue [4 x [4 x i8]] %x2, 1
|
|
%res2 = extractvalue [4 x [4 x i8 ]] %x2, 1
|
|
|
|
; CHECK-NEXT: %res3 = extractvalue [4 x [4 x i8]] %x2, 0, 1
|
|
%res3 = extractvalue [4 x [4 x i8 ]] %x2, 0, 1
|
|
|
|
; CHECK-NEXT: %res4 = extractvalue { { i32, float } } %x3, 0, 1
|
|
%res4 = extractvalue {{i32, float}} %x3, 0, 1
|
|
|
|
ret void
|
|
}
|
|
|
|
define void @insertvalue([4 x [4 x i8 ]] %x1){
|
|
entry:
|
|
; CHECK: %res1 = insertvalue [4 x [4 x i8]] %x1, i8 0, 0, 0
|
|
%res1 = insertvalue [4 x [4 x i8 ]] %x1, i8 0, 0, 0
|
|
|
|
; CHECK-NEXT: %res2 = insertvalue [4 x [4 x i8]] undef, i8 0, 0, 0
|
|
%res2 = insertvalue [4 x [4 x i8 ]] undef, i8 0, 0, 0
|
|
|
|
ret void
|
|
}
|