[RelLookupTableConverter] Drop unnamed_addr to avoid generating GOTPC… · llvm/llvm-project@e0586e2 (original) (raw)

``

1

`+

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 5

`

``

2

`+

; REQUIRES: x86-registered-target

`

``

3

`+

; REQUIRES: aarch64-registered-target

`

``

4

`+

; RUN: opt < %s -passes=rel-lookup-table-converter -relocation-model=pic -mtriple=x86_64-apple-darwin -S | FileCheck -check-prefix=x86_64-apple-darwin %s

`

``

5

`+

; RUN: opt < %s -passes=rel-lookup-table-converter -relocation-model=pic -mtriple=aarch64 -S | FileCheck -check-prefix=aarch64 %s

`

``

6

`+

; RUN: opt < %s -passes=rel-lookup-table-converter -relocation-model=pic -mtriple=x86_64 -S | FileCheck -check-prefix=x86_64 %s

`

``

7

+

``

8

`+

@a0 = private unnamed_addr constant i32 0

`

``

9

`+

@a1 = private unnamed_addr constant i32 1

`

``

10

`+

@a2 = private unnamed_addr constant i32 2

`

``

11

`+

@load_relative_1.table = private unnamed_addr constant [3 x ptr] [ptr @a0, ptr @a1, ptr @a2]

`

``

12

+

``

13

`+

@x0 = internal unnamed_addr constant i64 0

`

``

14

`+

@x1 = internal unnamed_addr constant i64 1

`

``

15

`+

@x2 = internal unnamed_addr constant i64 2

`

``

16

`+

@x3 = internal unnamed_addr constant i64 3

`

``

17

`+

@y0 = internal unnamed_addr constant ptr @x3

`

``

18

`+

@y1 = internal unnamed_addr constant ptr @x2

`

``

19

`+

@y2 = internal unnamed_addr constant ptr @x1

`

``

20

`+

@y3 = internal unnamed_addr constant ptr @x0

`

``

21

`+

@load_relative_2.table = private unnamed_addr constant [4 x ptr] [ptr @y3, ptr @y2, ptr @y1, ptr @y0]

`

``

22

+

``

23

`+

;.

`

``

24

`+

; x86_64-apple-darwin: @a0 = private constant i32 0

`

``

25

`+

; x86_64-apple-darwin: @a1 = private constant i32 1

`

``

26

`+

; x86_64-apple-darwin: @a2 = private constant i32 2

`

``

27

`+

; x86_64-apple-darwin: @load_relative_1.table.rel = private unnamed_addr constant [3 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @a0 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @a1 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @a2 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32)], align 4

`

``

28

`+

; x86_64-apple-darwin: @x0 = internal unnamed_addr constant i64 0

`

``

29

`+

; x86_64-apple-darwin: @x1 = internal unnamed_addr constant i64 1

`

``

30

`+

; x86_64-apple-darwin: @x2 = internal unnamed_addr constant i64 2

`

``

31

`+

; x86_64-apple-darwin: @x3 = internal unnamed_addr constant i64 3

`

``

32

`+

; x86_64-apple-darwin: @y0 = internal constant ptr @x3

`

``

33

`+

; x86_64-apple-darwin: @y1 = internal constant ptr @x2

`

``

34

`+

; x86_64-apple-darwin: @y2 = internal constant ptr @x1

`

``

35

`+

; x86_64-apple-darwin: @y3 = internal constant ptr @x0

`

``

36

`+

; x86_64-apple-darwin: @load_relative_2.table.rel = private unnamed_addr constant [4 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @y3 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y2 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y1 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y0 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32)], align 4

`

``

37

`+

;.

`

``

38

`+

; aarch64: @a0 = private constant i32 0

`

``

39

`+

; aarch64: @a1 = private constant i32 1

`

``

40

`+

; aarch64: @a2 = private constant i32 2

`

``

41

`+

; aarch64: @load_relative_1.table.rel = private unnamed_addr constant [3 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @a0 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @a1 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @a2 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32)], align 4

`

``

42

`+

; aarch64: @x0 = internal unnamed_addr constant i64 0

`

``

43

`+

; aarch64: @x1 = internal unnamed_addr constant i64 1

`

``

44

`+

; aarch64: @x2 = internal unnamed_addr constant i64 2

`

``

45

`+

; aarch64: @x3 = internal unnamed_addr constant i64 3

`

``

46

`+

; aarch64: @y0 = internal constant ptr @x3

`

``

47

`+

; aarch64: @y1 = internal constant ptr @x2

`

``

48

`+

; aarch64: @y2 = internal constant ptr @x1

`

``

49

`+

; aarch64: @y3 = internal constant ptr @x0

`

``

50

`+

; aarch64: @load_relative_2.table.rel = private unnamed_addr constant [4 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @y3 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y2 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y1 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y0 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32)], align 4

`

``

51

`+

;.

`

``

52

`+

; x86_64: @a0 = private unnamed_addr constant i32 0

`

``

53

`+

; x86_64: @a1 = private unnamed_addr constant i32 1

`

``

54

`+

; x86_64: @a2 = private unnamed_addr constant i32 2

`

``

55

`+

; x86_64: @load_relative_1.table.rel = private unnamed_addr constant [3 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @a0 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @a1 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @a2 to i64), i64 ptrtoint (ptr @load_relative_1.table.rel to i64)) to i32)], align 4

`

