| 
 | 1 | +; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py  | 
 | 2 | +; RUN: opt < %s --data-layout="e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" -S -disable-output -disable-verify "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=ALL,X64 %s  | 
 | 3 | +; RUN: opt < %s --data-layout="e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128" -S -disable-output -disable-verify "-passes=print<scalar-evolution>" 2>&1 | FileCheck --check-prefixes=ALL,X32 %s  | 
 | 4 | + | 
 | 5 | +declare void @useptr(ptr)  | 
 | 6 | + | 
 | 7 | +define void @ptrtoaddr(ptr %in, ptr %out0, ptr %out1, ptr %out2, ptr %out3) {  | 
 | 8 | +; X64-LABEL: 'ptrtoaddr'  | 
 | 9 | +; X64-NEXT:  Classifying expressions for: @ptrtoaddr  | 
 | 10 | +; X64-NEXT:    %p0 = ptrtoaddr ptr %in to i64  | 
 | 11 | +; X64-NEXT:    --> %p0 U: full-set S: full-set  | 
 | 12 | +; X64-NEXT:    %p1 = ptrtoaddr ptr %in to i32  | 
 | 13 | +; X64-NEXT:    --> %p1 U: full-set S: full-set  | 
 | 14 | +; X64-NEXT:    %p2 = ptrtoaddr ptr %in to i16  | 
 | 15 | +; X64-NEXT:    --> %p2 U: full-set S: full-set  | 
 | 16 | +; X64-NEXT:    %p3 = ptrtoaddr ptr %in to i128  | 
 | 17 | +; X64-NEXT:    --> %p3 U: full-set S: full-set  | 
 | 18 | +; X64-NEXT:  Determining loop execution counts for: @ptrtoaddr  | 
 | 19 | +;  | 
 | 20 | +; X32-LABEL: 'ptrtoaddr'  | 
 | 21 | +; X32-NEXT:  Classifying expressions for: @ptrtoaddr  | 
 | 22 | +; X32-NEXT:    %p0 = ptrtoaddr ptr %in to i64  | 
 | 23 | +; X32-NEXT:    --> %p0 U: full-set S: full-set  | 
 | 24 | +; X32-NEXT:    %p1 = ptrtoaddr ptr %in to i32  | 
 | 25 | +; X32-NEXT:    --> %p1 U: full-set S: full-set  | 
 | 26 | +; X32-NEXT:    %p2 = ptrtoaddr ptr %in to i16  | 
 | 27 | +; X32-NEXT:    --> %p2 U: full-set S: full-set  | 
 | 28 | +; X32-NEXT:    %p3 = ptrtoaddr ptr %in to i128  | 
 | 29 | +; X32-NEXT:    --> %p3 U: full-set S: full-set  | 
 | 30 | +; X32-NEXT:  Determining loop execution counts for: @ptrtoaddr  | 
 | 31 | +;  | 
 | 32 | +  %p0 = ptrtoaddr ptr %in to i64  | 
 | 33 | +  %p1 = ptrtoaddr ptr %in to i32  | 
 | 34 | +  %p2 = ptrtoaddr ptr %in to i16  | 
 | 35 | +  %p3 = ptrtoaddr ptr %in to i128  | 
 | 36 | +  store i64  %p0, ptr  %out0  | 
 | 37 | +  store i32  %p1, ptr  %out1  | 
 | 38 | +  store i16  %p2, ptr  %out2  | 
 | 39 | +  store i128 %p3, ptr %out3  | 
 | 40 | +  ret void  | 
 | 41 | +}  | 
 | 42 | + | 
 | 43 | +define void @ptrtoaddr_as1(ptr addrspace(1) %in, ptr %out0, ptr %out1, ptr %out2, ptr %out3) {  | 
 | 44 | +; X64-LABEL: 'ptrtoaddr_as1'  | 
 | 45 | +; X64-NEXT:  Classifying expressions for: @ptrtoaddr_as1  | 
 | 46 | +; X64-NEXT:    %p0 = ptrtoaddr ptr addrspace(1) %in to i64  | 
 | 47 | +; X64-NEXT:    --> %p0 U: full-set S: full-set  | 
 | 48 | +; X64-NEXT:    %p1 = ptrtoaddr ptr addrspace(1) %in to i32  | 
 | 49 | +; X64-NEXT:    --> %p1 U: full-set S: full-set  | 
 | 50 | +; X64-NEXT:    %p2 = ptrtoaddr ptr addrspace(1) %in to i16  | 
 | 51 | +; X64-NEXT:    --> %p2 U: full-set S: full-set  | 
 | 52 | +; X64-NEXT:    %p3 = ptrtoaddr ptr addrspace(1) %in to i128  | 
 | 53 | +; X64-NEXT:    --> %p3 U: full-set S: full-set  | 
 | 54 | +; X64-NEXT:  Determining loop execution counts for: @ptrtoaddr_as1  | 
 | 55 | +;  | 
 | 56 | +; X32-LABEL: 'ptrtoaddr_as1'  | 
 | 57 | +; X32-NEXT:  Classifying expressions for: @ptrtoaddr_as1  | 
 | 58 | +; X32-NEXT:    %p0 = ptrtoaddr ptr addrspace(1) %in to i64  | 
 | 59 | +; X32-NEXT:    --> %p0 U: full-set S: full-set  | 
 | 60 | +; X32-NEXT:    %p1 = ptrtoaddr ptr addrspace(1) %in to i32  | 
 | 61 | +; X32-NEXT:    --> %p1 U: full-set S: full-set  | 
 | 62 | +; X32-NEXT:    %p2 = ptrtoaddr ptr addrspace(1) %in to i16  | 
 | 63 | +; X32-NEXT:    --> %p2 U: full-set S: full-set  | 
 | 64 | +; X32-NEXT:    %p3 = ptrtoaddr ptr addrspace(1) %in to i128  | 
 | 65 | +; X32-NEXT:    --> %p3 U: full-set S: full-set  | 
 | 66 | +; X32-NEXT:  Determining loop execution counts for: @ptrtoaddr_as1  | 
 | 67 | +;  | 
 | 68 | +  %p0 = ptrtoaddr ptr addrspace(1) %in to i64  | 
 | 69 | +  %p1 = ptrtoaddr ptr addrspace(1) %in to i32  | 
 | 70 | +  %p2 = ptrtoaddr ptr addrspace(1) %in to i16  | 
 | 71 | +  %p3 = ptrtoaddr ptr addrspace(1) %in to i128  | 
 | 72 | +  store i64  %p0, ptr  %out0  | 
 | 73 | +  store i32  %p1, ptr  %out1  | 
 | 74 | +  store i16  %p2, ptr  %out2  | 
 | 75 | +  store i128 %p3, ptr %out3  | 
 | 76 | +  ret void  | 
 | 77 | +}  | 
 | 78 | + | 
 | 79 | +define void @ptrtoaddr_of_bitcast(ptr %in, ptr %out0) {  | 
 | 80 | +; X64-LABEL: 'ptrtoaddr_of_bitcast'  | 
 | 81 | +; X64-NEXT:  Classifying expressions for: @ptrtoaddr_of_bitcast  | 
 | 82 | +; X64-NEXT:    %in_casted = bitcast ptr %in to ptr  | 
 | 83 | +; X64-NEXT:    --> %in U: full-set S: full-set  | 
 | 84 | +; X64-NEXT:    %p0 = ptrtoaddr ptr %in_casted to i64  | 
 | 85 | +; X64-NEXT:    --> %p0 U: full-set S: full-set  | 
 | 86 | +; X64-NEXT:  Determining loop execution counts for: @ptrtoaddr_of_bitcast  | 
 | 87 | +;  | 
 | 88 | +; X32-LABEL: 'ptrtoaddr_of_bitcast'  | 
 | 89 | +; X32-NEXT:  Classifying expressions for: @ptrtoaddr_of_bitcast  | 
 | 90 | +; X32-NEXT:    %in_casted = bitcast ptr %in to ptr  | 
 | 91 | +; X32-NEXT:    --> %in U: full-set S: full-set  | 
 | 92 | +; X32-NEXT:    %p0 = ptrtoaddr ptr %in_casted to i64  | 
 | 93 | +; X32-NEXT:    --> %p0 U: full-set S: full-set  | 
 | 94 | +; X32-NEXT:  Determining loop execution counts for: @ptrtoaddr_of_bitcast  | 
 | 95 | +;  | 
 | 96 | +  %in_casted = bitcast ptr %in to ptr  | 
 | 97 | +  %p0 = ptrtoaddr ptr %in_casted to i64  | 
 | 98 | +  store i64 %p0, ptr %out0  | 
 | 99 | +  ret void  | 
 | 100 | +}  | 
 | 101 | + | 
 | 102 | +define void @ptrtoaddr_of_nullptr(ptr %out0) {  | 
 | 103 | +; ALL-LABEL: 'ptrtoaddr_of_nullptr'  | 
 | 104 | +; ALL-NEXT:  Classifying expressions for: @ptrtoaddr_of_nullptr  | 
 | 105 | +; ALL-NEXT:    %p0 = ptrtoaddr ptr null to i64  | 
 | 106 | +; ALL-NEXT:    --> %p0 U: full-set S: full-set  | 
 | 107 | +; ALL-NEXT:  Determining loop execution counts for: @ptrtoaddr_of_nullptr  | 
 | 108 | +;  | 
 | 109 | +  %p0 = ptrtoaddr ptr null to i64  | 
 | 110 | +  store i64 %p0, ptr %out0  | 
 | 111 | +  ret void  | 
 | 112 | +}  | 
 | 113 | + | 
 | 114 | +define void @ptrtoaddr_of_gep(ptr %in, ptr %out0) {  | 
 | 115 | +; X64-LABEL: 'ptrtoaddr_of_gep'  | 
 | 116 | +; X64-NEXT:  Classifying expressions for: @ptrtoaddr_of_gep  | 
 | 117 | +; X64-NEXT:    %in_adj = getelementptr inbounds i8, ptr %in, i64 42  | 
 | 118 | +; X64-NEXT:    --> (42 + %in) U: full-set S: full-set  | 
 | 119 | +; X64-NEXT:    %p0 = ptrtoaddr ptr %in_adj to i64  | 
 | 120 | +; X64-NEXT:    --> %p0 U: full-set S: full-set  | 
 | 121 | +; X64-NEXT:  Determining loop execution counts for: @ptrtoaddr_of_gep  | 
 | 122 | +;  | 
 | 123 | +; X32-LABEL: 'ptrtoaddr_of_gep'  | 
 | 124 | +; X32-NEXT:  Classifying expressions for: @ptrtoaddr_of_gep  | 
 | 125 | +; X32-NEXT:    %in_adj = getelementptr inbounds i8, ptr %in, i64 42  | 
 | 126 | +; X32-NEXT:    --> (42 + %in) U: full-set S: full-set  | 
 | 127 | +; X32-NEXT:    %p0 = ptrtoaddr ptr %in_adj to i64  | 
 | 128 | +; X32-NEXT:    --> %p0 U: full-set S: full-set  | 
 | 129 | +; X32-NEXT:  Determining loop execution counts for: @ptrtoaddr_of_gep  | 
 | 130 | +;  | 
 | 131 | +  %in_adj = getelementptr inbounds i8, ptr %in, i64 42  | 
 | 132 | +  %p0 = ptrtoaddr ptr %in_adj to i64  | 
 | 133 | +  store i64  %p0, ptr  %out0  | 
 | 134 | +  ret void  | 
 | 135 | +}  | 
0 commit comments