diff --git a/llvm/test/Transforms/InstCombine/ptrtoaddr.ll b/llvm/test/Transforms/InstSimplify/ptrtoaddr.ll similarity index 74% rename from llvm/test/Transforms/InstCombine/ptrtoaddr.ll rename to llvm/test/Transforms/InstSimplify/ptrtoaddr.ll index 1964555673228..03a2d4b57f614 100644 --- a/llvm/test/Transforms/InstCombine/ptrtoaddr.ll +++ b/llvm/test/Transforms/InstSimplify/ptrtoaddr.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 -; RUN: opt < %s -passes=instcombine -S | FileCheck %s +; RUN: opt < %s -passes=instsimplify -S | FileCheck %s ; The ptrtoaddr folds are also valid for pointers that have external state. target datalayout = "pe1:64:64:64:32" @@ -34,77 +34,95 @@ define i32 @ptrtoaddr_inttoptr() { ; CHECK-LABEL: define i32 @ptrtoaddr_inttoptr() { ; CHECK-NEXT: ret i32 -1 ; - ret i32 ptrtoaddr (ptr addrspace(1) inttoptr (i32 -1 to ptr addrspace(1)) to i32) + %toptr = inttoptr i32 -1 to ptr addrspace(1) + %toaddr = ptrtoaddr ptr addrspace(1) %toptr to i32 + ret i32 %toaddr } define i32 @ptrtoaddr_inttoptr_diff_size1() { ; CHECK-LABEL: define i32 @ptrtoaddr_inttoptr_diff_size1() { ; CHECK-NEXT: ret i32 -1 ; - ret i32 ptrtoaddr (ptr addrspace(1) inttoptr (i64 -1 to ptr addrspace(1)) to i32) + %toptr = inttoptr i64 -1 to ptr addrspace(1) + %toaddr = ptrtoaddr ptr addrspace(1) %toptr to i32 + ret i32 %toaddr } define i32 @ptrtoaddr_inttoptr_diff_size2() { ; CHECK-LABEL: define i32 @ptrtoaddr_inttoptr_diff_size2() { ; CHECK-NEXT: ret i32 65535 ; - ret i32 ptrtoaddr (ptr addrspace(1) inttoptr (i16 -1 to ptr addrspace(1)) to i32) + %toptr = inttoptr i16 -1 to ptr addrspace(1) + %toaddr = ptrtoaddr ptr addrspace(1) %toptr to i32 + ret i32 %toaddr } define i64 @ptrtoaddr_inttoptr_noas1() { ; CHECK-LABEL: define i64 @ptrtoaddr_inttoptr_noas1() { ; CHECK-NEXT: ret i64 1 ; - ret i64 ptrtoaddr (ptr getelementptr (i8, ptr null, i64 1) to i64) + %toptr = getelementptr i8, ptr null, i64 1 + %toaddr = ptrtoaddr ptr %toptr to i64 + ret i64 %toaddr } define i64 @ptr2addr2_inttoptr_noas2() { ; CHECK-LABEL: define i64 @ptr2addr2_inttoptr_noas2() { ; CHECK-NEXT: ret i64 123 ; - ret i64 ptrtoaddr (ptr inttoptr (i64 123 to ptr) to i64) + %toptr = inttoptr i64 123 to ptr + %toaddr = ptrtoaddr ptr %toptr to i64 + ret i64 %toaddr } define i64 @ptrtoaddr_inttoptr_noas_diff_size1() { ; CHECK-LABEL: define i64 @ptrtoaddr_inttoptr_noas_diff_size1() { ; CHECK-NEXT: ret i64 4294967295 ; - ret i64 ptrtoaddr (ptr inttoptr (i32 -1 to ptr) to i64) + %toptr = inttoptr i32 -1 to ptr + %toaddr = ptrtoaddr ptr %toptr to i64 + ret i64 %toaddr } define i64 @ptrtoaddr_inttoptr_noas_diff_size2() { ; CHECK-LABEL: define i64 @ptrtoaddr_inttoptr_noas_diff_size2() { ; CHECK-NEXT: ret i64 -1 ; - ret i64 ptrtoaddr (ptr inttoptr (i128 -1 to ptr) to i64) + %toptr = inttoptr i128 -1 to ptr + %toaddr = ptrtoaddr ptr %toptr to i64 + ret i64 %toaddr } define i64 @ptrtoaddr_gep_null() { ; CHECK-LABEL: define i64 @ptrtoaddr_gep_null() { ; CHECK-NEXT: ret i64 42 ; - ret i64 ptrtoaddr (ptr getelementptr (i8, ptr null, i64 42) to i64) + %toaddr = ptrtoaddr ptr getelementptr (i8, ptr null, i64 42) to i64 + ret i64 %toaddr } define i32 @ptrtoaddr_gep_null_addrsize() { ; CHECK-LABEL: define i32 @ptrtoaddr_gep_null_addrsize() { ; CHECK-NEXT: ret i32 42 ; - ret i32 ptrtoaddr (ptr addrspace(1) getelementptr (i8, ptr addrspace(1) null, i32 42) to i32) + %toaddr = ptrtoaddr ptr addrspace(1) getelementptr (i8, ptr addrspace(1) null, i32 42) to i32 + ret i32 %toaddr } define i64 @ptrtoaddr_gep_sub() { ; CHECK-LABEL: define i64 @ptrtoaddr_gep_sub() { ; CHECK-NEXT: ret i64 sub (i64 ptrtoaddr (ptr @g to i64), i64 ptrtoaddr (ptr @g2 to i64)) ; - ret i64 ptrtoaddr (ptr getelementptr (i8, ptr @g, i64 sub (i64 0, i64 ptrtoaddr (ptr @g2 to i64))) to i64) + %toaddr = ptrtoaddr ptr getelementptr (i8, ptr @g, i64 sub (i64 0, i64 ptrtoaddr (ptr @g2 to i64))) to i64 + ret i64 %toaddr } define i32 @ptrtoaddr_gep_sub_addrsize() { ; CHECK-LABEL: define i32 @ptrtoaddr_gep_sub_addrsize() { ; CHECK-NEXT: ret i32 sub (i32 ptrtoaddr (ptr addrspace(1) @g.as1 to i32), i32 ptrtoaddr (ptr addrspace(1) @g2.as1 to i32)) ; - ret i32 ptrtoaddr (ptr addrspace(1) getelementptr (i8, ptr addrspace(1) @g.as1, i32 sub (i32 0, i32 ptrtoaddr (ptr addrspace(1) @g2.as1 to i32))) to i32) + %toaddr = ptrtoaddr ptr addrspace(1) getelementptr (i8, ptr addrspace(1) @g.as1, i32 sub (i32 0, i32 ptrtoaddr (ptr addrspace(1) @g2.as1 to i32))) to i32 + ret i32 %toaddr } ; Don't fold inttoptr of ptrtoaddr away. inttoptr will pick a previously @@ -114,28 +132,32 @@ define ptr @inttoptr_of_ptrtoaddr() { ; CHECK-LABEL: define ptr @inttoptr_of_ptrtoaddr() { ; CHECK-NEXT: ret ptr inttoptr (i64 ptrtoaddr (ptr @g to i64) to ptr) ; - ret ptr inttoptr (i64 ptrtoaddr (ptr @g to i64) to ptr) + %toptr = inttoptr i64 ptrtoaddr (ptr @g to i64) to ptr + ret ptr %toptr } define i64 @ptrtoaddr_sub_consts_unrelated() { ; CHECK-LABEL: define i64 @ptrtoaddr_sub_consts_unrelated() { ; CHECK-NEXT: ret i64 sub (i64 ptrtoaddr (ptr @g to i64), i64 ptrtoaddr (ptr @g2 to i64)) ; - ret i64 sub (i64 ptrtoaddr (ptr @g to i64), i64 ptrtoaddr (ptr @g2 to i64)) + %sub = sub i64 ptrtoaddr (ptr @g to i64), ptrtoaddr (ptr @g2 to i64) + ret i64 %sub } define i64 @ptrtoaddr_sub_consts_offset() { ; CHECK-LABEL: define i64 @ptrtoaddr_sub_consts_offset() { ; CHECK-NEXT: ret i64 42 ; - ret i64 sub (i64 ptrtoaddr (ptr getelementptr (i8, ptr @g, i64 42) to i64), i64 ptrtoaddr (ptr @g to i64)) + %sub = sub i64 ptrtoaddr (ptr getelementptr (i8, ptr @g, i64 42) to i64), ptrtoaddr (ptr @g to i64) + ret i64 %sub } define i32 @ptrtoaddr_sub_consts_offset_addrsize() { ; CHECK-LABEL: define i32 @ptrtoaddr_sub_consts_offset_addrsize() { ; CHECK-NEXT: ret i32 42 ; - ret i32 sub (i32 ptrtoaddr (ptr addrspace(1) getelementptr (i8, ptr addrspace(1) @g.as1, i32 42) to i32), i32 ptrtoaddr (ptr addrspace(1) @g.as1 to i32)) + %sub = sub i32 ptrtoaddr (ptr addrspace(1) getelementptr (i8, ptr addrspace(1) @g.as1, i32 42) to i32), ptrtoaddr (ptr addrspace(1) @g.as1 to i32) + ret i32 %sub } define i64 @ptrtoaddr_sub_known_offset(ptr %p) {