define i32 @main() #0 !dbg !7 {
entry:
%retval = alloca i32, align 4
- store i32 0, i32* %retval, align 4
+ store i32 0, ptr %retval, align 4
ret i32 1, !dbg !11
}
@var64 = dso_local global i64 0
define dso_local void @loadstore() {
- %val8 = load i8, i8* @var8
- store volatile i8 %val8, i8* @var8
+ %val8 = load i8, ptr @var8
+ store volatile i8 %val8, ptr @var8
- %val16 = load i16, i16* @var16
- store volatile i16 %val16, i16* @var16
+ %val16 = load i16, ptr @var16
+ store volatile i16 %val16, ptr @var16
- %val32 = load i32, i32* @var32
- store volatile i32 %val32, i32* @var32
+ %val32 = load i32, ptr @var32
+ store volatile i32 %val32, ptr @var32
- %val64 = load i64, i64* @var64
- store volatile i64 %val64, i64* @var64
+ %val64 = load i64, ptr @var64
+ store volatile i64 %val64, ptr @var64
ret void
}
-@globaddr = dso_local global i64* null
+@globaddr = dso_local global ptr null
define dso_local void @address() {
- store i64* @var64, i64** @globaddr
+ store ptr @var64, ptr @globaddr
ret void
}
@__ImageBase = external global i8
; AARCH64: .xword "?x@@3HA"@IMGREL
-@"\01?x@@3HA" = global i64 sub nsw (i64 ptrtoint (i64* @"\01?x@@3HA" to i64), i64 ptrtoint (i8* @__ImageBase to i64)), align 8
+@"\01?x@@3HA" = global i64 sub nsw (i64 ptrtoint (ptr @"\01?x@@3HA" to i64), i64 ptrtoint (ptr @__ImageBase to i64)), align 8
declare void @f()
; AARCH64: .xword f@IMGREL
-@fp = global i64 sub nsw (i64 ptrtoint (void ()* @f to i64), i64 ptrtoint (i8* @__ImageBase to i64)), align 8
+@fp = global i64 sub nsw (i64 ptrtoint (ptr @f to i64), i64 ptrtoint (ptr @__ImageBase to i64)), align 8
; RUN: -filetype=obj -o - | llvm-readobj -r - | FileCheck %s
-@llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @f, i8* null }]
+@llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @f, ptr null }]
define void @f() {
ret void
;; Ensure that if a jump table is generated that it has Mapping Symbols
;; marking the data-in-code region.
-define void @foo(i32* %ptr, i32 %b) nounwind ssp {
- %tmp = load i32, i32* %ptr, align 4
+define void @foo(ptr %ptr, i32 %b) nounwind ssp {
+ %tmp = load i32, ptr %ptr, align 4
switch i32 %tmp, label %exit [
i32 0, label %bb0
i32 1, label %bb1
i32 3, label %bb3
]
bb0:
- store i32 %b, i32* %ptr, align 4
+ store i32 %b, ptr %ptr, align 4
br label %exit
bb1:
- store i32 1, i32* %ptr, align 4
+ store i32 1, ptr %ptr, align 4
br label %exit
bb2:
- store i32 2, i32* %ptr, align 4
+ store i32 2, ptr %ptr, align 4
br label %exit
bb3:
- store i32 4, i32* %ptr, align 4
+ store i32 4, ptr %ptr, align 4
br label %exit
exit:
ret void
define i32 @_xbegin() {
entry:
%res = alloca i32, align 4
- %0 = bitcast i32* %res to i8*
- store i32 -1, i32* %res, align 4
- call void asm sideeffect inteldialect ".byte 0xC7\0A\09.byte 0xF8\0A\09.byte 2\0A\09.byte 0\0A\09.byte 0\0A\09.byte 0\0A\09jmp .L__MSASMLABEL_.0__L2\0A\09mov dword ptr $0, eax\0A\09.L__MSASMLABEL_.0__L2:", "=*m,~{dirflag},~{fpsr},~{flags}"(i32* elementtype(i32) nonnull %res)
- %1 = load i32, i32* %res, align 4
- ret i32 %1
+ store i32 -1, ptr %res, align 4
+ call void asm sideeffect inteldialect ".byte 0xC7\0A\09.byte 0xF8\0A\09.byte 2\0A\09.byte 0\0A\09.byte 0\0A\09.byte 0\0A\09jmp .L__MSASMLABEL_.0__L2\0A\09mov dword ptr $0, eax\0A\09.L__MSASMLABEL_.0__L2:", "=*m,~{dirflag},~{fpsr},~{flags}"(ptr elementtype(i32) nonnull %res)
+ %0 = load i32, ptr %res, align 4
+ ret i32 %0
}
; CHECK-NOT: Error parsing inline asm
!0 = !{i32 5, !"CG Profile", !1}
!1 = !{!2, !3, !4, !5}
-!2 = !{void ()* @a, void ()* @b, i64 32}
-!3 = !{void (i1)* @freq, void ()* @a, i64 11}
-!4 = !{void (i1)* @freq, void ()* @b, i64 20}
-!5 = !{void (i1)* @freq, null, i64 20}
+!2 = !{ptr @a, ptr @b, i64 32}
+!3 = !{ptr @freq, ptr @a, i64 11}
+!4 = !{ptr @freq, ptr @b, i64 20}
+!5 = !{ptr @freq, null, i64 20}
; CHECK: .cg_profile a, b, 32
; CHECK: .cg_profile freq, a, 11
ret void
}
-@ptr = constant void ()* @f, section ".CRT$XLB", align 8
+@ptr = constant ptr @f, section ".CRT$XLB", align 8
; CHECK: .section .CRT$XLB,"dr"
-@weak_array = weak_odr unnamed_addr constant [1 x i8*] [i8* bitcast (void ()* @f to i8*)]
+@weak_array = weak_odr unnamed_addr constant [1 x ptr] [ptr @f]
; CHECK: .section .rdata,"dr"
@g2 = constant i32 2;
@g3 = constant i32 3;
@g4 = constant i32 4;
-@__ImageBase = external global i64*;
+@__ImageBase = external global ptr;
;;;; cross-section relative relocations
; CHECK: .quad (g3-t1)+4
-@t1 = global i64 add(i64 sub(i64 ptrtoint(i32* @g3 to i64), i64 ptrtoint(i64* @t1 to i64)), i64 4), section ".fix"
+@t1 = global i64 add(i64 sub(i64 ptrtoint(ptr @g3 to i64), i64 ptrtoint(ptr @t1 to i64)), i64 4), section ".fix"
; CHECK: .quad g3-t2
-@t2 = global i64 sub(i64 ptrtoint(i32* @g3 to i64), i64 ptrtoint(i64* @t2 to i64)), section ".fix"
+@t2 = global i64 sub(i64 ptrtoint(ptr @g3 to i64), i64 ptrtoint(ptr @t2 to i64)), section ".fix"
; CHECK: .quad (g3-t3)-4
-@t3 = global i64 sub(i64 sub(i64 ptrtoint(i32* @g3 to i64), i64 ptrtoint(i64* @t3 to i64)), i64 4), section ".fix"
+@t3 = global i64 sub(i64 sub(i64 ptrtoint(ptr @g3 to i64), i64 ptrtoint(ptr @t3 to i64)), i64 4), section ".fix"
; CHECK: .long g3-t4
-@t4 = global i32 trunc(i64 sub(i64 ptrtoint(i32* @g3 to i64), i64 ptrtoint(i32* @t4 to i64)) to i32), section ".fix"
+@t4 = global i32 trunc(i64 sub(i64 ptrtoint(ptr @g3 to i64), i64 ptrtoint(ptr @t4 to i64)) to i32), section ".fix"
;;;; image base relocation
; CHECK: .long g3@IMGREL{{$}}
-@t5 = global i32 trunc(i64 sub(i64 ptrtoint(i32* @g3 to i64), i64 ptrtoint(i64** @__ImageBase to i64)) to i32), section ".fix"
+@t5 = global i32 trunc(i64 sub(i64 ptrtoint(ptr @g3 to i64), i64 ptrtoint(ptr @__ImageBase to i64)) to i32), section ".fix"
; CHECK: .long g3@IMGREL+4{{$}}
-@t6 = global i32 trunc(i64 sub(i64 ptrtoint(i32* getelementptr (i32, i32* @g3, i32 1) to i64), i64 ptrtoint(i64** @__ImageBase to i64)) to i32), section ".fix"
+@t6 = global i32 trunc(i64 sub(i64 ptrtoint(ptr getelementptr (i32, ptr @g3, i32 1) to i64), i64 ptrtoint(ptr @__ImageBase to i64)) to i32), section ".fix"
;;;; cross-section relative with source offset
@t7 = global %struct.EEType {
[2 x i8] c"\01\02",
i64 256,
- i32 trunc(i64 sub(i64 ptrtoint(i32* @g3 to i64), i64 ptrtoint(i32* getelementptr inbounds (%struct.EEType, %struct.EEType* @t7, i32 0, i32 2) to i64)) to i32 )
+ i32 trunc(i64 sub(i64 ptrtoint(ptr @g3 to i64), i64 ptrtoint(ptr getelementptr inbounds (%struct.EEType, ptr @t7, i32 0, i32 2) to i64)) to i32 )
}, section ".fix"
@.str2 = private unnamed_addr constant [12 x i8] c"destructing\00", align 1
@.str3 = private unnamed_addr constant [5 x i8] c"main\00", align 1
-%ini = type { i32, void()*, i8* }
+%ini = type { i32, ptr, ptr }
@llvm.global_ctors = appending global [3 x %ini ] [
- %ini { i32 65535, void ()* @a_global_ctor, i8* null },
- %ini { i32 65535, void ()* @b_global_ctor, i8* bitcast (i32* @b to i8*) },
- %ini { i32 65535, void ()* @c_global_ctor, i8* bitcast (i32* @c to i8*) }
+ %ini { i32 65535, ptr @a_global_ctor, ptr null },
+ %ini { i32 65535, ptr @b_global_ctor, ptr @b },
+ %ini { i32 65535, ptr @c_global_ctor, ptr @c }
]
-@llvm.global_dtors = appending global [1 x %ini ] [%ini { i32 65535, void ()* @a_global_dtor, i8* null }]
+@llvm.global_dtors = appending global [1 x %ini ] [%ini { i32 65535, ptr @a_global_dtor, ptr null }]
-declare i32 @puts(i8*)
+declare i32 @puts(ptr)
define void @a_global_ctor() nounwind {
- %1 = call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0))
+ %1 = call i32 @puts(ptr @.str)
ret void
}
@c = available_externally dllimport global i32 zeroinitializer
define void @b_global_ctor() nounwind {
- store i32 42, i32* @b
+ store i32 42, ptr @b
ret void
}
define void @c_global_ctor() nounwind {
- store i32 42, i32* @c
+ store i32 42, ptr @c
ret void
}
define void @a_global_dtor() nounwind {
- %1 = call i32 @puts(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str2, i32 0, i32 0))
+ %1 = call i32 @puts(ptr @.str2)
ret void
}
define i32 @main() nounwind {
- %1 = call i32 @puts(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str3, i32 0, i32 0))
+ %1 = call i32 @puts(ptr @.str3)
ret i32 0
}
@__ImageBase = external global i8
; X64: .quad "?x@@3HA"@IMGREL
-@"\01?x@@3HA" = global i64 sub nsw (i64 ptrtoint (i64* @"\01?x@@3HA" to i64), i64 ptrtoint (i8* @__ImageBase to i64)), align 8
+@"\01?x@@3HA" = global i64 sub nsw (i64 ptrtoint (ptr @"\01?x@@3HA" to i64), i64 ptrtoint (ptr @__ImageBase to i64)), align 8
declare void @f()
; X64: .quad f@IMGREL
-@fp = global i64 sub nsw (i64 ptrtoint (void ()* @f to i64), i64 ptrtoint (i8* @__ImageBase to i64)), align 8
+@fp = global i64 sub nsw (i64 ptrtoint (ptr @f to i64), i64 ptrtoint (ptr @__ImageBase to i64)), align 8
@"\01@foo.bar" = global i32 0
define weak i32 @"\01??_B?$num_put@_WV?$back_insert_iterator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@std@@@std@@51"() section ".text" {
- %a = load i32, i32* @"\01??__E_Generic_object@?$_Error_objects@H@std@@YAXXZ"
- %b = load i32, i32* @"\01__ZL16ExceptionHandlerP19_EXCEPTION_POINTERS@4"
- %c = load i32, i32* @"\01@foo.bar"
+ %a = load i32, ptr @"\01??__E_Generic_object@?$_Error_objects@H@std@@YAXXZ"
+ %b = load i32, ptr @"\01__ZL16ExceptionHandlerP19_EXCEPTION_POINTERS@4"
+ %c = load i32, ptr @"\01@foo.bar"
%x = add i32 %a, %b
%y = add i32 %x, %c
ret i32 %y
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32"
target triple = "i386-pc-linux-gnu"
-@g0 = global i8* null, align 4 ; <i8**> [#uses=0]
+@g0 = global ptr null, align 4 ; <ptr> [#uses=0]
; Function Attrs: nounwind
define i32 @foo() #0 !dbg !4 {
entry:
- %call = call i32 bitcast (i32 (...)* @bar to i32 ()*)(), !dbg !12
+ %call = call i32 @bar(), !dbg !12
%add = add nsw i32 %call, 1, !dbg !12
ret i32 %add, !dbg !12
}
!0 = !{i32 5, !"CG Profile", !1}
!1 = !{!2, !3, !4, !5}
-!2 = !{void ()* @a, void ()* @b, i64 32}
-!3 = !{void (i1)* @freq, void ()* @a, i64 11}
-!4 = !{void (i1)* @freq, void ()* @b, i64 20}
-!5 = !{void (i1)* @freq, null, i64 20}
+!2 = !{ptr @a, ptr @b, i64 32}
+!3 = !{ptr @freq, ptr @a, i64 11}
+!4 = !{ptr @freq, ptr @b, i64 20}
+!5 = !{ptr @freq, null, i64 20}
; CHECK: .cg_profile a, b, 32
; CHECK: .cg_profile freq, a, 11
@.c8b = private unnamed_addr constant [1 x i64] [i64 42]
define i32 @main() nounwind {
- %1 = call i32 @puts(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str1, i32 0, i32 0))
- %2 = call i32 @puts(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str2, i32 0, i32 0))
- call void @foo(i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.c8a, i32 0, i32 0))
- call void @foo(i64* getelementptr inbounds ([1 x i64], [1 x i64]* @.c8b, i32 0, i32 0))
+ %1 = call i32 @puts(ptr @.str1)
+ %2 = call i32 @puts(ptr @.str2)
+ call void @foo(ptr @.c8a)
+ call void @foo(ptr @.c8b)
ret i32 0
}
-declare i32 @puts(i8* nocapture) nounwind
-declare void @foo(i64* nocapture) nounwind
+declare i32 @puts(ptr nocapture) nounwind
+declare void @foo(ptr nocapture) nounwind
;;;;;
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"
-@funcs_relro = hidden constant [2 x i32 ()*] [i32 ()* bitcast (i32 (...)* @func1 to i32 ()*), i32 ()* bitcast (i32 (...)* @func2 to i32 ()*)], align 16 #0
+@funcs_relro = hidden constant [2 x ptr] [ptr @func1, ptr @func2], align 16 #0
@var_data = hidden global i32 33, align 4 #0
declare i32 @func1(...)
define hidden i32 @foo(i32 %i) {
entry:
%i.addr = alloca i32, align 4
- store i32 %i, i32* %i.addr, align 4
- %0 = load i32, i32* %i.addr, align 4
+ store i32 %i, ptr %i.addr, align 4
+ %0 = load i32, ptr %i.addr, align 4
%idxprom = sext i32 %0 to i64
- %arrayidx = getelementptr inbounds [2 x i32 ()*], [2 x i32 ()*]* @funcs_relro, i64 0, i64 %idxprom
- %1 = load i32 ()*, i32 ()** %arrayidx, align 8
+ %arrayidx = getelementptr inbounds [2 x ptr], ptr @funcs_relro, i64 0, i64 %idxprom
+ %1 = load ptr, ptr %arrayidx, align 8
%call = call i32 %1()
- %2 = load i32, i32* @var_data, align 4
+ %2 = load i32, ptr @var_data, align 4
%add = add nsw i32 %call, %2
ret i32 %add
}
@.str = private unnamed_addr constant [10 x i8] c"cxfir.log\00", align 1
-declare i32 @printf(i8*, ...) #1
+declare i32 @printf(ptr, ...) #1
; Function Attrs: nounwind
define i32 @main() #0 {
entry:
- %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0))
+ %call = call i32 (ptr, ...) @printf(ptr @.str)
ret i32 0
}
%struct.anon = type { i32, i32 }
@localfoo = global i32 42
-@localgotequiv = private unnamed_addr constant i32* @localfoo
+@localgotequiv = private unnamed_addr constant ptr @localfoo
@extfoo = external global i32
-@extgotequiv = private unnamed_addr constant i32* @extfoo
+@extgotequiv = private unnamed_addr constant ptr @extfoo
; Don't replace GOT equivalent usage within instructions and emit the GOT
; equivalent since it can't be replaced by the GOT entry. @bargotequiv is
; CHECK: l_bargotequiv:
; CHECK-NEXT: .quad _extbar
@extbar = external global i32
-@bargotequiv = private unnamed_addr constant i32* @extbar
+@bargotequiv = private unnamed_addr constant ptr @extbar
@table = global [4 x %struct.data] [
; CHECK-LABEL: _table
; CHECK-NEXT: Ltmp0:
; CHECK-NEXT: .long _localfoo@GOT-Ltmp0
%struct.data { i32 4, %struct.anon { i32 5,
- i32 trunc (i64 sub (i64 ptrtoint (i32** @localgotequiv to i64),
- i64 ptrtoint (i32* getelementptr inbounds ([4 x %struct.data], [4 x %struct.data]* @table, i32 0, i64 1, i32 1, i32 1) to i64))
+ i32 trunc (i64 sub (i64 ptrtoint (ptr @localgotequiv to i64),
+ i64 ptrtoint (ptr getelementptr inbounds ([4 x %struct.data], ptr @table, i32 0, i64 1, i32 1, i32 1) to i64))
to i32)}
},
; CHECK-NEXT: Ltmp1:
; CHECK-NEXT: _extfoo@GOT-Ltmp1
%struct.data { i32 4, %struct.anon { i32 5,
- i32 trunc (i64 sub (i64 ptrtoint (i32** @extgotequiv to i64),
- i64 ptrtoint (i32* getelementptr inbounds ([4 x %struct.data], [4 x %struct.data]* @table, i32 0, i64 2, i32 1, i32 1) to i64))
+ i32 trunc (i64 sub (i64 ptrtoint (ptr @extgotequiv to i64),
+ i64 ptrtoint (ptr getelementptr inbounds ([4 x %struct.data], ptr @table, i32 0, i64 2, i32 1, i32 1) to i64))
to i32)}
},
; Test support for arbitrary constants into the GOTPCREL offset, which is
; CHECK: .long 5
; CHECK-NEXT: .long ((l_extgotequiv-_table)-44)+24
%struct.data { i32 4, %struct.anon { i32 5,
- i32 add (i32 trunc (i64 sub (i64 ptrtoint (i32** @extgotequiv to i64),
- i64 ptrtoint (i32* getelementptr inbounds ([4 x %struct.data], [4 x %struct.data]* @table, i32 0, i64 3, i32 1, i32 1) to i64))
+ i32 add (i32 trunc (i64 sub (i64 ptrtoint (ptr @extgotequiv to i64),
+ i64 ptrtoint (ptr getelementptr inbounds ([4 x %struct.data], ptr @table, i32 0, i64 3, i32 1, i32 1) to i64))
to i32), i32 24)}
}
], align 16
; CHECK-LABEL: _delta
; CHECK: Ltmp2:
; CHECK-NEXT: .long _extfoo@GOT-Ltmp2
-@delta = global i32 trunc (i64 sub (i64 ptrtoint (i32** @extgotequiv to i64),
- i64 ptrtoint (i32* @delta to i64))
+@delta = global i32 trunc (i64 sub (i64 ptrtoint (ptr @extgotequiv to i64),
+ i64 ptrtoint (ptr @delta to i64))
to i32)
; CHECK-LABEL: _deltaplus:
; CHECK: .long (l_localgotequiv-_deltaplus)+55
-@deltaplus = global i32 add (i32 trunc (i64 sub (i64 ptrtoint (i32** @localgotequiv to i64),
- i64 ptrtoint (i32* @deltaplus to i64))
+@deltaplus = global i32 add (i32 trunc (i64 sub (i64 ptrtoint (ptr @localgotequiv to i64),
+ i64 ptrtoint (ptr @deltaplus to i64))
to i32), i32 55)
define i32 @t0(i32 %a) {
- %x = add i32 trunc (i64 sub (i64 ptrtoint (i32** @bargotequiv to i64),
- i64 ptrtoint (i32 (i32)* @t0 to i64))
+ %x = add i32 trunc (i64 sub (i64 ptrtoint (ptr @bargotequiv to i64),
+ i64 ptrtoint (ptr @t0 to i64))
to i32), %a
ret i32 %x
}
; GOT-EQUIV-NOT: _localgotequiv
; GOT-EQUIV-NOT: _extgotequiv
@localfoo = global i32 42
-@localgotequiv = private unnamed_addr constant i32* @localfoo
+@localgotequiv = private unnamed_addr constant ptr @localfoo
@extfoo = external global i32
-@extgotequiv = private unnamed_addr constant i32* @extfoo
+@extgotequiv = private unnamed_addr constant ptr @extfoo
; Don't replace GOT equivalent usage within instructions and emit the GOT
; equivalent since it can't be replaced by the GOT entry. @bargotequiv is
; CHECK: l_bargotequiv:
; CHECK-NEXT: .long _extbar
@extbar = external global i32
-@bargotequiv = private unnamed_addr constant i32* @extbar
+@bargotequiv = private unnamed_addr constant ptr @extbar
@table = global [4 x %struct.data] [
; CHECK-LABEL: _table
; CHECK-NOT: l_localgotequiv-(_table+20)
; CHECK-NEXT: L_localfoo$non_lazy_ptr-(_table+20)
%struct.data { i32 4, %struct.anon { i32 5,
- i32 sub (i32 ptrtoint (i32** @localgotequiv to i32),
- i32 ptrtoint (i32* getelementptr inbounds ([4 x %struct.data], [4 x %struct.data]* @table, i32 0, i32 1, i32 1, i32 1) to i32))}
+ i32 sub (i32 ptrtoint (ptr @localgotequiv to i32),
+ i32 ptrtoint (ptr getelementptr inbounds ([4 x %struct.data], ptr @table, i32 0, i32 1, i32 1, i32 1) to i32))}
},
; CHECK: .long 5
; CHECK-NOT: l_extgotequiv-(_table+32)
; CHECK-NEXT: L_extfoo$non_lazy_ptr-(_table+32)
%struct.data { i32 4, %struct.anon { i32 5,
- i32 sub (i32 ptrtoint (i32** @extgotequiv to i32),
- i32 ptrtoint (i32* getelementptr inbounds ([4 x %struct.data], [4 x %struct.data]* @table, i32 0, i32 2, i32 1, i32 1) to i32))}
+ i32 sub (i32 ptrtoint (ptr @extgotequiv to i32),
+ i32 ptrtoint (ptr getelementptr inbounds ([4 x %struct.data], ptr @table, i32 0, i32 2, i32 1, i32 1) to i32))}
},
; Test support for arbitrary constants into the GOTPCREL offset
; CHECK: .long 5
; CHECK-NOT: (l_extgotequiv-(_table+44))+24
; CHECK-NEXT: L_extfoo$non_lazy_ptr-(_table+20)
%struct.data { i32 4, %struct.anon { i32 5,
- i32 add (i32 sub (i32 ptrtoint (i32** @extgotequiv to i32),
- i32 ptrtoint (i32* getelementptr inbounds ([4 x %struct.data], [4 x %struct.data]* @table, i32 0, i32 3, i32 1, i32 1) to i32)),
+ i32 add (i32 sub (i32 ptrtoint (ptr @extgotequiv to i32),
+ i32 ptrtoint (ptr getelementptr inbounds ([4 x %struct.data], ptr @table, i32 0, i32 3, i32 1, i32 1) to i32)),
i32 24)}
}
], align 16
; Test multiple uses of GOT equivalents.
; CHECK-LABEL: _delta
; CHECK: .long L_extfoo$non_lazy_ptr-_delta
-@delta = global i32 sub (i32 ptrtoint (i32** @extgotequiv to i32),
- i32 ptrtoint (i32* @delta to i32))
+@delta = global i32 sub (i32 ptrtoint (ptr @extgotequiv to i32),
+ i32 ptrtoint (ptr @delta to i32))
; CHECK-LABEL: _deltaplus:
; CHECK: .long L_localfoo$non_lazy_ptr-(_deltaplus-55)
-@deltaplus = global i32 add (i32 sub (i32 ptrtoint (i32** @localgotequiv to i32),
- i32 ptrtoint (i32* @deltaplus to i32)),
+@deltaplus = global i32 add (i32 sub (i32 ptrtoint (ptr @localgotequiv to i32),
+ i32 ptrtoint (ptr @deltaplus to i32)),
i32 55)
define i32 @t0(i32 %a) {
- %x = add i32 sub (i32 ptrtoint (i32** @bargotequiv to i32),
- i32 ptrtoint (i32 (i32)* @t0 to i32)), %a
+ %x = add i32 sub (i32 ptrtoint (ptr @bargotequiv to i32),
+ i32 ptrtoint (ptr @t0 to i32)), %a
ret i32 %x
}
target triple = "thumbv7-apple-ios9.0.0"
@b = external thread_local global i32
-define i32* @func(i32 %a) !dbg !9 {
- ret i32* @b
+define ptr @func(i32 %a) !dbg !9 {
+ ret ptr @b
}
!llvm.dbg.cu = !{!0}
!0 = !{i32 5, !"CG Profile", !1}
!1 = !{!2, !3, !4, !5}
-!2 = !{void ()* @a, void ()* @b, i64 32}
-!3 = !{void (i1)* @freq, void ()* @a, i64 11}
-!4 = !{void (i1)* @freq, void ()* @b, i64 20}
-!5 = !{void (i1)* @freq, null, i64 20}
+!2 = !{ptr @a, ptr @b, i64 32}
+!3 = !{ptr @freq, ptr @a, i64 11}
+!4 = !{ptr @freq, ptr @b, i64 20}
+!5 = !{ptr @freq, null, i64 20}
; CHECK: .cg_profile _a, _b, 32
; CHECK: .cg_profile _freq, _a, 11
; GOT-EQUIV-NOT: _localgotequiv
; GOT-EQUIV-NOT: _extgotequiv
@localfoo = global i32 42
-@localgotequiv = private unnamed_addr constant i32* @localfoo
+@localgotequiv = private unnamed_addr constant ptr @localfoo
@extfoo = external global i32
-@extgotequiv = private unnamed_addr constant i32* @extfoo
+@extgotequiv = private unnamed_addr constant ptr @extfoo
; Don't replace GOT equivalent usage within instructions and emit the GOT
; equivalent since it can't be replaced by the GOT entry. @bargotequiv is
; CHECK: l_bargotequiv:
; CHECK-NEXT: .long _extbar
@extbar = external global i32
-@bargotequiv = private unnamed_addr constant i32* @extbar
+@bargotequiv = private unnamed_addr constant ptr @extbar
@table = global [4 x %struct.data] [
; CHECK-LABEL: _table
; CHECK-NOT: l_localgotequiv-(_table+20)
; CHECK-NEXT: L_localfoo$non_lazy_ptr-(_table+20)
%struct.data { i32 4, %struct.anon { i32 5,
- i32 sub (i32 ptrtoint (i32** @localgotequiv to i32),
- i32 ptrtoint (i32* getelementptr inbounds ([4 x %struct.data], [4 x %struct.data]* @table, i32 0, i32 1, i32 1, i32 1) to i32))}
+ i32 sub (i32 ptrtoint (ptr @localgotequiv to i32),
+ i32 ptrtoint (ptr getelementptr inbounds ([4 x %struct.data], ptr @table, i32 0, i32 1, i32 1, i32 1) to i32))}
},
; CHECK: .long 5
; CHECK-NOT: l_extgotequiv-(_table+32)
; CHECK-NEXT: L_extfoo$non_lazy_ptr-(_table+32)
%struct.data { i32 4, %struct.anon { i32 5,
- i32 sub (i32 ptrtoint (i32** @extgotequiv to i32),
- i32 ptrtoint (i32* getelementptr inbounds ([4 x %struct.data], [4 x %struct.data]* @table, i32 0, i32 2, i32 1, i32 1) to i32))}
+ i32 sub (i32 ptrtoint (ptr @extgotequiv to i32),
+ i32 ptrtoint (ptr getelementptr inbounds ([4 x %struct.data], ptr @table, i32 0, i32 2, i32 1, i32 1) to i32))}
},
; Test support for arbitrary constants into the GOTPCREL offset
; CHECK: .long 5
; CHECK-NOT: (l_extgotequiv-(_table+44))+24
; CHECK-NEXT: L_extfoo$non_lazy_ptr-(_table+20)
%struct.data { i32 4, %struct.anon { i32 5,
- i32 add (i32 sub (i32 ptrtoint (i32** @extgotequiv to i32),
- i32 ptrtoint (i32* getelementptr inbounds ([4 x %struct.data], [4 x %struct.data]* @table, i32 0, i32 3, i32 1, i32 1) to i32)),
+ i32 add (i32 sub (i32 ptrtoint (ptr @extgotequiv to i32),
+ i32 ptrtoint (ptr getelementptr inbounds ([4 x %struct.data], ptr @table, i32 0, i32 3, i32 1, i32 1) to i32)),
i32 24)}
}
], align 16
; Test multiple uses of GOT equivalents.
; CHECK-LABEL: _delta
; CHECK: .long L_extfoo$non_lazy_ptr-_delta
-@delta = global i32 sub (i32 ptrtoint (i32** @extgotequiv to i32),
- i32 ptrtoint (i32* @delta to i32))
+@delta = global i32 sub (i32 ptrtoint (ptr @extgotequiv to i32),
+ i32 ptrtoint (ptr @delta to i32))
; CHECK-LABEL: _deltaplus:
; CHECK: .long L_localfoo$non_lazy_ptr-(_deltaplus-55)
-@deltaplus = global i32 add (i32 sub (i32 ptrtoint (i32** @localgotequiv to i32),
- i32 ptrtoint (i32* @deltaplus to i32)),
+@deltaplus = global i32 add (i32 sub (i32 ptrtoint (ptr @localgotequiv to i32),
+ i32 ptrtoint (ptr @deltaplus to i32)),
i32 55)
define i32 @t0(i32 %a) {
- %x = add i32 sub (i32 ptrtoint (i32** @bargotequiv to i32),
- i32 ptrtoint (i32 (i32)* @t0 to i32)), %a
+ %x = add i32 sub (i32 ptrtoint (ptr @bargotequiv to i32),
+ i32 ptrtoint (ptr @t0 to i32)), %a
ret i32 %x
}
; CHECK-LABEL: _localindirect
; CHECK: .long 65603
@localindirect = internal constant i32 65603
-@got.localindirect = private unnamed_addr constant i32* @localindirect
+@got.localindirect = private unnamed_addr constant ptr @localindirect
; CHECK-LABEL: _localindirectuser:
; CHECK: .long L_localindirect$non_lazy_ptr-_localindirectuser
@localindirectuser = internal constant
- i32 sub (i32 ptrtoint (i32** @got.localindirect to i32),
- i32 ptrtoint (i32* @localindirectuser to i32))
+ i32 sub (i32 ptrtoint (ptr @got.localindirect to i32),
+ i32 ptrtoint (ptr @localindirectuser to i32))
; Test internal indirect local symbols where the user doesn't see the
; definition of the other symbols yet.
; CHECK-LABEL: _undeflocalindirectuser:
; CHECK: .long L_undeflocalindirect$non_lazy_ptr-_undeflocalindirectuser
@undeflocalindirectuser = internal constant
- i32 sub (i32 ptrtoint (i32** @got.undeflocalindirect to i32),
- i32 ptrtoint (i32* @undeflocalindirectuser to i32)),
+ i32 sub (i32 ptrtoint (ptr @got.undeflocalindirect to i32),
+ i32 ptrtoint (ptr @undeflocalindirectuser to i32)),
section "__TEXT,__const"
; CHECK-LABEL: _undeflocalindirect:
; CHECK: .long 65603
@undeflocalindirect = internal constant i32 65603
-@got.undeflocalindirect = private unnamed_addr constant i32* @undeflocalindirect
+@got.undeflocalindirect = private unnamed_addr constant ptr @undeflocalindirect
; CHECK-LABEL: .section __IMPORT,__pointers
; X86-GOT-EQUIV-NOT: L_localgotequiv
; X86-GOT-EQUIV-NOT: l_extgotequiv
@localfoo = global i32 42
-@localgotequiv = private unnamed_addr constant i32* @localfoo
+@localgotequiv = private unnamed_addr constant ptr @localfoo
@extfoo = external global i32
-@extgotequiv = private unnamed_addr constant i32* @extfoo
+@extgotequiv = private unnamed_addr constant ptr @extfoo
; Don't replace GOT equivalent usage within instructions and emit the GOT
; equivalent since it can't be replaced by the GOT entry. @bargotequiv is
; X86: l_bargotequiv:
; X86-NEXT: .quad _extbar
@extbar = external global i32
-@bargotequiv = private unnamed_addr constant i32* @extbar
+@bargotequiv = private unnamed_addr constant ptr @extbar
@table = global [4 x %struct.data] [
%struct.data { i32 1, %struct.anon { i32 2, i32 3 } },
; X86-NOT: .long _localgotequiv-(_table+20)
; X86-NEXT: .long _localfoo@GOTPCREL+4
%struct.data { i32 4, %struct.anon { i32 5,
- i32 trunc (i64 sub (i64 ptrtoint (i32** @localgotequiv to i64),
- i64 ptrtoint (i32* getelementptr inbounds ([4 x %struct.data], [4 x %struct.data]* @table, i32 0, i64 1, i32 1, i32 1) to i64))
+ i32 trunc (i64 sub (i64 ptrtoint (ptr @localgotequiv to i64),
+ i64 ptrtoint (ptr getelementptr inbounds ([4 x %struct.data], ptr @table, i32 0, i64 1, i32 1, i32 1) to i64))
to i32)}
},
; X86: .long 5
; X86-NOT: _extgotequiv-(_table+32)
; X86-NEXT: .long _extfoo@GOTPCREL+4
%struct.data { i32 4, %struct.anon { i32 5,
- i32 trunc (i64 sub (i64 ptrtoint (i32** @extgotequiv to i64),
- i64 ptrtoint (i32* getelementptr inbounds ([4 x %struct.data], [4 x %struct.data]* @table, i32 0, i64 2, i32 1, i32 1) to i64))
+ i32 trunc (i64 sub (i64 ptrtoint (ptr @extgotequiv to i64),
+ i64 ptrtoint (ptr getelementptr inbounds ([4 x %struct.data], ptr @table, i32 0, i64 2, i32 1, i32 1) to i64))
to i32)}
},
; Test support for arbitrary constants into the GOTPCREL offset.
; X86-NOT: _extgotequiv-(_table+44)
; X86-NEXT: .long _extfoo@GOTPCREL+28
%struct.data { i32 4, %struct.anon { i32 5,
- i32 add (i32 trunc (i64 sub (i64 ptrtoint (i32** @extgotequiv to i64),
- i64 ptrtoint (i32* getelementptr inbounds ([4 x %struct.data], [4 x %struct.data]* @table, i32 0, i64 3, i32 1, i32 1) to i64))
+ i32 add (i32 trunc (i64 sub (i64 ptrtoint (ptr @extgotequiv to i64),
+ i64 ptrtoint (ptr getelementptr inbounds ([4 x %struct.data], ptr @table, i32 0, i64 3, i32 1, i32 1) to i64))
to i32), i32 24)}
}
], align 16
; X86-LABEL: _delta
; X86: .long _extfoo@GOTPCREL+4
-@delta = global i32 trunc (i64 sub (i64 ptrtoint (i32** @extgotequiv to i64),
- i64 ptrtoint (i32* @delta to i64))
+@delta = global i32 trunc (i64 sub (i64 ptrtoint (ptr @extgotequiv to i64),
+ i64 ptrtoint (ptr @delta to i64))
to i32)
; X86-LABEL: _deltaplus:
; X86: .long _localfoo@GOTPCREL+59
-@deltaplus = global i32 add (i32 trunc (i64 sub (i64 ptrtoint (i32** @localgotequiv to i64),
- i64 ptrtoint (i32* @deltaplus to i64))
+@deltaplus = global i32 add (i32 trunc (i64 sub (i64 ptrtoint (ptr @localgotequiv to i64),
+ i64 ptrtoint (ptr @deltaplus to i64))
to i32), i32 55)
define i32 @t0(i32 %a) {
- %x = add i32 trunc (i64 sub (i64 ptrtoint (i32** @bargotequiv to i64),
- i64 ptrtoint (i32 (i32)* @t0 to i64))
+ %x = add i32 trunc (i64 sub (i64 ptrtoint (ptr @bargotequiv to i64),
+ i64 ptrtoint (ptr @t0 to i64))
to i32), %a
ret i32 %x
}
; Also test direct instruction uses.
-define i32** @t1() {
- ret i32** @bargotequiv
+define ptr @t1() {
+ ret ptr @bargotequiv
}
; Do not crash when a pattern cannot be matched as a GOT equivalent
define void @foo() {
; X86-NOGOT-EQUIV-LABEL: _foo:
; X86-NOGOT-EQUIV: leaq _b(%rip), %rax
- store i8** @b, i8*** null
+ store ptr @b, ptr null
ret void
}
@a = external global i8
-@b = internal unnamed_addr constant i8* @a
+@b = internal unnamed_addr constant ptr @a
; X86-NOGOT-EQUIV-LABEL: _c:
; X86-NOGOT-EQUIV: .quad _b
-@c = global i8** @b
+@c = global ptr @b
; Generated from this C++ source
; template<class T>
; struct Tls {
-; static __thread void* val;
+; static __thread ptr val;
; };
-; template<class T> __thread void* Tls<T>::val;
+; template<class T> __thread ptr Tls<T>::val;
-; void* f(int x) {
+; ptr f(int x) {
; return Tls<long>::val;
; }
-@_ZN3TlsIlE3valE = weak_odr thread_local global i8* null, align 8
+@_ZN3TlsIlE3valE = weak_odr thread_local global ptr null, align 8
; Function Attrs: nounwind ssp uwtable
-define i8* @_Z1fi(i32 %x) #0 {
+define ptr @_Z1fi(i32 %x) #0 {
entry:
%x.addr = alloca i32, align 4
- store i32 %x, i32* %x.addr, align 4
- %0 = load i8*, i8** @_ZN3TlsIlE3valE, align 8
- ret i8* %0
+ store i32 %x, ptr %x.addr, align 4
+ %0 = load ptr, ptr @_ZN3TlsIlE3valE, align 8
+ ret ptr %0
}
attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
define i32 @main() nounwind {
entry:
- %0 = load i32, i32* @x, align 4
+ %0 = load i32, ptr @x, align 4
%tobool = icmp eq i32 %0, 0
br i1 %tobool, label %if.end, label %foo
if.end: ; preds = %entry
- %puts = tail call i32 @puts(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @str, i32 0, i32 0))
+ %puts = tail call i32 @puts(ptr @str)
br label %foo
foo: ; preds = %entry, %if.end
- %puts2 = tail call i32 @puts(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @str2, i32 0, i32 0))
+ %puts2 = tail call i32 @puts(ptr @str2)
ret i32 0
}
-declare i32 @puts(i8* nocapture) nounwind
+declare i32 @puts(ptr nocapture) nounwind
; CHECK: 0000: 00001C3C 00009C27 21E09903 0000828F
; CHECK-NEXT: 0010: 0E004188 0B004198
- %call = tail call i32 @memcmp(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @string1, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @string2, i32 0, i32 0), i32 4) nounwind readonly
+ %call = tail call i32 @memcmp(ptr @string1, ptr @string2, i32 4) nounwind readonly
%cmp = icmp eq i32 %call, 0
%conv = zext i1 %cmp to i32
ret i32 %conv
}
-declare i32 @memcmp(i8* nocapture, i8* nocapture, i32) nounwind readonly
+declare i32 @memcmp(ptr nocapture, ptr nocapture, i32) nounwind readonly
target triple = "wasm32-unknown-unknown"
-@foo = internal global i8* blockaddress(@bar, %addr), align 4
+@foo = internal global ptr blockaddress(@bar, %addr), align 4
define hidden i32 @bar() #0 {
entry:
target triple = "wasm32-unknown-unknown"
-@g0 = global i8* null, align 4
+@g0 = global ptr null, align 4
@g1 = global i32 0, align 4
%union.u1 = type {}
define hidden i32 @main() local_unnamed_addr #0 {
entry:
- %0 = load i32, i32* getelementptr inbounds ([1024 x i32], [1024 x i32]* @data_symbol, i32 0, i32 10)
+ %0 = load i32, ptr getelementptr inbounds ([1024 x i32], ptr @data_symbol, i32 0, i32 10)
ret i32 %0
}
%struct.s = type { i32, float }
; Function Attrs: noinline nounwind optnone
-define hidden i32 @some_func(i32 %x, %union.u* byval(%union.u) align 4 %some_union, %struct.s* byval(%struct.s) align 4 %some_struct, i32* %a) #0 !dbg !7 {
+define hidden i32 @some_func(i32 %x, ptr byval(%union.u) align 4 %some_union, ptr byval(%struct.s) align 4 %some_struct, ptr %a) #0 !dbg !7 {
entry:
%x.addr = alloca i32, align 4
- %a.addr = alloca i32*, align 4
- store i32 %x, i32* %x.addr, align 4
- call void @llvm.dbg.declare(metadata i32* %x.addr, metadata !23, metadata !DIExpression()), !dbg !24
- call void @llvm.dbg.declare(metadata %union.u* %some_union, metadata !25, metadata !DIExpression()), !dbg !26
- call void @llvm.dbg.declare(metadata %struct.s* %some_struct, metadata !27, metadata !DIExpression()), !dbg !28
- store i32* %a, i32** %a.addr, align 4
- call void @llvm.dbg.declare(metadata i32** %a.addr, metadata !29, metadata !DIExpression()), !dbg !30
- %0 = load i32, i32* %x.addr, align 4, !dbg !31
- %x1 = bitcast %union.u* %some_union to i32*, !dbg !32
- %1 = load i32, i32* %x1, align 4, !dbg !32
+ %a.addr = alloca ptr, align 4
+ store i32 %x, ptr %x.addr, align 4
+ call void @llvm.dbg.declare(metadata ptr %x.addr, metadata !23, metadata !DIExpression()), !dbg !24
+ call void @llvm.dbg.declare(metadata ptr %some_union, metadata !25, metadata !DIExpression()), !dbg !26
+ call void @llvm.dbg.declare(metadata ptr %some_struct, metadata !27, metadata !DIExpression()), !dbg !28
+ store ptr %a, ptr %a.addr, align 4
+ call void @llvm.dbg.declare(metadata ptr %a.addr, metadata !29, metadata !DIExpression()), !dbg !30
+ %0 = load i32, ptr %x.addr, align 4, !dbg !31
+ %1 = load i32, ptr %some_union, align 4, !dbg !32
%add = add nsw i32 %0, %1, !dbg !33
- %x2 = getelementptr inbounds %struct.s, %struct.s* %some_struct, i32 0, i32 0, !dbg !34
- %2 = load i32, i32* %x2, align 4, !dbg !34
+ %2 = load i32, ptr %some_struct, align 4, !dbg !34
%add3 = add nsw i32 %add, %2, !dbg !35
- %3 = load i32*, i32** %a.addr, align 4, !dbg !36
- %arrayidx = getelementptr inbounds i32, i32* %3, i32 0, !dbg !36
- %4 = load i32, i32* %arrayidx, align 4, !dbg !36
+ %3 = load ptr, ptr %a.addr, align 4, !dbg !36
+ %4 = load i32, ptr %3, align 4, !dbg !36
%add4 = add nsw i32 %add3, %4, !dbg !37
ret i32 %add4, !dbg !38
}
source_filename = "test.c"
@myextern = external global i32, align 4
-@foo = hidden global i32* @myextern, align 4, !dbg !0
-@ptr2 = hidden global void ()* @f2, align 4, !dbg !6
+@foo = hidden global ptr @myextern, align 4, !dbg !0
+@ptr2 = hidden global ptr @f2, align 4, !dbg !6
; Function Attrs: noinline nounwind optnone
define hidden void @f2() #0 !dbg !17 {
source_filename = "test.c"
@myextern = external global i32, align 4
-@foo = hidden global i32* @myextern, align 4, !dbg !0
-@ptr2 = hidden global void ()* @f2, align 4, !dbg !6
+@foo = hidden global ptr @myextern, align 4, !dbg !0
+@ptr2 = hidden global ptr @f2, align 4, !dbg !6
; Function Attrs: noinline nounwind optnone
define hidden void @f2() #0 !dbg !17 {
%arg.addr = alloca i32, align 4
%a = alloca i32, align 4
%b = alloca i32, align 4
- store i32 %arg, i32* %arg.addr, align 4
- call void @llvm.dbg.declare(metadata i32* %arg.addr, metadata !11, metadata !DIExpression()), !dbg !12
- call void @llvm.dbg.declare(metadata i32* %a, metadata !13, metadata !DIExpression()), !dbg !14
- store i32 1, i32* %a, align 4, !dbg !14
- call void @llvm.dbg.declare(metadata i32* %b, metadata !15, metadata !DIExpression()), !dbg !17
- store i32 2, i32* %b, align 4, !dbg !17
- %0 = load i32, i32* %b, align 4, !dbg !18
- store i32 %0, i32* %arg.addr, align 4, !dbg !19
- %1 = load i32, i32* %arg.addr, align 4, !dbg !20
- %2 = load i32, i32* %a, align 4, !dbg !21
+ store i32 %arg, ptr %arg.addr, align 4
+ call void @llvm.dbg.declare(metadata ptr %arg.addr, metadata !11, metadata !DIExpression()), !dbg !12
+ call void @llvm.dbg.declare(metadata ptr %a, metadata !13, metadata !DIExpression()), !dbg !14
+ store i32 1, ptr %a, align 4, !dbg !14
+ call void @llvm.dbg.declare(metadata ptr %b, metadata !15, metadata !DIExpression()), !dbg !17
+ store i32 2, ptr %b, align 4, !dbg !17
+ %0 = load i32, ptr %b, align 4, !dbg !18
+ store i32 %0, ptr %arg.addr, align 4, !dbg !19
+ %1 = load i32, ptr %arg.addr, align 4, !dbg !20
+ %2 = load i32, ptr %a, align 4, !dbg !21
%add = add nsw i32 %1, %2, !dbg !22
ret i32 %add, !dbg !23
}
!13 = !{!14, !16}
!14 = !DITemplateTypeParameter(type: !15)
!15 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
-!16 = !DITemplateValueParameter(name: "b", type: !17, value: i8 ()* @_Z1av)
+!16 = !DITemplateValueParameter(name: "b", type: !17, value: ptr @_Z1av)
!17 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !18, size: 32)
!18 = !DISubroutineType(types: !19)
!19 = !{!15}
source_filename = "test.c"
@myextern = external global i32, align 4
-@foo = hidden global i32* @myextern, align 4, !dbg !0
-@ptr2 = hidden global void ()* @f2, align 4, !dbg !6
+@foo = hidden global ptr @myextern, align 4, !dbg !0
+@ptr2 = hidden global ptr @f2, align 4, !dbg !6
; Function Attrs: noinline nounwind optnone
define hidden void @f2() #0 !dbg !17 {
source_filename = "test.c"
@myextern = external global i32, align 4
-@foo = hidden global i32* @myextern, align 4, !dbg !0
-@ptr2 = hidden global void ()* @f2, align 4, !dbg !6
+@foo = hidden global ptr @myextern, align 4, !dbg !0
+@ptr2 = hidden global ptr @f2, align 4, !dbg !6
; Function Attrs: noinline nounwind optnone
define hidden void @f2() #0 !dbg !17 {
; Function Attrs: nounwind
define hidden i32 @d() local_unnamed_addr #0 {
entry:
- %0 = call i32 bitcast (i32 (...)* @g to i32 ()*)() #3
- call void @llvm.memset.p0i8.i32(i8* nonnull align 4 inttoptr (i32 4 to i8*), i8 0, i32 %0, i1 false) ; preds = %for.body.preheader, %entry
+ %0 = call i32 @g() #3
+ call void @llvm.memset.p0.i32(ptr nonnull align 4 inttoptr (i32 4 to ptr), i8 0, i32 %0, i1 false) ; preds = %for.body.preheader, %entry
ret i32 undef
}
declare i32 @g(...) local_unnamed_addr #1
; Function Attrs: argmemonly nofree nounwind willreturn writeonly
-declare void @llvm.memset.p0i8.i32(i8* nocapture writeonly, i8, i32, i1 immarg) #2
+declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1 immarg) #2
attributes #0 = { nounwind "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" }
attributes #1 = { "frame-pointer"="none" "no-prototype" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" }
@myimport = external global i32, align 4
@foo = global i64 7, align 4
-@bar = hidden global i32* @myimport, align 4
+@bar = hidden global ptr @myimport, align 4
; CHECK: - Type: DATA{{$}}
; CHECK-NEXT: Relocations:
; imports and relocations of type R_TABLE_INDEX_I32.
declare void @f0(i32) #0
-@ptr_to_f0 = hidden global void (i32)* @f0, align 4
+@ptr_to_f0 = hidden global ptr @f0, align 4
attributes #0 = { "wasm-import-module"="somewhere" "wasm-import-name"="something" }
declare void @f1(i32) #1
-@ptr_to_f1 = hidden global void (i32)* @f1, align 4
+@ptr_to_f1 = hidden global ptr @f1, align 4
; Check that varargs functions have correctly typed imports
declare i32 @varargs(i32, i32, ...)
; function.
define hidden void @call_indirect() #0 {
entry:
- %adr = alloca i32 ()*, align 4
- store i32 ()* @import3, i32 ()** %adr, align 4
+ %adr = alloca ptr, align 4
+ store ptr @import3, ptr %adr, align 4
ret void
}
target triple = "wasm32-unknown-unknown-wasm"
-@foo = alias i8, bitcast (i8* ()* @func to i8*)
-@bar = alias i8* (), i8* ()* @func
-@bar2 = alias i8* (), i8* ()* @bar
+@foo = alias i8, ptr @func
+@bar = alias ptr (), ptr @func
+@bar2 = alias ptr (), ptr @bar
-define i8* @func() {
- call i8* @bar2();
- ret i8* @foo;
+define ptr @func() {
+ call ptr @bar2();
+ ret ptr @foo;
}
; CHECK: Symbols [
declare void @func2()
declare void @func3()
-@llvm.global_ctors = appending global [2 x { i32, void ()*, i8* }] [
- { i32, void ()*, i8* } { i32 65535, void ()* @func0, i8* null },
- { i32, void ()*, i8* } { i32 42, void ()* @func1, i8* null }
+@llvm.global_ctors = appending global [2 x { i32, ptr, ptr }] [
+ { i32, ptr, ptr } { i32 65535, ptr @func0, ptr null },
+ { i32, ptr, ptr } { i32 42, ptr @func1, ptr null }
]
-@llvm.global_dtors = appending global [2 x { i32, void ()*, i8* }] [
- { i32, void ()*, i8* } { i32 65535, void ()* @func2, i8* null },
- { i32, void ()*, i8* } { i32 42, void ()* @func3, i8* null }
+@llvm.global_dtors = appending global [2 x { i32, ptr, ptr }] [
+ { i32, ptr, ptr } { i32 65535, ptr @func2, ptr null },
+ { i32, ptr, ptr } { i32 42, ptr @func3, ptr null }
]
; CHECK: - Type: IMPORT
target triple = "wasm32-unknown-unknown"
-define hidden void @call_memcpy(i8* align 4 %a, i8* align 4 %b) {
+define hidden void @call_memcpy(ptr align 4 %a, ptr align 4 %b) {
entry:
- tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 4 %a, i8* align 4 %b, i32 512, i1 false)
+ tail call void @llvm.memcpy.p0.p0.i32(ptr align 4 %a, ptr align 4 %b, i32 512, i1 false)
ret void
}
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1)
+declare void @llvm.memcpy.p0.p0.i32(ptr nocapture writeonly, ptr nocapture readonly, i32, i1)
; CHECK: --- !WASM
; CHECK-NEXT: FileHeader:
target triple = "wasm32-unknown-unknown"
-@llvm.used = appending global [1 x i8*] [i8* bitcast (i32 ()* @foo to i8*)], section "llvm.metadata"
+@llvm.used = appending global [1 x ptr] [ptr @foo], section "llvm.metadata"
define i32 @foo() {
entry:
; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 41002802FFFFFFFF0F0B
define i32 @load_i32_from_negative_address() {
- %t = load i32, i32* inttoptr (i32 -1 to i32*)
+ %t = load i32, ptr inttoptr (i32 -1 to ptr)
ret i32 %t
}
; CHECK-NEXT: Locals:
; CHECK-NEXT: Body: 41002802030B
define i32 @load_i32_from_wrapped_address() {
- %t = load i32, i32* inttoptr (i32 4294967299 to i32*)
+ %t = load i32, ptr inttoptr (i32 4294967299 to ptr)
ret i32 %t
}
@foo = external global i32, align 4
@bar = global i64 7, align 4
-@a = global i32* getelementptr (i32, i32* @foo, i32 2), align 8
-@b = global i64* getelementptr (i64, i64* @bar, i64 -2), align 8
-@c = global [3 x i32*] [i32* @foo, i32* @foo, i32* @foo], align 16
+@a = global ptr getelementptr (i32, ptr @foo, i32 2), align 8
+@b = global ptr getelementptr (i64, ptr @bar, i64 -2), align 8
+@c = global [3 x ptr] [ptr @foo, ptr @foo, ptr @foo], align 16
; CHECK: Format: WASM
; CHECK: Relocations [
; @foo - @bar
@foo = external global i32, align 4
@bar = constant i32 sub (
- i32 ptrtoint (i32* @foo to i32),
- i32 ptrtoint (i32* @bar to i32)
+ i32 ptrtoint (ptr @foo to i32),
+ i32 ptrtoint (ptr @bar to i32)
), section ".sec1"
; @foo - @addend + 4
@fizz = constant i32 42, align 4, section ".sec2"
@addend = constant i32 sub (
- i32 ptrtoint (i32* @foo to i32),
- i32 ptrtoint (i32* @fizz to i32)
+ i32 ptrtoint (ptr @foo to i32),
+ i32 ptrtoint (ptr @fizz to i32)
), section ".sec2"
@x_sec = constant i32 sub (
- i32 ptrtoint (i32* @fizz to i32),
- i32 ptrtoint (i32* @x_sec to i32)
+ i32 ptrtoint (ptr @fizz to i32),
+ i32 ptrtoint (ptr @x_sec to i32)
), section ".sec1"
target triple = "wasm32-unknown-unknown"
-declare void @llvm.wasm.throw(i32, i8*)
+declare void @llvm.wasm.throw(i32, ptr)
define i32 @dummy0() {
entry:
ret i32 0
}
-define i32 @test_throw(i8* %p) {
- call void @llvm.wasm.throw(i32 0, i8* %p)
+define i32 @test_throw(ptr %p) {
+ call void @llvm.wasm.throw(i32 0, ptr %p)
ret i32 0
}
target triple = "wasm32-unknown-unknown"
-declare void @llvm.wasm.throw(i32, i8*)
+declare void @llvm.wasm.throw(i32, ptr)
-define i32 @test_throw0(i8* %p) {
- call void @llvm.wasm.throw(i32 0, i8* %p)
+define i32 @test_throw0(ptr %p) {
+ call void @llvm.wasm.throw(i32 0, ptr %p)
ret i32 0
}
-define i32 @test_throw1(i8* %p) {
- call void @llvm.wasm.throw(i32 0, i8* %p)
+define i32 @test_throw1(ptr %p) {
+ call void @llvm.wasm.throw(i32 0, ptr %p)
ret i32 1
}
@.str1 = private unnamed_addr constant [6 x i8] c"hello\00", align 1
@.str2 = private unnamed_addr constant [6 x i8] c"world\00", align 1
-@a = global i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str1, i32 0, i32 0), align 8
-@b = global i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str2, i32 0, i32 0), align 8
+@a = global ptr @.str1, align 8
+@b = global ptr @.str2, align 8
; CHECK: - Type: DATA{{$}}
; CHECK: mov rdx, offset X
; CHECK: mov qword ptr [PX], rdx
-@PZ = common dso_local global i8* null, align 8
+@PZ = common dso_local global ptr null, align 8
@Z = common dso_local global [4 x i8] zeroinitializer, align 1
@X = common dso_local global [4 x i8] zeroinitializer, align 1
-@PX = common dso_local global i8* null, align 8
+@PX = common dso_local global ptr null, align 8
@Y = common dso_local global [4 x i8] zeroinitializer, align 1
-@PY = common dso_local global i8* null, align 8
+@PY = common dso_local global ptr null, align 8
-define dso_local i8* @test057(i64 %x) {
+define dso_local ptr @test057(i64 %x) {
entry:
%x.addr = alloca i64, align 8
- store i64 %x, i64* %x.addr, align 8
- %0 = call i8* asm "movq $1, %rax;movq %rax, $0;pushq $$Y;popq %rcx;movq %rcx, PY;movq $$X, %rdx;movq %rdx, PX;", "=r,im,~{rax},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @Z, i32 0, i32 0))
- store i8* %0, i8** @PZ, align 8
- %1 = load i8*, i8** @PZ, align 8
- ret i8* %1
+ store i64 %x, ptr %x.addr, align 8
+ %0 = call ptr asm "movq $1, %rax;movq %rax, $0;pushq $$Y;popq %rcx;movq %rcx, PY;movq $$X, %rdx;movq %rdx, PX;", "=r,im,~{rax},~{rcx},~{rdx},~{dirflag},~{fpsr},~{flags}"(ptr @Z)
+ store ptr %0, ptr @PZ, align 8
+ %1 = load ptr, ptr @PZ, align 8
+ ret ptr %1
}