diff --git a/llvm/test/ThinLTO/X86/Inputs/alias_resolution.ll b/llvm/test/ThinLTO/X86/Inputs/alias_resolution.ll index 7425f23fd3f51..d8807a9300cb7 100644 --- a/llvm/test/ThinLTO/X86/Inputs/alias_resolution.ll +++ b/llvm/test/ThinLTO/X86/Inputs/alias_resolution.ll @@ -1,60 +1,60 @@ target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" -@globalfuncAlias = alias void (...), bitcast (void ()* @globalfunc to void (...)*) -@globalfuncWeakAlias = weak alias void (...), bitcast (void ()* @globalfunc to void (...)*) -@globalfuncLinkonceAlias = linkonce alias void (...), bitcast (void ()* @globalfunc to void (...)*) -@globalfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @globalfunc to void (...)*) -@globalfuncLinkonceODRAlias = linkonce_odr alias void (...), bitcast (void ()* @globalfunc to void (...)*) +@globalfuncAlias = alias void (...), ptr @globalfunc +@globalfuncWeakAlias = weak alias void (...), ptr @globalfunc +@globalfuncLinkonceAlias = linkonce alias void (...), ptr @globalfunc +@globalfuncWeakODRAlias = weak_odr alias void (...), ptr @globalfunc +@globalfuncLinkonceODRAlias = linkonce_odr alias void (...), ptr @globalfunc define void @globalfunc() { entry: ret void } -@internalfuncAlias = alias void (...), bitcast (void ()* @internalfunc to void (...)*) -@internalfuncWeakAlias = weak alias void (...), bitcast (void ()* @internalfunc to void (...)*) -@internalfuncLinkonceAlias = linkonce alias void (...), bitcast (void ()* @internalfunc to void (...)*) -@internalfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @internalfunc to void (...)*) -@internalfuncLinkonceODRAlias = linkonce_odr alias void (...), bitcast (void ()* @internalfunc to void (...)*) +@internalfuncAlias = alias void (...), ptr @internalfunc +@internalfuncWeakAlias = weak alias void (...), ptr @internalfunc +@internalfuncLinkonceAlias = linkonce alias void (...), ptr @internalfunc +@internalfuncWeakODRAlias = weak_odr alias void (...), ptr @internalfunc +@internalfuncLinkonceODRAlias = linkonce_odr alias void (...), ptr @internalfunc define internal void @internalfunc() { entry: ret void } -@linkonceODRfuncAlias = alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*) -@linkonceODRfuncWeakAlias = weak alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*) -@linkonceODRfuncLinkonceAlias = linkonce alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*) -@linkonceODRfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*) -@linkonceODRfuncLinkonceODRAlias = linkonce_odr alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*) +@linkonceODRfuncAlias = alias void (...), ptr @linkonceODRfunc +@linkonceODRfuncWeakAlias = weak alias void (...), ptr @linkonceODRfunc +@linkonceODRfuncLinkonceAlias = linkonce alias void (...), ptr @linkonceODRfunc +@linkonceODRfuncWeakODRAlias = weak_odr alias void (...), ptr @linkonceODRfunc +@linkonceODRfuncLinkonceODRAlias = linkonce_odr alias void (...), ptr @linkonceODRfunc define linkonce_odr void @linkonceODRfunc() { entry: ret void } -@weakODRfuncAlias = alias void (...), bitcast (void ()* @weakODRfunc to void (...)*) -@weakODRfuncWeakAlias = weak alias void (...), bitcast (void ()* @weakODRfunc to void (...)*) -@weakODRfuncLinkonceAlias = linkonce alias void (...), bitcast (void ()* @weakODRfunc to void (...)*) -@weakODRfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @weakODRfunc to void (...)*) -@weakODRfuncLinkonceODRAlias = linkonce_odr alias void (...), bitcast (void ()* @weakODRfunc to void (...)*) +@weakODRfuncAlias = alias void (...), ptr @weakODRfunc +@weakODRfuncWeakAlias = weak alias void (...), ptr @weakODRfunc +@weakODRfuncLinkonceAlias = linkonce alias void (...), ptr @weakODRfunc +@weakODRfuncWeakODRAlias = weak_odr alias void (...), ptr @weakODRfunc +@weakODRfuncLinkonceODRAlias = linkonce_odr alias void (...), ptr @weakODRfunc define weak_odr void @weakODRfunc() { entry: ret void } -@linkoncefuncAlias = alias void (...), bitcast (void ()* @linkoncefunc to void (...)*) -@linkoncefuncWeakAlias = weak alias void (...), bitcast (void ()* @linkoncefunc to void (...)*) -@linkoncefuncLinkonceAlias = linkonce alias void (...), bitcast (void ()* @linkoncefunc to void (...)*) -@linkoncefuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @linkoncefunc to void (...)*) -@linkoncefuncLinkonceODRAlias = linkonce_odr alias void (...), bitcast (void ()* @linkoncefunc to void (...)*) +@linkoncefuncAlias = alias void (...), ptr @linkoncefunc +@linkoncefuncWeakAlias = weak alias void (...), ptr @linkoncefunc +@linkoncefuncLinkonceAlias = linkonce alias void (...), ptr @linkoncefunc +@linkoncefuncWeakODRAlias = weak_odr alias void (...), ptr @linkoncefunc +@linkoncefuncLinkonceODRAlias = linkonce_odr alias void (...), ptr @linkoncefunc define linkonce void @linkoncefunc() { entry: ret void } -@weakfuncAlias = alias void (...), bitcast (void ()* @weakfunc to void (...)*) -@weakfuncWeakAlias = weak alias void (...), bitcast (void ()* @weakfunc to void (...)*) -@weakfuncLinkonceAlias = linkonce alias void (...), bitcast (void ()* @weakfunc to void (...)*) -@weakfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @weakfunc to void (...)*) -@weakfuncLinkonceODRAlias = linkonce_odr alias void (...), bitcast (void ()* @weakfunc to void (...)*) +@weakfuncAlias = alias void (...), ptr @weakfunc +@weakfuncWeakAlias = weak alias void (...), ptr @weakfunc +@weakfuncLinkonceAlias = linkonce alias void (...), ptr @weakfunc +@weakfuncWeakODRAlias = weak_odr alias void (...), ptr @weakfunc +@weakfuncLinkonceODRAlias = linkonce_odr alias void (...), ptr @weakfunc define weak void @weakfunc() { entry: ret void diff --git a/llvm/test/ThinLTO/X86/Inputs/distributed_import.ll b/llvm/test/ThinLTO/X86/Inputs/distributed_import.ll index d7d9bb6789af2..c3fd358f87de3 100644 --- a/llvm/test/ThinLTO/X86/Inputs/distributed_import.ll +++ b/llvm/test/ThinLTO/X86/Inputs/distributed_import.ll @@ -4,11 +4,11 @@ target triple = "x86_64-unknown-linux-gnu" @G = internal global i32 7 define i32 @g() { entry: - %0 = load i32, i32* @G + %0 = load i32, ptr @G ret i32 %0 } -@analias = alias void (...), bitcast (void ()* @aliasee to void (...)*) +@analias = alias void (...), ptr @aliasee define void @aliasee() { entry: ret void diff --git a/llvm/test/ThinLTO/X86/Inputs/distributed_indexes.ll b/llvm/test/ThinLTO/X86/Inputs/distributed_indexes.ll index 65c3bb6116465..37b55839c12ce 100644 --- a/llvm/test/ThinLTO/X86/Inputs/distributed_indexes.ll +++ b/llvm/test/ThinLTO/X86/Inputs/distributed_indexes.ll @@ -5,7 +5,7 @@ entry: ret void } -@analias = alias void (...), bitcast (void ()* @aliasee to void (...)*) +@analias = alias void (...), ptr @aliasee define void @aliasee() { entry: ret void diff --git a/llvm/test/ThinLTO/X86/Inputs/import_opaque_type.ll b/llvm/test/ThinLTO/X86/Inputs/import_opaque_type.ll index 5c452d58e8c0b..ecdaa727fb0df 100644 --- a/llvm/test/ThinLTO/X86/Inputs/import_opaque_type.ll +++ b/llvm/test/ThinLTO/X86/Inputs/import_opaque_type.ll @@ -1,15 +1,13 @@ target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-apple-macosx10.11.0" -%0 = type { i8 } +%a = type { i8 } -%a = type { %0 * } - -define void @bar(%a *) { +define void @bar(%a) { ret void } define void @baz() { - call void @bar(%a *null) + call void @bar(%a undef) ret void } diff --git a/llvm/test/ThinLTO/X86/alias_resolution.ll b/llvm/test/ThinLTO/X86/alias_resolution.ll index 4649a88991864..4bd6ede357dfd 100644 --- a/llvm/test/ThinLTO/X86/alias_resolution.ll +++ b/llvm/test/ThinLTO/X86/alias_resolution.ll @@ -6,80 +6,80 @@ ; There is no importing going on with this IR, but let's check the ODR resolution for compile time -; NOTPROMOTED: @linkonceODRfuncAlias = alias void (...), bitcast (void ()* @linkonceODRfunc{{.*}} to void (...)*) -; NOTPROMOTED: @linkonceODRfuncWeakAlias = weak alias void (...), bitcast (void ()* @linkonceODRfunc{{.*}} to void (...)*) -; PROMOTE_MOD1: @linkonceODRfuncLinkonceAlias = weak alias void (...), bitcast (void ()* @linkonceODRfunc{{.*}} to void (...)*) -; PROMOTE_MOD2: @linkonceODRfuncLinkonceAlias = linkonce alias void (...), bitcast (void ()* @linkonceODRfunc{{.*}} to void (...)*) -; PROMOTE_MOD1: @linkonceODRfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @linkonceODRfunc.mod1 to void (...)*) -; PROMOTE_MOD2: @linkonceODRfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*) -; PROMOTE_MOD1: @linkonceODRfuncLinkonceODRAlias = weak_odr alias void (...), bitcast (void ()* @linkonceODRfunc.mod1 to void (...)*) -; PROMOTE_MOD2: @linkonceODRfuncLinkonceODRAlias = linkonce_odr alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*) +; NOTPROMOTED: @linkonceODRfuncAlias = alias void (...), ptr @linkonceODRfunc{{.*}} +; NOTPROMOTED: @linkonceODRfuncWeakAlias = weak alias void (...), ptr @linkonceODRfunc{{.*}} +; PROMOTE_MOD1: @linkonceODRfuncLinkonceAlias = weak alias void (...), ptr @linkonceODRfunc{{.*}} +; PROMOTE_MOD2: @linkonceODRfuncLinkonceAlias = linkonce alias void (...), ptr @linkonceODRfunc{{.*}} +; PROMOTE_MOD1: @linkonceODRfuncWeakODRAlias = weak_odr alias void (...), ptr @linkonceODRfunc.mod1 +; PROMOTE_MOD2: @linkonceODRfuncWeakODRAlias = weak_odr alias void (...), ptr @linkonceODRfunc +; PROMOTE_MOD1: @linkonceODRfuncLinkonceODRAlias = weak_odr alias void (...), ptr @linkonceODRfunc.mod1 +; PROMOTE_MOD2: @linkonceODRfuncLinkonceODRAlias = linkonce_odr alias void (...), ptr @linkonceODRfunc -; NOTPROMOTED: @weakODRfuncAlias = alias void (...), bitcast (void ()* @weakODRfunc{{.*}} to void (...)*) -; NOTPROMOTED: @weakODRfuncWeakAlias = weak alias void (...), bitcast (void ()* @weakODRfunc{{.*}} to void (...)*) -; PROMOTE_MOD1: @weakODRfuncLinkonceAlias = weak alias void (...), bitcast (void ()* @weakODRfunc{{.*}} to void (...)*) -; PROMOTE_MOD2: @weakODRfuncLinkonceAlias = linkonce alias void (...), bitcast (void ()* @weakODRfunc{{.*}} to void (...)*) -; PROMOTE_MOD1: @weakODRfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @weakODRfunc.mod1 to void (...)*) -; PROMOTE_MOD2: @weakODRfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @weakODRfunc to void (...)*) -; PROMOTE_MOD1: @weakODRfuncLinkonceODRAlias = weak_odr alias void (...), bitcast (void ()* @weakODRfunc.mod1 to void (...)*) -; PROMOTE_MOD2: @weakODRfuncLinkonceODRAlias = linkonce_odr alias void (...), bitcast (void ()* @weakODRfunc to void (...)*) +; NOTPROMOTED: @weakODRfuncAlias = alias void (...), ptr @weakODRfunc{{.*}} +; NOTPROMOTED: @weakODRfuncWeakAlias = weak alias void (...), ptr @weakODRfunc{{.*}} +; PROMOTE_MOD1: @weakODRfuncLinkonceAlias = weak alias void (...), ptr @weakODRfunc{{.*}} +; PROMOTE_MOD2: @weakODRfuncLinkonceAlias = linkonce alias void (...), ptr @weakODRfunc{{.*}} +; PROMOTE_MOD1: @weakODRfuncWeakODRAlias = weak_odr alias void (...), ptr @weakODRfunc.mod1 +; PROMOTE_MOD2: @weakODRfuncWeakODRAlias = weak_odr alias void (...), ptr @weakODRfunc +; PROMOTE_MOD1: @weakODRfuncLinkonceODRAlias = weak_odr alias void (...), ptr @weakODRfunc.mod1 +; PROMOTE_MOD2: @weakODRfuncLinkonceODRAlias = linkonce_odr alias void (...), ptr @weakODRfunc -; NOTPROMOTED: @linkoncefuncAlias = alias void (...), bitcast (void ()* @linkoncefunc{{.*}} to void (...)*) -; NOTPROMOTED: @linkoncefuncWeakAlias = weak alias void (...), bitcast (void ()* @linkoncefunc{{.*}} to void (...)*) -; PROMOTE_MOD1: @linkoncefuncLinkonceAlias = weak alias void (...), bitcast (void ()* @linkoncefunc{{.*}} to void (...)*) -; PROMOTE_MOD2: @linkoncefuncLinkonceAlias = linkonce alias void (...), bitcast (void ()* @linkoncefunc{{.*}} to void (...)*) -; PROMOTE_MOD1: @linkoncefuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @linkoncefunc.mod1 to void (...)*) -; PROMOTE_MOD2: @linkoncefuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @linkoncefunc to void (...)*) -; PROMOTE_MOD1: @linkoncefuncLinkonceODRAlias = weak_odr alias void (...), bitcast (void ()* @linkoncefunc.mod1 to void (...)*) -; PROMOTE_MOD2: @linkoncefuncLinkonceODRAlias = linkonce_odr alias void (...), bitcast (void ()* @linkoncefunc to void (...)*) +; NOTPROMOTED: @linkoncefuncAlias = alias void (...), ptr @linkoncefunc{{.*}} +; NOTPROMOTED: @linkoncefuncWeakAlias = weak alias void (...), ptr @linkoncefunc{{.*}} +; PROMOTE_MOD1: @linkoncefuncLinkonceAlias = weak alias void (...), ptr @linkoncefunc{{.*}} +; PROMOTE_MOD2: @linkoncefuncLinkonceAlias = linkonce alias void (...), ptr @linkoncefunc{{.*}} +; PROMOTE_MOD1: @linkoncefuncWeakODRAlias = weak_odr alias void (...), ptr @linkoncefunc.mod1 +; PROMOTE_MOD2: @linkoncefuncWeakODRAlias = weak_odr alias void (...), ptr @linkoncefunc +; PROMOTE_MOD1: @linkoncefuncLinkonceODRAlias = weak_odr alias void (...), ptr @linkoncefunc.mod1 +; PROMOTE_MOD2: @linkoncefuncLinkonceODRAlias = linkonce_odr alias void (...), ptr @linkoncefunc -; NOTPROMOTED: @weakfuncAlias = alias void (...), bitcast (void ()* @weakfunc{{.*}} to void (...)*) -; NOTPROMOTED: @weakfuncWeakAlias = weak alias void (...), bitcast (void ()* @weakfunc{{.*}} to void (...)*) -; PROMOTE_MOD1: @weakfuncLinkonceAlias = weak alias void (...), bitcast (void ()* @weakfunc{{.*}} to void (...)*) -; PROMOTE_MOD2: @weakfuncLinkonceAlias = linkonce alias void (...), bitcast (void ()* @weakfunc{{.*}} to void (...)*) +; NOTPROMOTED: @weakfuncAlias = alias void (...), ptr @weakfunc{{.*}} +; NOTPROMOTED: @weakfuncWeakAlias = weak alias void (...), ptr @weakfunc{{.*}} +; PROMOTE_MOD1: @weakfuncLinkonceAlias = weak alias void (...), ptr @weakfunc{{.*}} +; PROMOTE_MOD2: @weakfuncLinkonceAlias = linkonce alias void (...), ptr @weakfunc{{.*}} ; FIXME: The "resolution" should turn one of these to linkonce_odr -; PROMOTE_MOD1: @weakfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @weakfunc.mod1 to void (...)*) -; PROMOTE_MOD2: @weakfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @weakfunc to void (...)*) -; PROMOTE_MOD1: @weakfuncLinkonceODRAlias = weak_odr alias void (...), bitcast (void ()* @weakfunc.mod1 to void (...)*) -; PROMOTE_MOD2: @weakfuncLinkonceODRAlias = linkonce_odr alias void (...), bitcast (void ()* @weakfunc to void (...)*) +; PROMOTE_MOD1: @weakfuncWeakODRAlias = weak_odr alias void (...), ptr @weakfunc.mod1 +; PROMOTE_MOD2: @weakfuncWeakODRAlias = weak_odr alias void (...), ptr @weakfunc +; PROMOTE_MOD1: @weakfuncLinkonceODRAlias = weak_odr alias void (...), ptr @weakfunc.mod1 +; PROMOTE_MOD2: @weakfuncLinkonceODRAlias = linkonce_odr alias void (...), ptr @weakfunc target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" -@linkonceODRfuncAlias = alias void (...), bitcast (void ()* @linkonceODRfunc.mod1 to void (...)*) -@linkonceODRfuncWeakAlias = weak alias void (...), bitcast (void ()* @linkonceODRfunc.mod1 to void (...)*) -@linkonceODRfuncLinkonceAlias = linkonce alias void (...), bitcast (void ()* @linkonceODRfunc.mod1 to void (...)*) -@linkonceODRfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @linkonceODRfunc.mod1 to void (...)*) -@linkonceODRfuncLinkonceODRAlias = linkonce_odr alias void (...), bitcast (void ()* @linkonceODRfunc.mod1 to void (...)*) +@linkonceODRfuncAlias = alias void (...), ptr @linkonceODRfunc.mod1 +@linkonceODRfuncWeakAlias = weak alias void (...), ptr @linkonceODRfunc.mod1 +@linkonceODRfuncLinkonceAlias = linkonce alias void (...), ptr @linkonceODRfunc.mod1 +@linkonceODRfuncWeakODRAlias = weak_odr alias void (...), ptr @linkonceODRfunc.mod1 +@linkonceODRfuncLinkonceODRAlias = linkonce_odr alias void (...), ptr @linkonceODRfunc.mod1 define linkonce_odr void @linkonceODRfunc.mod1() { entry: ret void } -@weakODRfuncAlias = alias void (...), bitcast (void ()* @weakODRfunc.mod1 to void (...)*) -@weakODRfuncWeakAlias = weak alias void (...), bitcast (void ()* @weakODRfunc.mod1 to void (...)*) -@weakODRfuncLinkonceAlias = linkonce alias void (...), bitcast (void ()* @weakODRfunc.mod1 to void (...)*) -@weakODRfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @weakODRfunc.mod1 to void (...)*) -@weakODRfuncLinkonceODRAlias = linkonce_odr alias void (...), bitcast (void ()* @weakODRfunc.mod1 to void (...)*) +@weakODRfuncAlias = alias void (...), ptr @weakODRfunc.mod1 +@weakODRfuncWeakAlias = weak alias void (...), ptr @weakODRfunc.mod1 +@weakODRfuncLinkonceAlias = linkonce alias void (...), ptr @weakODRfunc.mod1 +@weakODRfuncWeakODRAlias = weak_odr alias void (...), ptr @weakODRfunc.mod1 +@weakODRfuncLinkonceODRAlias = linkonce_odr alias void (...), ptr @weakODRfunc.mod1 define weak_odr void @weakODRfunc.mod1() { entry: ret void } -@linkoncefuncAlias = alias void (...), bitcast (void ()* @linkoncefunc.mod1 to void (...)*) -@linkoncefuncWeakAlias = weak alias void (...), bitcast (void ()* @linkoncefunc.mod1 to void (...)*) -@linkoncefuncLinkonceAlias = linkonce alias void (...), bitcast (void ()* @linkoncefunc.mod1 to void (...)*) -@linkoncefuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @linkoncefunc.mod1 to void (...)*) -@linkoncefuncLinkonceODRAlias = linkonce_odr alias void (...), bitcast (void ()* @linkoncefunc.mod1 to void (...)*) +@linkoncefuncAlias = alias void (...), ptr @linkoncefunc.mod1 +@linkoncefuncWeakAlias = weak alias void (...), ptr @linkoncefunc.mod1 +@linkoncefuncLinkonceAlias = linkonce alias void (...), ptr @linkoncefunc.mod1 +@linkoncefuncWeakODRAlias = weak_odr alias void (...), ptr @linkoncefunc.mod1 +@linkoncefuncLinkonceODRAlias = linkonce_odr alias void (...), ptr @linkoncefunc.mod1 define linkonce void @linkoncefunc.mod1() { entry: ret void } -@weakfuncAlias = alias void (...), bitcast (void ()* @weakfunc.mod1 to void (...)*) -@weakfuncWeakAlias = weak alias void (...), bitcast (void ()* @weakfunc.mod1 to void (...)*) -@weakfuncLinkonceAlias = linkonce alias void (...), bitcast (void ()* @weakfunc.mod1 to void (...)*) -@weakfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @weakfunc.mod1 to void (...)*) -@weakfuncLinkonceODRAlias = linkonce_odr alias void (...), bitcast (void ()* @weakfunc.mod1 to void (...)*) +@weakfuncAlias = alias void (...), ptr @weakfunc.mod1 +@weakfuncWeakAlias = weak alias void (...), ptr @weakfunc.mod1 +@weakfuncLinkonceAlias = linkonce alias void (...), ptr @weakfunc.mod1 +@weakfuncWeakODRAlias = weak_odr alias void (...), ptr @weakfunc.mod1 +@weakfuncLinkonceODRAlias = linkonce_odr alias void (...), ptr @weakfunc.mod1 define weak void @weakfunc.mod1() { entry: ret void diff --git a/llvm/test/ThinLTO/X86/cache-icall.ll b/llvm/test/ThinLTO/X86/cache-icall.ll index e3a3c66c1ee05..994d922ec5038 100644 --- a/llvm/test/ThinLTO/X86/cache-icall.ll +++ b/llvm/test/ThinLTO/X86/cache-icall.ll @@ -32,11 +32,10 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" -define i8* @_start(void ()* %p) !type !0 { +define ptr @_start(ptr %p) !type !0 { entry: - %0 = bitcast void ()* %p to i8* - %1 = tail call i1 @llvm.type.test(i8* %0, metadata !"_ZTSFvvE") - br i1 %1, label %cont, label %trap + %0 = tail call i1 @llvm.type.test(ptr %p, metadata !"_ZTSFvvE") + br i1 %0, label %cont, label %trap trap: ; preds = %entry tail call void @llvm.trap() @@ -44,10 +43,10 @@ trap: ; preds = %entry cont: ; preds = %entry tail call void %p() - ret i8* bitcast (void ()* @f to i8*) + ret ptr @f } -declare i1 @llvm.type.test(i8*, metadata) +declare i1 @llvm.type.test(ptr, metadata) declare void @llvm.trap() declare !type !1 void @f() diff --git a/llvm/test/ThinLTO/X86/cfi-devirt.ll b/llvm/test/ThinLTO/X86/cfi-devirt.ll index 78fad2f15ad0e..7df936c02a341 100644 --- a/llvm/test/ThinLTO/X86/cfi-devirt.ll +++ b/llvm/test/ThinLTO/X86/cfi-devirt.ll @@ -48,46 +48,43 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-grtev4-linux-gnu" -%struct.A = type { i32 (...)** } +%struct.A = type { ptr } %struct.B = type { %struct.A } %struct.C = type { %struct.A } -@_ZTV1B = constant { [4 x i8*] } { [4 x i8*] [i8* null, i8* undef, i8* bitcast (i32 (%struct.B*, i32)* @_ZN1B1fEi to i8*), i8* bitcast (i32 (%struct.A*, i32)* @_ZN1A1nEi to i8*)] }, !type !0, !type !1 -@_ZTV1C = constant { [4 x i8*] } { [4 x i8*] [i8* null, i8* undef, i8* bitcast (i32 (%struct.C*, i32)* @_ZN1C1fEi to i8*), i8* bitcast (i32 (%struct.A*, i32)* @_ZN1A1nEi to i8*)] }, !type !0, !type !2 +@_ZTV1B = constant { [4 x ptr] } { [4 x ptr] [ptr null, ptr undef, ptr @_ZN1B1fEi, ptr @_ZN1A1nEi] }, !type !0, !type !1 +@_ZTV1C = constant { [4 x ptr] } { [4 x ptr] [ptr null, ptr undef, ptr @_ZN1C1fEi, ptr @_ZN1A1nEi] }, !type !0, !type !2 ; Put declaration first to test handling of remarks when the first ; function has no basic blocks. declare void @empty() ; CHECK-IR-LABEL: define i32 @test -define i32 @test(%struct.A* %obj, i32 %a) { +define i32 @test(ptr %obj, i32 %a) { entry: - %0 = bitcast %struct.A* %obj to i8** - %vtable5 = load i8*, i8** %0 + %vtable5 = load ptr, ptr %obj - %1 = tail call { i8*, i1 } @llvm.type.checked.load(i8* %vtable5, i32 8, metadata !"_ZTS1A") - %2 = extractvalue { i8*, i1 } %1, 1 - br i1 %2, label %cont, label %trap + %0 = tail call { ptr, i1 } @llvm.type.checked.load(ptr %vtable5, i32 8, metadata !"_ZTS1A") + %1 = extractvalue { ptr, i1 } %0, 1 + br i1 %1, label %cont, label %trap trap: tail call void @llvm.trap() unreachable cont: - %3 = extractvalue { i8*, i1 } %1, 0 - %4 = bitcast i8* %3 to i32 (%struct.A*, i32)* + %2 = extractvalue { ptr, i1 } %0, 0 ; Check that the call was devirtualized. ; CHECK-IR: %call = tail call i32 @_ZN1A1nEi - %call = tail call i32 %4(%struct.A* nonnull %obj, i32 %a) - %vtable16 = load i8*, i8** %0 - %5 = tail call { i8*, i1 } @llvm.type.checked.load(i8* %vtable16, i32 0, metadata !"_ZTS1A") - %6 = extractvalue { i8*, i1 } %5, 1 - br i1 %6, label %cont2, label %trap + %call = tail call i32 %2(ptr nonnull %obj, i32 %a) + %vtable16 = load ptr, ptr %obj + %3 = tail call { ptr, i1 } @llvm.type.checked.load(ptr %vtable16, i32 0, metadata !"_ZTS1A") + %4 = extractvalue { ptr, i1 } %3, 1 + br i1 %4, label %cont2, label %trap cont2: - %7 = extractvalue { i8*, i1 } %5, 0 - %8 = bitcast i8* %7 to i32 (%struct.A*, i32)* + %5 = extractvalue { ptr, i1 } %3, 0 ; Check that traps are conditional. Invalid TYPE_ID can cause ; unconditional traps. @@ -95,18 +92,18 @@ cont2: ; We still have to call it as virtual. ; CHECK-IR: %call3 = tail call i32 %5 - %call3 = tail call i32 %8(%struct.A* nonnull %obj, i32 %call) + %call3 = tail call i32 %5(ptr nonnull %obj, i32 %call) ret i32 %call3 } ; CHECK-IR-LABEL: ret i32 ; CHECK-IR-LABEL: } -declare { i8*, i1 } @llvm.type.checked.load(i8*, i32, metadata) +declare { ptr, i1 } @llvm.type.checked.load(ptr, i32, metadata) declare void @llvm.trap() -declare i32 @_ZN1B1fEi(%struct.B* %this, i32 %a) -declare i32 @_ZN1A1nEi(%struct.A* %this, i32 %a) -declare i32 @_ZN1C1fEi(%struct.C* %this, i32 %a) +declare i32 @_ZN1B1fEi(ptr %this, i32 %a) +declare i32 @_ZN1A1nEi(ptr %this, i32 %a) +declare i32 @_ZN1C1fEi(ptr %this, i32 %a) !0 = !{i64 16, !"_ZTS1A"} !1 = !{i64 16, !"_ZTS1B"} diff --git a/llvm/test/ThinLTO/X86/devirt_promote_legacy.ll b/llvm/test/ThinLTO/X86/devirt_promote_legacy.ll index 7216911a6bc66..9d7a40204ba82 100644 --- a/llvm/test/ThinLTO/X86/devirt_promote_legacy.ll +++ b/llvm/test/ThinLTO/X86/devirt_promote_legacy.ll @@ -25,23 +25,20 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-grtev4-linux-gnu" -%struct.A = type { i32 (...)** } +%struct.A = type { ptr } ; CHECK-IR1-LABEL: define i32 @test -define i32 @test(%struct.A* %obj, i32 %a) { +define i32 @test(ptr %obj, i32 %a) { entry: - %0 = bitcast %struct.A* %obj to i8*** - %vtable = load i8**, i8*** %0 - %1 = bitcast i8** %vtable to i8* - %p = call i1 @llvm.type.test(i8* %1, metadata !"_ZTS1A") + %vtable = load ptr, ptr %obj + %p = call i1 @llvm.type.test(ptr %vtable, metadata !"_ZTS1A") call void @llvm.assume(i1 %p) - %fptrptr = getelementptr i8*, i8** %vtable, i32 1 - %2 = bitcast i8** %fptrptr to i32 (%struct.A*, i32)** - %fptr1 = load i32 (%struct.A*, i32)*, i32 (%struct.A*, i32)** %2, align 8 + %fptrptr = getelementptr ptr, ptr %vtable, i32 1 + %fptr1 = load ptr, ptr %fptrptr, align 8 ; Check that the call was devirtualized. - ; CHECK-IR1: = tail call i32 bitcast (void ()* @_ZN1A1nEi - %call = tail call i32 %fptr1(%struct.A* nonnull %obj, i32 %a) + ; CHECK-IR1: = tail call i32 @_ZN1A1nEi + %call = tail call i32 %fptr1(ptr nonnull %obj, i32 %a) ret i32 %call } @@ -52,7 +49,7 @@ entry: ; Check that the call was devirtualized. ; CHECK-IR2: = tail call i32 @_ZN1A1nEi -declare i1 @llvm.type.test(i8*, metadata) +declare i1 @llvm.type.test(ptr, metadata) declare void @llvm.assume(i1) attributes #0 = { noinline optnone } diff --git a/llvm/test/ThinLTO/X86/empty-module.ll b/llvm/test/ThinLTO/X86/empty-module.ll index 04bc0d5942e1a..4fff063ec3c9b 100644 --- a/llvm/test/ThinLTO/X86/empty-module.ll +++ b/llvm/test/ThinLTO/X86/empty-module.ll @@ -10,9 +10,9 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" -@foo = ifunc i32 (i32), i32 (i32)* ()* @foo_ifunc +@foo = ifunc i32 (i32), ptr @foo_ifunc -define internal i32 (i32)* @foo_ifunc() { +define internal ptr @foo_ifunc() { entry: - ret i32 (i32)* null + ret ptr null } diff --git a/llvm/test/ThinLTO/X86/funcimport.ll b/llvm/test/ThinLTO/X86/funcimport.ll index cb75d55edf583..63a83b6a33b93 100644 --- a/llvm/test/ThinLTO/X86/funcimport.ll +++ b/llvm/test/ThinLTO/X86/funcimport.ll @@ -12,7 +12,7 @@ ; EXPORTSTATIC-DAG: @staticvar.llvm.0 = hidden global ; Eventually @staticconstvar can be exported as a copy and not promoted ; EXPORTSTATIC-DAG: @staticconstvar.llvm.0 = hidden unnamed_addr constant -; EXPORTSTATIC-DAG: @P.llvm.0 = hidden global void ()* null +; EXPORTSTATIC-DAG: @P.llvm.0 = hidden global ptr null ; EXPORTSTATIC-DAG: define hidden i32 @staticfunc.llvm.0 ; EXPORTSTATIC-DAG: define hidden void @staticfunc2.llvm.0 @@ -55,11 +55,11 @@ target triple = "x86_64-apple-macosx10.11.0" @staticvar2 = internal global i32 1, align 4 @staticconstvar = internal unnamed_addr constant [2 x i32] [i32 10, i32 20], align 4 @commonvar = common global i32 0, align 4 -@P = internal global void ()* null, align 8 +@P = internal global ptr null, align 8 -@weakalias = weak alias void (...), bitcast (void ()* @globalfunc1 to void (...)*) -@analias = alias void (...), bitcast (void ()* @globalfunc2 to void (...)*) -@linkoncealias = alias void (...), bitcast (void ()* @linkoncefunc to void (...)*) +@weakalias = weak alias void (...), ptr @globalfunc1 +@analias = alias void (...), ptr @globalfunc2 +@linkoncealias = alias void (...), ptr @linkoncefunc define void @globalfunc1() #0 { entry: @@ -79,14 +79,14 @@ entry: define i32 @referencestatics(i32 %i) #0 { entry: %i.addr = alloca i32, align 4 - store i32 %i, i32* %i.addr, align 4 + store i32 %i, ptr %i.addr, align 4 %call = call i32 @staticfunc() - %0 = load i32, i32* @staticvar, align 4 + %0 = load i32, ptr @staticvar, align 4 %add = add nsw i32 %call, %0 - %1 = load i32, i32* %i.addr, align 4 + %1 = load i32, ptr %i.addr, align 4 %idxprom = sext i32 %1 to i64 - %arrayidx = getelementptr inbounds [2 x i32], [2 x i32]* @staticconstvar, i64 0, i64 %idxprom - %2 = load i32, i32* %arrayidx, align 4 + %arrayidx = getelementptr inbounds [2 x i32], ptr @staticconstvar, i64 0, i64 %idxprom + %2 = load i32, ptr %arrayidx, align 4 %add1 = add nsw i32 %add, %2 ret i32 %add1 } @@ -94,29 +94,29 @@ entry: define i32 @referenceglobals(i32 %i) #0 { entry: %i.addr = alloca i32, align 4 - store i32 %i, i32* %i.addr, align 4 + store i32 %i, ptr %i.addr, align 4 call void @globalfunc1() - %0 = load i32, i32* @globalvar, align 4 + %0 = load i32, ptr @globalvar, align 4 ret i32 %0 } define i32 @referencecommon(i32 %i) #0 { entry: %i.addr = alloca i32, align 4 - store i32 %i, i32* %i.addr, align 4 - %0 = load i32, i32* @commonvar, align 4 + store i32 %i, ptr %i.addr, align 4 + %0 = load i32, ptr @commonvar, align 4 ret i32 %0 } define void @setfuncptr() #0 { entry: - store void ()* @staticfunc2, void ()** @P, align 8 + store ptr @staticfunc2, ptr @P, align 8 ret void } define void @callfuncptr() #0 { entry: - %0 = load void ()*, void ()** @P, align 8 + %0 = load ptr, ptr @P, align 8 call void %0() ret void } @@ -140,6 +140,6 @@ entry: define internal void @staticfunc2() #0 { entry: - %0 = load i32, i32* @staticvar2, align 4 + %0 = load i32, ptr @staticvar2, align 4 ret void } diff --git a/llvm/test/ThinLTO/X86/import_opaque_type.ll b/llvm/test/ThinLTO/X86/import_opaque_type.ll index 0a49116a62a2e..ecb7b927bd8b6 100644 --- a/llvm/test/ThinLTO/X86/import_opaque_type.ll +++ b/llvm/test/ThinLTO/X86/import_opaque_type.ll @@ -10,18 +10,16 @@ target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-apple-macosx10.11.0" -; CHECK: %0 = type { i8 } -%0 = type opaque - -%a = type { %0 * } +; CHECK: %a = type { i8 } +%a = type opaque declare void @baz() -define void @foo(%a *) { +define void @foo(%a) { call void @baz() ret void } define i32 @main() { - call void @foo(%a *null) + call void @foo(%a undef) ret i32 0 } diff --git a/llvm/test/ThinLTO/X86/type_test_noindircall.ll b/llvm/test/ThinLTO/X86/type_test_noindircall.ll index 2e2f9f8565968..2d0faaa256023 100644 --- a/llvm/test/ThinLTO/X86/type_test_noindircall.ll +++ b/llvm/test/ThinLTO/X86/type_test_noindircall.ll @@ -23,31 +23,29 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-grtev4-linux-gnu" -%"class.llvm::vfs::File" = type { i32 (...)** } +%"class.llvm::vfs::File" = type { ptr } %"class.llvm::vfs::Status" = type <{ %"class.std::__cxx11::basic_string", %"class.llvm::sys::fs::UniqueID", %"struct.std::chrono::time_point", i32, i32, i64, i32, i32, i8, [7 x i8] }> %"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string, std::allocator >::_Alloc_hider", i64, %union.anon } -%"struct.std::__cxx11::basic_string, std::allocator >::_Alloc_hider" = type { i8* } +%"struct.std::__cxx11::basic_string, std::allocator >::_Alloc_hider" = type { ptr } %union.anon = type { i64, [8 x i8] } %"class.llvm::sys::fs::UniqueID" = type { i64, i64 } %"struct.std::chrono::time_point" = type { %"struct.std::chrono::duration" } %"struct.std::chrono::duration" = type { i64 } %"class.(anonymous namespace)::RealFile" = type { %"class.llvm::vfs::File", i32, [4 x i8], %"class.llvm::vfs::Status", %"class.std::__cxx11::basic_string" } -@_ZTVN12_GLOBAL__N_18RealFileE = unnamed_addr constant { [3 x i8*] } { [3 x i8*] [i8* null, i8* null, i8* bitcast (void (%"class.(anonymous namespace)::RealFile"*)* @_ZN12_GLOBAL__N_18RealFileD2Ev to i8*)] }, align 8, !type !74 +@_ZTVN12_GLOBAL__N_18RealFileE = unnamed_addr constant { [3 x ptr] } { [3 x ptr] [ptr null, ptr null, ptr @_ZN12_GLOBAL__N_18RealFileD2Ev] }, align 8, !type !74 -define internal void @_ZN12_GLOBAL__N_18RealFileD2Ev(%"class.(anonymous namespace)::RealFile"* %this) unnamed_addr #0 align 2 { +define internal void @_ZN12_GLOBAL__N_18RealFileD2Ev(ptr %this) unnamed_addr #0 align 2 { entry: -; CHECK-IR: %0 = getelementptr - %0 = getelementptr %"class.(anonymous namespace)::RealFile", %"class.(anonymous namespace)::RealFile"* %this, i64 0, i32 0, i32 0 -; CHECK-IR-NEXT: store - store i32 (...)** bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN12_GLOBAL__N_18RealFileE, i64 0, inrange i32 0, i64 2) to i32 (...)**), i32 (...)*** %0, align 8 - %1 = tail call i1 @llvm.type.test(i8* bitcast (i8** getelementptr inbounds ({ [3 x i8*] }, { [3 x i8*] }* @_ZTVN12_GLOBAL__N_18RealFileE, i64 0, inrange i32 0, i64 2) to i8*), metadata !"4$09c6cc733fc6accb91e5d7b87cb48f2d") - tail call void @llvm.assume(i1 %1) +; CHECK-IR: store + store ptr getelementptr inbounds ({ [3 x ptr] }, ptr @_ZTVN12_GLOBAL__N_18RealFileE, i64 0, inrange i32 0, i64 2), ptr %this, align 8 + %0 = tail call i1 @llvm.type.test(ptr getelementptr inbounds ({ [3 x ptr] }, ptr @_ZTVN12_GLOBAL__N_18RealFileE, i64 0, inrange i32 0, i64 2), metadata !"4$09c6cc733fc6accb91e5d7b87cb48f2d") + tail call void @llvm.assume(i1 %0) ; CHECK-IR-NEXT: ret void ret void } -declare i1 @llvm.type.test(i8*, metadata) +declare i1 @llvm.type.test(ptr, metadata) declare void @llvm.assume(i1) ; Make sure we don't inline or otherwise optimize out the direct calls.