llvm-project/llvm/test/Bitcode/miscInstructions.3.2.ll
Nikita Popov e45cf47923 [Bitcode] Remove auto-detection for typed pointers
Always read bitcode according to the -opaque-pointers mode. Do not
perform auto-detection to implicitly switch to typed pointers.

This is a step towards removing typed pointer support, and also
eliminates the class of problems where linking may fail if a typed
pointer module is loaded before an opaque pointer module. (The
latest place where this was encountered is D139924, but this has
previously been fixed in other places doing bitcode linking as well.)

Differential Revision: https://reviews.llvm.org/D139940
2022-12-14 13:38:20 +01:00

193 lines
5.1 KiB
LLVM

; RUN: llvm-dis < %s.bc| FileCheck %s
; miscInstructions.3.2.ll.bc was generated by passing this file to llvm-as-3.2.
; The test checks that LLVM does not misread miscellaneous instructions of
; older bitcode files.
@X = global i8 1
@_ZTIi = global i8* @X
@_ZTId = global i8* @X
define i32 @__gxx_personality_v0(...){
entry:
ret i32 0
}
; CHECK-LABEL: define void @landingpadInstr1
; CHECK-SAME: personality ptr @__gxx_personality_v0
define void @landingpadInstr1(i1 %cond1, <2 x i1> %cond2, <2 x i8> %x1, <2 x i8> %x2){
entry:
; CHECK: %res = landingpad { ptr, i32 }
%res = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0
; CHECK: catch ptr @_ZTIi
catch i8** @_ZTIi
ret void
}
; CHECK-LABEL: define void @landingpadInstr2
; CHECK-SAME: personality ptr @__gxx_personality_v0
define void @landingpadInstr2(i1 %cond1, <2 x i1> %cond2, <2 x i8> %x1, <2 x i8> %x2){
entry:
; CHECK: %res = landingpad { ptr, i32 }
%res = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0
; CHECK: cleanup
cleanup
ret void
}
; CHECK-LABEL: define void @landingpadInstr3
; CHECK-SAME: personality ptr @__gxx_personality_v0
define void @landingpadInstr3(i1 %cond1, <2 x i1> %cond2, <2 x i8> %x1, <2 x i8> %x2){
entry:
; CHECK: %res = landingpad { ptr, i32 }
%res = landingpad { i8*, i32 } personality i32 (...)* @__gxx_personality_v0
; CHECK: catch ptr @_ZTIi
catch i8** @_ZTIi
; CHECK: filter [1 x ptr] [ptr @_ZTId]
filter [1 x i8**] [i8** @_ZTId]
ret void
}
define void @phiInstr(){
LoopHeader:
%x = add i32 0, 0
br label %Loop
Loop:
; CHECK: %indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ]
%indvar = phi i32 [ 0, %LoopHeader ], [ %nextindvar, %Loop ]
%nextindvar = add i32 %indvar, 1
br label %Loop
ret void
}
define void @selectInstr(i1 %cond1, <2 x i1> %cond2, <2 x i8> %x1, <2 x i8> %x2){
entry:
; CHECK: %res1 = select i1 %cond1, i8 1, i8 0
%res1 = select i1 %cond1, i8 1, i8 0
; CHECK-NEXT: %res2 = select <2 x i1> %cond2, <2 x i8> %x1, <2 x i8> %x2
%res2 = select <2 x i1> %cond2, <2 x i8> %x1, <2 x i8> %x2
ret void
}
define void @icmp(i32 %x1, i32 %x2, i32* %ptr1, i32* %ptr2, <2 x i32> %vec1, <2 x i32> %vec2){
entry:
; CHECK: %res1 = icmp eq i32 %x1, %x2
%res1 = icmp eq i32 %x1, %x2
; CHECK-NEXT: %res2 = icmp ne i32 %x1, %x2
%res2 = icmp ne i32 %x1, %x2
; CHECK-NEXT: %res3 = icmp ugt i32 %x1, %x2
%res3 = icmp ugt i32 %x1, %x2
; CHECK-NEXT: %res4 = icmp uge i32 %x1, %x2
%res4 = icmp uge i32 %x1, %x2
; CHECK-NEXT: %res5 = icmp ult i32 %x1, %x2
%res5 = icmp ult i32 %x1, %x2
; CHECK-NEXT: %res6 = icmp ule i32 %x1, %x2
%res6 = icmp ule i32 %x1, %x2
; CHECK-NEXT: %res7 = icmp sgt i32 %x1, %x2
%res7 = icmp sgt i32 %x1, %x2
; CHECK-NEXT: %res8 = icmp sge i32 %x1, %x2
%res8 = icmp sge i32 %x1, %x2
; CHECK-NEXT: %res9 = icmp slt i32 %x1, %x2
%res9 = icmp slt i32 %x1, %x2
; CHECK-NEXT: %res10 = icmp sle i32 %x1, %x2
%res10 = icmp sle i32 %x1, %x2
; CHECK-NEXT: %res11 = icmp eq ptr %ptr1, %ptr2
%res11 = icmp eq i32* %ptr1, %ptr2
; CHECK-NEXT: %res12 = icmp eq <2 x i32> %vec1, %vec2
%res12 = icmp eq <2 x i32> %vec1, %vec2
ret void
}
define void @fcmp(float %x1, float %x2, <2 x float> %vec1, <2 x float> %vec2){
entry:
; CHECK: %res1 = fcmp oeq float %x1, %x2
%res1 = fcmp oeq float %x1, %x2
; CHECK-NEXT: %res2 = fcmp one float %x1, %x2
%res2 = fcmp one float %x1, %x2
; CHECK-NEXT: %res3 = fcmp ugt float %x1, %x2
%res3 = fcmp ugt float %x1, %x2
; CHECK-NEXT: %res4 = fcmp uge float %x1, %x2
%res4 = fcmp uge float %x1, %x2
; CHECK-NEXT: %res5 = fcmp ult float %x1, %x2
%res5 = fcmp ult float %x1, %x2
; CHECK-NEXT: %res6 = fcmp ule float %x1, %x2
%res6 = fcmp ule float %x1, %x2
; CHECK-NEXT: %res7 = fcmp ogt float %x1, %x2
%res7 = fcmp ogt float %x1, %x2
; CHECK-NEXT: %res8 = fcmp oge float %x1, %x2
%res8 = fcmp oge float %x1, %x2
; CHECK-NEXT: %res9 = fcmp olt float %x1, %x2
%res9 = fcmp olt float %x1, %x2
; CHECK-NEXT: %res10 = fcmp ole float %x1, %x2
%res10 = fcmp ole float %x1, %x2
; CHECK-NEXT: %res11 = fcmp ord float %x1, %x2
%res11 = fcmp ord float %x1, %x2
; CHECK-NEXT: %res12 = fcmp ueq float %x1, %x2
%res12 = fcmp ueq float %x1, %x2
; CHECK-NEXT: %res13 = fcmp une float %x1, %x2
%res13 = fcmp une float %x1, %x2
; CHECK-NEXT: %res14 = fcmp uno float %x1, %x2
%res14 = fcmp uno float %x1, %x2
; CHECK-NEXT: %res15 = fcmp true float %x1, %x2
%res15 = fcmp true float %x1, %x2
; CHECK-NEXT: %res16 = fcmp false float %x1, %x2
%res16 = fcmp false float %x1, %x2
; CHECK-NEXT: %res17 = fcmp oeq <2 x float> %vec1, %vec2
%res17 = fcmp oeq <2 x float> %vec1, %vec2
ret void
}
declare i32 @printf(i8* noalias nocapture, ...)
define void @call(i32 %x, i8* %msg ){
entry:
; CHECK: %res1 = call i32 @test(i32 %x)
%res1 = call i32 @test(i32 %x)
; CHECK-NEXT: %res2 = tail call i32 @test(i32 %x)
%res2 = tail call i32 @test(i32 %x)
; CHECK-NEXT: %res3 = call i32 (ptr, ...) @printf(ptr %msg, i32 12, i8 42)
%res3 = call i32 (i8*, ...) @printf(i8* %msg, i32 12, i8 42)
ret void
}
define i32 @test(i32 %x){
entry:
ret i32 %x
}