``

56

`+

; x86_64: @x0 = internal unnamed_addr constant i64 0

`

``

57

`+

; x86_64: @x1 = internal unnamed_addr constant i64 1

`

``

58

`+

; x86_64: @x2 = internal unnamed_addr constant i64 2

`

``

59

`+

; x86_64: @x3 = internal unnamed_addr constant i64 3

`

``

60

`+

; x86_64: @y0 = internal unnamed_addr constant ptr @x3

`

``

61

`+

; x86_64: @y1 = internal unnamed_addr constant ptr @x2

`

``

62

`+

; x86_64: @y2 = internal unnamed_addr constant ptr @x1

`

``

63

`+

; x86_64: @y3 = internal unnamed_addr constant ptr @x0

`

``

64

`+

; x86_64: @load_relative_2.table.rel = private unnamed_addr constant [4 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @y3 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y2 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y1 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @y0 to i64), i64 ptrtoint (ptr @load_relative_2.table.rel to i64)) to i32)], align 4

`

``

65

`+

;.

`

``

66

`+

define ptr @load_relative_1(i64 %offset) {

`

``

67

`+

; x86_64-apple-darwin-LABEL: define ptr @load_relative_1(

`

``

68

`+

; x86_64-apple-darwin-SAME: i64 [[OFFSET:%.*]]) {

`

``

69

`+

; x86_64-apple-darwin-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2

`

``

70

`+

; x86_64-apple-darwin-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_1.table.rel, i64 [[RELTABLE_SHIFT]])

`

``

71

`+

; x86_64-apple-darwin-NEXT: ret ptr [[RELTABLE_INTRINSIC]]

`

``

72

`+

;

`

``

73

`+

; aarch64-LABEL: define ptr @load_relative_1(

`

``

74

`+

; aarch64-SAME: i64 [[OFFSET:%.*]]) {

`

``

75

`+

; aarch64-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2

`

``

76

`+

; aarch64-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_1.table.rel, i64 [[RELTABLE_SHIFT]])

`

``

77

`+

; aarch64-NEXT: ret ptr [[RELTABLE_INTRINSIC]]

`

``

78

`+

;

`

``

79

`+

; x86_64-LABEL: define ptr @load_relative_1(

`

``

80

`+

; x86_64-SAME: i64 [[OFFSET:%.*]]) {

`

``

81

`+

; x86_64-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2

`

``

82

`+

; x86_64-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_1.table.rel, i64 [[RELTABLE_SHIFT]])

`

``

83

`+

; x86_64-NEXT: ret ptr [[RELTABLE_INTRINSIC]]

`

``

84

`+

;

`

``

85

`+

%gep = getelementptr inbounds [3 x ptr], ptr @load_relative_1.table, i64 0, i64 %offset

`

``

86

`+

%load = load ptr, ptr %gep

`

``

87

`+

ret ptr %load

`

``

88

`+

}

`

``

89

+

``

90

`+

define ptr @load_relative_2(i64 %offset) {

`

``

91

`+

; x86_64-apple-darwin-LABEL: define ptr @load_relative_2(

`

``

92

`+

; x86_64-apple-darwin-SAME: i64 [[OFFSET:%.*]]) {

`

``

93

`+

; x86_64-apple-darwin-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2

`

``

94

`+

; x86_64-apple-darwin-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_2.table.rel, i64 [[RELTABLE_SHIFT]])

`

``

95

`+

; x86_64-apple-darwin-NEXT: ret ptr [[RELTABLE_INTRINSIC]]

`

``

96

`+

;

`

``

97

`+

; aarch64-LABEL: define ptr @load_relative_2(

`

``

98

`+

; aarch64-SAME: i64 [[OFFSET:%.*]]) {

`

``

99

`+

; aarch64-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2

`

``

100

`+

; aarch64-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_2.table.rel, i64 [[RELTABLE_SHIFT]])

`

``

101

`+

; aarch64-NEXT: ret ptr [[RELTABLE_INTRINSIC]]

`

``

102

`+

;

`

``

103

`+

; x86_64-LABEL: define ptr @load_relative_2(

`

``

104

`+

; x86_64-SAME: i64 [[OFFSET:%.*]]) {

`

``

105

`+

; x86_64-NEXT: [[RELTABLE_SHIFT:%.*]] = shl i64 [[OFFSET]], 2

`

``

106

`+

; x86_64-NEXT: [[RELTABLE_INTRINSIC:%.*]] = call ptr @llvm.load.relative.i64(ptr @load_relative_2.table.rel, i64 [[RELTABLE_SHIFT]])

`

``

107

`+

; x86_64-NEXT: ret ptr [[RELTABLE_INTRINSIC]]

`

``

108

`+

;

`

``

109

`+

%gep = getelementptr inbounds [4 x ptr], ptr @load_relative_2.table, i64 0, i64 %offset

`

``

110

`+

%load = load ptr, ptr %gep

`

``

111

`+

ret ptr %load

`

``

112

`+

}

`

``

113

`+

;.

`

``

114

`+

; x86_64-apple-darwin: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(argmem: read) }

`

``

115

`+

;.

`

``

116

`+

; aarch64: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(argmem: read) }

`

``

117

`+

;.

`

``

118

`+

; x86_64: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(argmem: read) }

`

``

119

`+

;.

`