diff --git a/lld/test/ELF/lto/discard-value-names.ll b/lld/test/ELF/lto/discard-value-names.ll --- a/lld/test/ELF/lto/discard-value-names.ll +++ b/lld/test/ELF/lto/discard-value-names.ll @@ -7,7 +7,7 @@ ; CHECK: @GlobalValueName ; CHECK: @foo(i32 %in) ; CHECK: somelabel: -; CHECK: %GV = load i32, i32* @GlobalValueName +; CHECK: %GV = load i32, ptr @GlobalValueName ; CHECK: %add = add i32 %in, %GV ; CHECK: ret i32 %add diff --git a/lld/test/ELF/lto/ltopasses-basic.ll b/lld/test/ELF/lto/ltopasses-basic.ll --- a/lld/test/ELF/lto/ltopasses-basic.ll +++ b/lld/test/ELF/lto/ltopasses-basic.ll @@ -12,6 +12,6 @@ } ; `@ctor` doesn't do anything and so the optimizer should kill it, leaving no ctors -; CHECK: @llvm.global_ctors = appending global [0 x { i32, void ()*, i8* }] zeroinitializer +; CHECK: @llvm.global_ctors = appending global [0 x { i32, ptr, ptr }] zeroinitializer ; MLLVM: Pass Arguments: diff --git a/lld/test/ELF/lto/type-merge.ll b/lld/test/ELF/lto/type-merge.ll --- a/lld/test/ELF/lto/type-merge.ll +++ b/lld/test/ELF/lto/type-merge.ll @@ -14,13 +14,13 @@ declare void @bar(i8*) ; CHECK: define void @foo() { -; CHECK-NEXT: call void @bar(i8* null) +; CHECK-NEXT: call void @bar(ptr null) ; CHECK-NEXT: ret void ; CHECK-NEXT: } -; CHECK: declare void @bar(i8*) +; CHECK: declare void @bar(ptr) ; CHECK: define void @zed() { -; CHECK-NEXT: call void bitcast (void (i8*)* @bar to void ()*)() +; CHECK-NEXT: call void @bar() ; CHECK-NEXT: ret void ; CHECK-NEXT: } diff --git a/lld/test/ELF/lto/type-merge2.ll b/lld/test/ELF/lto/type-merge2.ll --- a/lld/test/ELF/lto/type-merge2.ll +++ b/lld/test/ELF/lto/type-merge2.ll @@ -14,15 +14,12 @@ } declare void @bar(%zed*) -; CHECK: %zed = type { i8 } -; CHECK-NEXT: %zed.0 = type { i16 } - ; CHECK: define void @foo() { -; CHECK-NEXT: call void bitcast (void (%zed.0*)* @bar to void (%zed*)*)(%zed* null) +; CHECK-NEXT: call void @bar(ptr null) ; CHECK-NEXT: ret void ; CHECK-NEXT: } -; CHECK: define void @bar(%zed.0* %this) { -; CHECK-NEXT: store %zed.0* %this, %zed.0** null +; CHECK: define void @bar(ptr %this) { +; CHECK-NEXT: store ptr %this, ptr null ; CHECK-NEXT: ret void ; CHECK-NEXT: } diff --git a/llvm/include/llvm/LTO/Config.h b/llvm/include/llvm/LTO/Config.h --- a/llvm/include/llvm/LTO/Config.h +++ b/llvm/include/llvm/LTO/Config.h @@ -288,6 +288,12 @@ enableDebugTypeODRUniquing(); setDiagnosticHandler( std::make_unique(&DiagHandler), true); + // Don't leave the decision to use opaque pointers to the BitcodeReader + // as we may be mixing bitcode using opaque and typed pointers and we can + // only upgrade typed pointers to opaque pointers. + if (!hasSetOpaquePointersValue()) { + setOpaquePointers(true); + } } DiagnosticHandlerFunction DiagHandler; }; diff --git a/llvm/test/Analysis/StackSafetyAnalysis/ipa-alias.ll b/llvm/test/Analysis/StackSafetyAnalysis/ipa-alias.ll --- a/llvm/test/Analysis/StackSafetyAnalysis/ipa-alias.ll +++ b/llvm/test/Analysis/StackSafetyAnalysis/ipa-alias.ll @@ -33,7 +33,7 @@ ; RUN: -r %t.summ1.bc,PreemptableAliasWrite1,px \ ; RUN: -r %t.summ1.bc,Write1,px -; RUN: llvm-lto2 run %t.summ0.bc %t.summ1.bc -o %t.lto -stack-safety-print -stack-safety-run -save-temps -thinlto-threads 1 -O0 \ +; RUN: llvm-lto2 run -opaque-pointers=0 %t.summ0.bc %t.summ1.bc -o %t.lto -stack-safety-print -stack-safety-run -save-temps -thinlto-threads 1 -O0 \ ; RUN: $(cat %t.res.txt) \ ; RUN: 2>&1 | FileCheck %s --check-prefixes=CHECK,GLOBAL,LTO diff --git a/llvm/test/Analysis/StackSafetyAnalysis/ipa.ll b/llvm/test/Analysis/StackSafetyAnalysis/ipa.ll --- a/llvm/test/Analysis/StackSafetyAnalysis/ipa.ll +++ b/llvm/test/Analysis/StackSafetyAnalysis/ipa.ll @@ -83,7 +83,7 @@ ; RUN: -r %t.summ1.bc,Write8,px \ ; RUN: -r %t.summ1.bc,WriteAndReturn8,px -; RUN: llvm-lto2 run %t.summ0.bc %t.summ1.bc -o %t.lto -stack-safety-print -stack-safety-run -save-temps -thinlto-threads 1 -O0 \ +; RUN: llvm-lto2 run -opaque-pointers=0 %t.summ0.bc %t.summ1.bc -o %t.lto -stack-safety-print -stack-safety-run -save-temps -thinlto-threads 1 -O0 \ ; RUN: $(cat %t.res.txt) \ ; RUN: 2>&1 | FileCheck %s --check-prefixes=CHECK,GLOBAL,LTO diff --git a/llvm/test/LTO/Resolution/X86/alias-alias.ll b/llvm/test/LTO/Resolution/X86/alias-alias.ll --- a/llvm/test/LTO/Resolution/X86/alias-alias.ll +++ b/llvm/test/LTO/Resolution/X86/alias-alias.ll @@ -6,10 +6,10 @@ ; CHECK-NOT: alias ; CHECK: @c = global i32 1 -; CHECK-NEXT: @d = global i32* @a +; CHECK-NEXT: @d = global ptr @a ; CHECK-EMPTY: -; CHECK-NEXT: @a = weak alias i32, i32* @b -; CHECK-NEXT: @b = internal alias i32, i32* @c +; CHECK-NEXT: @a = weak alias i32, ptr @b +; CHECK-NEXT: @b = internal alias i32, ptr @c ; RES: 1.o{{$}} ; RES-NEXT: {{^}}-r={{.*}}1.o,c,p{{$}} diff --git a/llvm/test/LTO/Resolution/X86/comdat.ll b/llvm/test/LTO/Resolution/X86/comdat.ll --- a/llvm/test/LTO/Resolution/X86/comdat.ll +++ b/llvm/test/LTO/Resolution/X86/comdat.ll @@ -50,36 +50,36 @@ ; CHECK-DAG: @v1 = weak_odr global i32 42, comdat($c1) -; CHECK-DAG: @r11 = global i32* @v1{{$}} -; CHECK-DAG: @r12 = global i32 (i8*)* @f1{{$}} +; CHECK-DAG: @r11 = global ptr @v1{{$}} +; CHECK-DAG: @r12 = global ptr @f1{{$}} -; CHECK-DAG: @r21 = global i32* @v1{{$}} -; CHECK-DAG: @r22 = global i32 (i8*)* @f1{{$}} +; CHECK-DAG: @r21 = global ptr @v1{{$}} +; CHECK-DAG: @r22 = global ptr @f1{{$}} ; CHECK-DAG: @v1.1 = internal global i32 41, comdat($c2) -; CHECK-DAG: @a11 = alias i32, i32* @v1{{$}} -; CHECK-DAG: @a12 = alias i16, bitcast (i32* @v1 to i16*) +; CHECK-DAG: @a11 = alias i32, ptr @v1{{$}} +; CHECK-DAG: @a12 = alias i16, ptr @v1{{$}} -; CHECK-DAG: @a13 = alias i32 (i8*), i32 (i8*)* @f1{{$}} -; CHECK-DAG: @a14 = alias i16, bitcast (i32 (i8*)* @f1 to i16*) +; CHECK-DAG: @a13 = alias i32 (ptr), ptr @f1{{$}} +; CHECK-DAG: @a14 = alias i16, ptr @f1{{$}} -; CHECK-DAG: @a21 = alias i32, i32* @v1.1{{$}} -; CHECK-DAG: @a22 = alias i16, bitcast (i32* @v1.1 to i16*) +; CHECK-DAG: @a21 = alias i32, ptr @v1.1{{$}} +; CHECK-DAG: @a22 = alias i16, ptr @v1.1{{$}} -; CHECK-DAG: @a23 = alias i32 (i8*), i32 (i8*)* @f1.2{{$}} -; CHECK-DAG: @a24 = alias i16, bitcast (i32 (i8*)* @f1.2 to i16*) +; CHECK-DAG: @a23 = alias i32 (ptr), ptr @f1.2{{$}} +; CHECK-DAG: @a24 = alias i16, ptr @f1.2{{$}} -; CHECK: define weak_odr dso_local i32 @f1(i8* %0) comdat($c1) { +; CHECK: define weak_odr dso_local i32 @f1(ptr %0) comdat($c1) { ; CHECK-NEXT: bb10: ; CHECK-NEXT: br label %bb11{{$}} ; CHECK: bb11: ; CHECK-NEXT: ret i32 42 ; CHECK-NEXT: } -; CHECK: define internal i32 @f1.2(i8* %this) comdat($c2) { +; CHECK: define internal i32 @f1.2(ptr %this) comdat($c2) { ; CHECK-NEXT: bb20: -; CHECK-NEXT: store i8* %this, i8** null +; CHECK-NEXT: store ptr %this, ptr null ; CHECK-NEXT: br label %bb21 ; CHECK: bb21: ; CHECK-NEXT: ret i32 41 diff --git a/llvm/test/LTO/Resolution/X86/ifunc2.ll b/llvm/test/LTO/Resolution/X86/ifunc2.ll --- a/llvm/test/LTO/Resolution/X86/ifunc2.ll +++ b/llvm/test/LTO/Resolution/X86/ifunc2.ll @@ -6,14 +6,14 @@ target datalayout = "e-p:64:64" target triple = "x86_64-unknown-linux-gnu" -; CHECK: @foo = ifunc i32 (), i32 ()* ()* @foo_resolver.2 +; CHECK: @foo = ifunc i32 (), ptr @foo_resolver.2 @foo = ifunc i32 (), i32 ()* ()* @foo_resolver -; CHECK: define internal i32 ()* @foo_resolver.2() { -; CHECK-NEXT: ret i32 ()* inttoptr (i32 1 to i32 ()*) +; CHECK: define internal ptr @foo_resolver.2() { +; CHECK-NEXT: ret ptr inttoptr (i32 1 to ptr) define weak i32 ()* @foo_resolver() { ret i32 ()* inttoptr (i32 1 to i32 ()*) } -; CHECK: define i32 ()* @foo_resolver() { -; CHECK-NEXT: ret i32 ()* inttoptr (i32 2 to i32 ()*) +; CHECK: define ptr @foo_resolver() { +; CHECK-NEXT: ret ptr inttoptr (i32 2 to ptr) diff --git a/llvm/test/LTO/Resolution/X86/local-def-dllimport.ll b/llvm/test/LTO/Resolution/X86/local-def-dllimport.ll --- a/llvm/test/LTO/Resolution/X86/local-def-dllimport.ll +++ b/llvm/test/LTO/Resolution/X86/local-def-dllimport.ll @@ -13,7 +13,7 @@ $g = comdat any @g = global i8 42, comdat, !type !0 -; CHECK: define available_externally dllimport i8* @f() +; CHECK: define available_externally dllimport ptr @f() define available_externally dllimport i8* @f() { ret i8* @g } diff --git a/llvm/test/LTO/X86/Inputs/opaque-pointers.ll b/llvm/test/LTO/X86/Inputs/opaque-pointers.ll new file mode 100644 --- /dev/null +++ b/llvm/test/LTO/X86/Inputs/opaque-pointers.ll @@ -0,0 +1,7 @@ +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +define i64 @foo(ptr %p) { + %t = load i64, ptr %p + ret i64 %t +} diff --git a/llvm/test/LTO/X86/cfi_jt_aliases.ll b/llvm/test/LTO/X86/cfi_jt_aliases.ll --- a/llvm/test/LTO/X86/cfi_jt_aliases.ll +++ b/llvm/test/LTO/X86/cfi_jt_aliases.ll @@ -46,7 +46,7 @@ ; CHECK-THIN-OD: jmp {{.*}}