[test][InstCombine] Update some test cases to use opaque pointers
authorBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Mon, 3 Oct 2022 12:24:31 +0000 (14:24 +0200)
committerBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Mon, 3 Oct 2022 20:17:59 +0000 (22:17 +0200)
These tests cases were converted using the script at
https://gist.github.com/nikic/98357b71fd67756b0f064c9517b62a34

Differential Revision: https://reviews.llvm.org/D135094

601 files changed:
llvm/test/Transforms/InstCombine/2003-05-27-ConstExprCrash.ll
llvm/test/Transforms/InstCombine/2003-07-21-ExternalConstant.ll
llvm/test/Transforms/InstCombine/2003-08-12-AllocaNonNull.ll
llvm/test/Transforms/InstCombine/2003-09-09-VolatileLoadElim.ll
llvm/test/Transforms/InstCombine/2003-10-29-CallSiteResolve.ll
llvm/test/Transforms/InstCombine/2003-11-03-VarargsCallBug.ll
llvm/test/Transforms/InstCombine/2004-01-13-InstCombineInvokePHI.ll
llvm/test/Transforms/InstCombine/2004-05-07-UnsizedCastLoad.ll
llvm/test/Transforms/InstCombine/2004-07-27-ConstantExprMul.ll
llvm/test/Transforms/InstCombine/2004-09-20-BadLoadCombine.ll
llvm/test/Transforms/InstCombine/2004-09-20-BadLoadCombine2.ll
llvm/test/Transforms/InstCombine/2004-11-27-SetCCForCastLargerAndConstant.ll
llvm/test/Transforms/InstCombine/2005-07-07-DeadPHILoop.ll
llvm/test/Transforms/InstCombine/2006-09-15-CastToBool.ll
llvm/test/Transforms/InstCombine/2006-12-08-Phi-ICmp-Op-Fold.ll
llvm/test/Transforms/InstCombine/2006-12-08-Select-ICmp.ll
llvm/test/Transforms/InstCombine/2006-12-15-Range-Test.ll
llvm/test/Transforms/InstCombine/2006-12-23-Select-Cmp-Cmp.ll
llvm/test/Transforms/InstCombine/2007-02-01-LoadSinkAlloca.ll
llvm/test/Transforms/InstCombine/2007-02-07-PointerCast.ll
llvm/test/Transforms/InstCombine/2007-02-23-PhiFoldInfLoop.ll
llvm/test/Transforms/InstCombine/2007-03-25-BadShiftMask.ll
llvm/test/Transforms/InstCombine/2007-03-26-BadShiftMask.ll
llvm/test/Transforms/InstCombine/2007-05-14-Crash.ll
llvm/test/Transforms/InstCombine/2007-05-18-CastFoldBug.ll
llvm/test/Transforms/InstCombine/2007-06-06-AshrSignBit.ll
llvm/test/Transforms/InstCombine/2007-09-10-AliasConstFold.ll
llvm/test/Transforms/InstCombine/2007-09-17-AliasConstFold2.ll
llvm/test/Transforms/InstCombine/2007-10-10-EliminateMemCpy.ll
llvm/test/Transforms/InstCombine/2007-10-12-Crash.ll
llvm/test/Transforms/InstCombine/2007-10-28-stacksave.ll
llvm/test/Transforms/InstCombine/2007-10-31-RangeCrash.ll
llvm/test/Transforms/InstCombine/2007-10-31-StringCrash.ll
llvm/test/Transforms/InstCombine/2007-11-07-OpaqueAlignCrash.ll
llvm/test/Transforms/InstCombine/2007-11-25-CompatibleAttributes.ll
llvm/test/Transforms/InstCombine/2007-12-10-ConstFoldCompare.ll
llvm/test/Transforms/InstCombine/2007-12-12-GEPScale.ll
llvm/test/Transforms/InstCombine/2007-12-28-IcmpSub2.ll
llvm/test/Transforms/InstCombine/2008-01-06-BitCastAttributes.ll
llvm/test/Transforms/InstCombine/2008-01-06-CastCrash.ll
llvm/test/Transforms/InstCombine/2008-01-14-VarArgTrampoline.ll
llvm/test/Transforms/InstCombine/2008-03-13-IntToPtr.ll
llvm/test/Transforms/InstCombine/2008-04-28-VolatileStore.ll
llvm/test/Transforms/InstCombine/2008-04-29-VolatileLoadDontMerge.ll
llvm/test/Transforms/InstCombine/2008-04-29-VolatileLoadMerge.ll
llvm/test/Transforms/InstCombine/2008-05-08-LiveStoreDelete.ll
llvm/test/Transforms/InstCombine/2008-05-08-StrLenSink.ll
llvm/test/Transforms/InstCombine/2008-05-09-SinkOfInvoke.ll
llvm/test/Transforms/InstCombine/2008-05-17-InfLoop.ll
llvm/test/Transforms/InstCombine/2008-05-18-FoldIntToPtr.ll
llvm/test/Transforms/InstCombine/2008-05-23-CompareFold.ll
llvm/test/Transforms/InstCombine/2008-06-13-InfiniteLoopStore.ll
llvm/test/Transforms/InstCombine/2008-06-13-ReadOnlyCallStore.ll
llvm/test/Transforms/InstCombine/2008-06-19-UncondLoad.ll
llvm/test/Transforms/InstCombine/2008-06-24-StackRestore.ll
llvm/test/Transforms/InstCombine/2008-07-08-VolatileLoadMerge.ll
llvm/test/Transforms/InstCombine/2008-08-05-And.ll
llvm/test/Transforms/InstCombine/2008-09-02-VectorCrash.ll
llvm/test/Transforms/InstCombine/2008-10-23-ConstFoldWithoutMask.ll
llvm/test/Transforms/InstCombine/2009-01-16-PointerAddrSpace.ll
llvm/test/Transforms/InstCombine/2009-01-19-fmod-constant-float-specials.ll
llvm/test/Transforms/InstCombine/2009-01-19-fmod-constant-float.ll
llvm/test/Transforms/InstCombine/2009-01-24-EmptyStruct.ll
llvm/test/Transforms/InstCombine/2009-01-31-InfIterate.ll
llvm/test/Transforms/InstCombine/2009-02-11-NotInitialized.ll
llvm/test/Transforms/InstCombine/2009-02-21-LoadCST.ll
llvm/test/Transforms/InstCombine/2009-02-25-CrashZeroSizeArray.ll
llvm/test/Transforms/InstCombine/2009-03-18-vector-ashr-crash.ll
llvm/test/Transforms/InstCombine/2009-05-23-FCmpToICmp.ll
llvm/test/Transforms/InstCombine/2009-06-11-StoreAddrSpace.ll
llvm/test/Transforms/InstCombine/2009-12-17-CmpSelectNull.ll
llvm/test/Transforms/InstCombine/2010-03-03-ExtElim.ll
llvm/test/Transforms/InstCombine/2010-05-30-memcpy-Struct.ll
llvm/test/Transforms/InstCombine/2010-11-21-SizeZeroTypeGEP.ll
llvm/test/Transforms/InstCombine/2011-02-14-InfLoop.ll
llvm/test/Transforms/InstCombine/2011-05-02-VectorBoolean.ll
llvm/test/Transforms/InstCombine/2011-05-13-InBoundsGEP.ll
llvm/test/Transforms/InstCombine/2011-05-28-swapmulsub.ll
llvm/test/Transforms/InstCombine/2012-01-11-OpaqueBitcastCrash.ll
llvm/test/Transforms/InstCombine/2012-02-13-FCmp.ll
llvm/test/Transforms/InstCombine/2012-03-10-InstCombine.ll
llvm/test/Transforms/InstCombine/2012-05-28-select-hang.ll
llvm/test/Transforms/InstCombine/2012-06-06-LoadOfPHIs.ll
llvm/test/Transforms/InstCombine/2012-07-25-LoadPart.ll
llvm/test/Transforms/InstCombine/2012-07-30-addrsp-bitcast.ll
llvm/test/Transforms/InstCombine/2012-09-17-ZeroSizedAlloca.ll
llvm/test/Transforms/InstCombine/2012-10-25-vector-of-pointers.ll
llvm/test/Transforms/InstCombine/2012-12-14-simp-vgep.ll
llvm/test/Transforms/InstCombine/2012-3-15-or-xor-constant.ll
llvm/test/Transforms/InstCombine/2013-03-05-Combine-BitcastTy-Into-Alloca.ll
llvm/test/Transforms/InstCombine/AddOverFlow.ll
llvm/test/Transforms/InstCombine/CPP_min_max.ll
llvm/test/Transforms/InstCombine/InferAlignAttribute.ll
llvm/test/Transforms/InstCombine/IntPtrCast.ll
llvm/test/Transforms/InstCombine/LandingPadClauses.ll
llvm/test/Transforms/InstCombine/OverlappingInsertvalues.ll
llvm/test/Transforms/InstCombine/PR30597.ll
llvm/test/Transforms/InstCombine/PR37526.ll
llvm/test/Transforms/InstCombine/abs-1.ll
llvm/test/Transforms/InstCombine/abs-intrinsic.ll
llvm/test/Transforms/InstCombine/add.ll
llvm/test/Transforms/InstCombine/add3.ll
llvm/test/Transforms/InstCombine/align-2d-gep.ll
llvm/test/Transforms/InstCombine/align-addr.ll
llvm/test/Transforms/InstCombine/align-attr.ll
llvm/test/Transforms/InstCombine/align-external.ll
llvm/test/Transforms/InstCombine/all-bits-shift.ll
llvm/test/Transforms/InstCombine/alloc-realloc-free.ll
llvm/test/Transforms/InstCombine/alloca-big.ll
llvm/test/Transforms/InstCombine/allocsize-32.ll
llvm/test/Transforms/InstCombine/allocsize.ll
llvm/test/Transforms/InstCombine/and-or-icmp-nullptr.ll
llvm/test/Transforms/InstCombine/and-or-icmps.ll
llvm/test/Transforms/InstCombine/and-xor-or.ll
llvm/test/Transforms/InstCombine/and.ll
llvm/test/Transforms/InstCombine/annotation-intrinsic.ll
llvm/test/Transforms/InstCombine/annotations.ll
llvm/test/Transforms/InstCombine/apint-and.ll
llvm/test/Transforms/InstCombine/apint-call-cast-target.ll
llvm/test/Transforms/InstCombine/apint-shift.ll
llvm/test/Transforms/InstCombine/ashr-lshr.ll
llvm/test/Transforms/InstCombine/assume-align.ll
llvm/test/Transforms/InstCombine/assume-icmp-null-select.ll
llvm/test/Transforms/InstCombine/assume-loop-align.ll
llvm/test/Transforms/InstCombine/assume-redundant.ll
llvm/test/Transforms/InstCombine/assume.ll
llvm/test/Transforms/InstCombine/atomic.ll
llvm/test/Transforms/InstCombine/atomicrmw.ll
llvm/test/Transforms/InstCombine/badmalloc.ll
llvm/test/Transforms/InstCombine/bcmp-1.ll
llvm/test/Transforms/InstCombine/bcopy.ll
llvm/test/Transforms/InstCombine/binop-phi-operands.ll
llvm/test/Transforms/InstCombine/bitcast-inseltpoison.ll
llvm/test/Transforms/InstCombine/bitcast-phi-uselistorder.ll
llvm/test/Transforms/InstCombine/bitcast.ll
llvm/test/Transforms/InstCombine/bitreverse-hang.ll
llvm/test/Transforms/InstCombine/bitreverse.ll
llvm/test/Transforms/InstCombine/bittest.ll
llvm/test/Transforms/InstCombine/branch.ll
llvm/test/Transforms/InstCombine/bswap-fold.ll
llvm/test/Transforms/InstCombine/bswap-inseltpoison.ll
llvm/test/Transforms/InstCombine/bswap.ll
llvm/test/Transforms/InstCombine/builtin-dynamic-object-size.ll
llvm/test/Transforms/InstCombine/builtin-object-size-custom-dl.ll
llvm/test/Transforms/InstCombine/builtin-object-size-offset.ll
llvm/test/Transforms/InstCombine/builtin-object-size-ptr.ll
llvm/test/Transforms/InstCombine/builtin-object-size-strdup-family.ll
llvm/test/Transforms/InstCombine/call-callconv-mismatch.ll
llvm/test/Transforms/InstCombine/call-callconv.ll
llvm/test/Transforms/InstCombine/call-cast-attrs.ll
llvm/test/Transforms/InstCombine/call-cast-target.ll
llvm/test/Transforms/InstCombine/call-guard.ll
llvm/test/Transforms/InstCombine/call-intrinsics.ll
llvm/test/Transforms/InstCombine/call2.ll
llvm/test/Transforms/InstCombine/call_nonnull_arg.ll
llvm/test/Transforms/InstCombine/calloc-mismatch.ll
llvm/test/Transforms/InstCombine/canonicalize-clamp-like-pattern-between-zero-and-positive-threshold.ll
llvm/test/Transforms/InstCombine/canonicalize-selects-icmp-condition-bittest.ll
llvm/test/Transforms/InstCombine/cast-call-combine-prof.ll
llvm/test/Transforms/InstCombine/cast-call-combine.ll
llvm/test/Transforms/InstCombine/cast-callee-deopt-bundles.ll
llvm/test/Transforms/InstCombine/cast-set.ll
llvm/test/Transforms/InstCombine/cast_phi.ll
llvm/test/Transforms/InstCombine/cast_ptr.ll
llvm/test/Transforms/InstCombine/cmp-intrinsic.ll
llvm/test/Transforms/InstCombine/compare-signs.ll
llvm/test/Transforms/InstCombine/constant-expr-datalayout.ll
llvm/test/Transforms/InstCombine/constant-fold-alias.ll
llvm/test/Transforms/InstCombine/constant-fold-compare.ll
llvm/test/Transforms/InstCombine/constant-fold-gep.ll
llvm/test/Transforms/InstCombine/constant-fold-iteration.ll
llvm/test/Transforms/InstCombine/constant-fold-shifts.ll
llvm/test/Transforms/InstCombine/convergent.ll
llvm/test/Transforms/InstCombine/crash.ll
llvm/test/Transforms/InstCombine/ctpop.ll
llvm/test/Transforms/InstCombine/deadcode.ll
llvm/test/Transforms/InstCombine/debug-line.ll
llvm/test/Transforms/InstCombine/debuginfo-dce2.ll
llvm/test/Transforms/InstCombine/debuginfo-scalable-typesize.ll
llvm/test/Transforms/InstCombine/debuginfo-sink.ll
llvm/test/Transforms/InstCombine/debuginfo-skip.ll
llvm/test/Transforms/InstCombine/debuginfo-variables.ll
llvm/test/Transforms/InstCombine/debuginfo.ll
llvm/test/Transforms/InstCombine/debuginfo_add.ll
llvm/test/Transforms/InstCombine/default-alignment.ll
llvm/test/Transforms/InstCombine/disable-builtin.ll
llvm/test/Transforms/InstCombine/disable-simplify-libcalls.ll
llvm/test/Transforms/InstCombine/div-shift-crash.ll
llvm/test/Transforms/InstCombine/div.ll
llvm/test/Transforms/InstCombine/double-float-shrink-2.ll
llvm/test/Transforms/InstCombine/enforce-known-alignment.ll
llvm/test/Transforms/InstCombine/erase-dbg-values-at-dead-alloc-site.ll
llvm/test/Transforms/InstCombine/extractelement-inseltpoison.ll
llvm/test/Transforms/InstCombine/extractelement.ll
llvm/test/Transforms/InstCombine/extractinsert-tbaa.ll
llvm/test/Transforms/InstCombine/extractvalue.ll
llvm/test/Transforms/InstCombine/fabs.ll
llvm/test/Transforms/InstCombine/fcmp.ll
llvm/test/Transforms/InstCombine/fdiv-cos-sin.ll
llvm/test/Transforms/InstCombine/fdiv-sin-cos.ll
llvm/test/Transforms/InstCombine/fma.ll
llvm/test/Transforms/InstCombine/fmul-inseltpoison.ll
llvm/test/Transforms/InstCombine/fmul-sqrt.ll
llvm/test/Transforms/InstCombine/fmul.ll
llvm/test/Transforms/InstCombine/fneg.ll
llvm/test/Transforms/InstCombine/fold-bin-operand.ll
llvm/test/Transforms/InstCombine/fold-phi-load-metadata.ll
llvm/test/Transforms/InstCombine/fold-vector-select.ll
llvm/test/Transforms/InstCombine/fold-vector-zero-inseltpoison.ll
llvm/test/Transforms/InstCombine/fold-vector-zero.ll
llvm/test/Transforms/InstCombine/force-opaque-ptr.ll
llvm/test/Transforms/InstCombine/fputs-opt-size.ll
llvm/test/Transforms/InstCombine/freeze-landingpad.ll
llvm/test/Transforms/InstCombine/freeze-phi.ll
llvm/test/Transforms/InstCombine/freeze.ll
llvm/test/Transforms/InstCombine/fsh.ll
llvm/test/Transforms/InstCombine/fsub.ll
llvm/test/Transforms/InstCombine/fwrite-1.ll
llvm/test/Transforms/InstCombine/gc.relocate-verify.ll
llvm/test/Transforms/InstCombine/gc.relocate.ll
llvm/test/Transforms/InstCombine/gep-alias.ll
llvm/test/Transforms/InstCombine/gep-can-replace-gep-idx-with-zero-typesize.ll
llvm/test/Transforms/InstCombine/gep-canonicalize-constant-indices.ll
llvm/test/Transforms/InstCombine/gep-inbounds-null.ll
llvm/test/Transforms/InstCombine/gep-merge-constant-indices.ll
llvm/test/Transforms/InstCombine/gep-sext.ll
llvm/test/Transforms/InstCombine/gep-vector-indices.ll
llvm/test/Transforms/InstCombine/gepgep.ll
llvm/test/Transforms/InstCombine/getelementptr-folding.ll
llvm/test/Transforms/InstCombine/hoist-xor-by-constant-from-xor-by-value.ll
llvm/test/Transforms/InstCombine/icmp-add.ll
llvm/test/Transforms/InstCombine/icmp-bitcast-glob.ll
llvm/test/Transforms/InstCombine/icmp-dom.ll
llvm/test/Transforms/InstCombine/icmp-mul-zext.ll
llvm/test/Transforms/InstCombine/icmp-mul.ll
llvm/test/Transforms/InstCombine/icmp-range.ll
llvm/test/Transforms/InstCombine/icmp-shr-lt-gt.ll
llvm/test/Transforms/InstCombine/icmp-sub.ll
llvm/test/Transforms/InstCombine/icmp-trunc.ll
llvm/test/Transforms/InstCombine/icmp-vec-inseltpoison.ll
llvm/test/Transforms/InstCombine/icmp-vec.ll
llvm/test/Transforms/InstCombine/icmp.ll
llvm/test/Transforms/InstCombine/icmp_sdiv_with_and_without_range.ll
llvm/test/Transforms/InstCombine/indexed-gep-compares.ll
llvm/test/Transforms/InstCombine/insert-extract-shuffle-inseltpoison.ll
llvm/test/Transforms/InstCombine/insert-extract-shuffle.ll
llvm/test/Transforms/InstCombine/insert-val-extract-elem.ll
llvm/test/Transforms/InstCombine/int_sideeffect.ll
llvm/test/Transforms/InstCombine/intersect-accessgroup.ll
llvm/test/Transforms/InstCombine/intptr1.ll
llvm/test/Transforms/InstCombine/intptr3.ll
llvm/test/Transforms/InstCombine/intptr4.ll
llvm/test/Transforms/InstCombine/intptr5.ll
llvm/test/Transforms/InstCombine/intptr6.ll
llvm/test/Transforms/InstCombine/intptr7.ll
llvm/test/Transforms/InstCombine/intptr8.ll
llvm/test/Transforms/InstCombine/intrinsics.ll
llvm/test/Transforms/InstCombine/invariant.group.ll
llvm/test/Transforms/InstCombine/invariant.ll
llvm/test/Transforms/InstCombine/invoke.ll
llvm/test/Transforms/InstCombine/known-non-zero.ll
llvm/test/Transforms/InstCombine/known_align.ll
llvm/test/Transforms/InstCombine/lifetime-sanitizer.ll
llvm/test/Transforms/InstCombine/lifetime.ll
llvm/test/Transforms/InstCombine/load-bitcast-select.ll
llvm/test/Transforms/InstCombine/load-bitcast-vec.ll
llvm/test/Transforms/InstCombine/load-bitcast32.ll
llvm/test/Transforms/InstCombine/load-bitcast64.ll
llvm/test/Transforms/InstCombine/load-cmp.ll
llvm/test/Transforms/InstCombine/load-combine-metadata-2.ll
llvm/test/Transforms/InstCombine/load-combine-metadata-3.ll
llvm/test/Transforms/InstCombine/load-combine-metadata-4.ll
llvm/test/Transforms/InstCombine/load-combine-metadata-dominance.ll
llvm/test/Transforms/InstCombine/load-combine-metadata.ll
llvm/test/Transforms/InstCombine/load-no-aliasing.ll
llvm/test/Transforms/InstCombine/load-select.ll
llvm/test/Transforms/InstCombine/load-store-forward.ll
llvm/test/Transforms/InstCombine/load.ll
llvm/test/Transforms/InstCombine/load3.ll
llvm/test/Transforms/InstCombine/load_combine_aa.ll
llvm/test/Transforms/InstCombine/loadstore-alignment.ll
llvm/test/Transforms/InstCombine/loadstore-metadata.ll
llvm/test/Transforms/InstCombine/log-pow.ll
llvm/test/Transforms/InstCombine/lower-dbg-declare.ll
llvm/test/Transforms/InstCombine/lshr-and-negC-icmpeq-zero.ll
llvm/test/Transforms/InstCombine/lshr-and-signbit-icmpeq-zero.ll
llvm/test/Transforms/InstCombine/lshr-phi.ll
llvm/test/Transforms/InstCombine/lshr.ll
llvm/test/Transforms/InstCombine/malloc-free-delete-dbginvar.ll
llvm/test/Transforms/InstCombine/malloc-free-mismatched.ll
llvm/test/Transforms/InstCombine/malloc-free.ll
llvm/test/Transforms/InstCombine/malloc_free_delete_nvptx.ll
llvm/test/Transforms/InstCombine/masked_intrinsics-inseltpoison.ll
llvm/test/Transforms/InstCombine/masked_intrinsics.ll
llvm/test/Transforms/InstCombine/masked_intrinsics_keep_metadata.ll
llvm/test/Transforms/InstCombine/maxnum.ll
llvm/test/Transforms/InstCombine/mem-deref-bytes-addrspaces.ll
llvm/test/Transforms/InstCombine/mem-deref-bytes.ll
llvm/test/Transforms/InstCombine/mem-gep-zidx.ll
llvm/test/Transforms/InstCombine/mem-par-metadata-memcpy.ll
llvm/test/Transforms/InstCombine/memchr-10.ll
llvm/test/Transforms/InstCombine/memchr-11.ll
llvm/test/Transforms/InstCombine/memchr-3.ll
llvm/test/Transforms/InstCombine/memchr-5.ll
llvm/test/Transforms/InstCombine/memcmp-1.ll
llvm/test/Transforms/InstCombine/memcmp-2.ll
llvm/test/Transforms/InstCombine/memcmp-3.ll
llvm/test/Transforms/InstCombine/memcmp-4.ll
llvm/test/Transforms/InstCombine/memcmp-6.ll
llvm/test/Transforms/InstCombine/memcmp-7.ll
llvm/test/Transforms/InstCombine/memcmp-8.ll
llvm/test/Transforms/InstCombine/memcmp-constant-fold.ll
llvm/test/Transforms/InstCombine/memcpy-1.ll
llvm/test/Transforms/InstCombine/memcpy-2.ll
llvm/test/Transforms/InstCombine/memcpy-to-load.ll
llvm/test/Transforms/InstCombine/memcpy.ll
llvm/test/Transforms/InstCombine/memcpy_chk-2.ll
llvm/test/Transforms/InstCombine/memmove-1.ll
llvm/test/Transforms/InstCombine/memmove-2.ll
llvm/test/Transforms/InstCombine/memmove_chk-2.ll
llvm/test/Transforms/InstCombine/mempcpy.ll
llvm/test/Transforms/InstCombine/memrchr-2.ll
llvm/test/Transforms/InstCombine/memrchr-5.ll
llvm/test/Transforms/InstCombine/memrchr-7.ll
llvm/test/Transforms/InstCombine/memrchr.ll
llvm/test/Transforms/InstCombine/memset-1.ll
llvm/test/Transforms/InstCombine/memset-2.ll
llvm/test/Transforms/InstCombine/memset.ll
llvm/test/Transforms/InstCombine/memset_chk-2.ll
llvm/test/Transforms/InstCombine/merge-icmp.ll
llvm/test/Transforms/InstCombine/merging-multiple-stores-into-successor.ll
llvm/test/Transforms/InstCombine/min-positive.ll
llvm/test/Transforms/InstCombine/minmax-fold.ll
llvm/test/Transforms/InstCombine/minmax-intrinsics.ll
llvm/test/Transforms/InstCombine/minnum.ll
llvm/test/Transforms/InstCombine/mul-inseltpoison.ll
llvm/test/Transforms/InstCombine/mul.ll
llvm/test/Transforms/InstCombine/multi-size-address-space-pointer.ll
llvm/test/Transforms/InstCombine/multi-use-load-casts.ll
llvm/test/Transforms/InstCombine/multiple-uses-load-bitcast-select.ll
llvm/test/Transforms/InstCombine/musttail-thunk.ll
llvm/test/Transforms/InstCombine/narrow-switch.ll
llvm/test/Transforms/InstCombine/narrow.ll
llvm/test/Transforms/InstCombine/neg-alloca.ll
llvm/test/Transforms/InstCombine/new-delete-itanium-32.ll
llvm/test/Transforms/InstCombine/new-delete-itanium.ll
llvm/test/Transforms/InstCombine/new-delete-msvc.ll
llvm/test/Transforms/InstCombine/no-negzero.ll
llvm/test/Transforms/InstCombine/no-unwind-inline-asm.ll
llvm/test/Transforms/InstCombine/noalias-scope-decl.ll
llvm/test/Transforms/InstCombine/nonnull-attribute.ll
llvm/test/Transforms/InstCombine/nonnull-select.ll
llvm/test/Transforms/InstCombine/not-add.ll
llvm/test/Transforms/InstCombine/not.ll
llvm/test/Transforms/InstCombine/nsw-inseltpoison.ll
llvm/test/Transforms/InstCombine/nsw.ll
llvm/test/Transforms/InstCombine/obfuscated_splat-inseltpoison.ll
llvm/test/Transforms/InstCombine/obfuscated_splat.ll
llvm/test/Transforms/InstCombine/object-size-opaque.ll
llvm/test/Transforms/InstCombine/objsize-64.ll
llvm/test/Transforms/InstCombine/objsize-address-space.ll
llvm/test/Transforms/InstCombine/odr-linkage.ll
llvm/test/Transforms/InstCombine/onehot_merge.ll
llvm/test/Transforms/InstCombine/opaque-ptr.ll
llvm/test/Transforms/InstCombine/opaque.ll
llvm/test/Transforms/InstCombine/or-shifted-masks.ll
llvm/test/Transforms/InstCombine/or-xor.ll
llvm/test/Transforms/InstCombine/or.ll
llvm/test/Transforms/InstCombine/osx-names.ll
llvm/test/Transforms/InstCombine/overflow-mul.ll
llvm/test/Transforms/InstCombine/overflow.ll
llvm/test/Transforms/InstCombine/phi-cse.ll
llvm/test/Transforms/InstCombine/phi-equal-incoming-pointers.ll
llvm/test/Transforms/InstCombine/phi-int2ptr-fold.ll
llvm/test/Transforms/InstCombine/phi-load-metadata-2.ll
llvm/test/Transforms/InstCombine/phi-load-metadata-3.ll
llvm/test/Transforms/InstCombine/phi-load-metadata-dominance.ll
llvm/test/Transforms/InstCombine/phi-load-metadata.ll
llvm/test/Transforms/InstCombine/phi-merge-gep.ll
llvm/test/Transforms/InstCombine/phi-pointercasts.ll
llvm/test/Transforms/InstCombine/phi-select-constant.ll
llvm/test/Transforms/InstCombine/phi-shifts.ll
llvm/test/Transforms/InstCombine/phi-timeout.ll
llvm/test/Transforms/InstCombine/phi.ll
llvm/test/Transforms/InstCombine/pow-exp.ll
llvm/test/Transforms/InstCombine/pr12251.ll
llvm/test/Transforms/InstCombine/pr23751.ll
llvm/test/Transforms/InstCombine/pr24354.ll
llvm/test/Transforms/InstCombine/pr24605.ll
llvm/test/Transforms/InstCombine/pr25342.ll
llvm/test/Transforms/InstCombine/pr2645-0-inseltpoison.ll
llvm/test/Transforms/InstCombine/pr2645-0.ll
llvm/test/Transforms/InstCombine/pr26992.ll
llvm/test/Transforms/InstCombine/pr27343.ll
llvm/test/Transforms/InstCombine/pr27996.ll
llvm/test/Transforms/InstCombine/pr31990_wrong_memcpy.ll
llvm/test/Transforms/InstCombine/pr32686.ll
llvm/test/Transforms/InstCombine/pr33453.ll
llvm/test/Transforms/InstCombine/pr34627.ll
llvm/test/Transforms/InstCombine/pr35515.ll
llvm/test/Transforms/InstCombine/pr38984-inseltpoison.ll
llvm/test/Transforms/InstCombine/pr38984.ll
llvm/test/Transforms/InstCombine/pr39177.ll
llvm/test/Transforms/InstCombine/pr41164.ll
llvm/test/Transforms/InstCombine/pr43081.ll
llvm/test/Transforms/InstCombine/pr43376-getFlippedStrictnessPredicateAndConstant-assert.ll
llvm/test/Transforms/InstCombine/pr43893.ll
llvm/test/Transforms/InstCombine/pr44552.ll
llvm/test/Transforms/InstCombine/pr44835.ll
llvm/test/Transforms/InstCombine/pr46680.ll
llvm/test/Transforms/InstCombine/pr51824.ll
llvm/test/Transforms/InstCombine/prefetch-load.ll
llvm/test/Transforms/InstCombine/ptr-int-cast.ll
llvm/test/Transforms/InstCombine/ptr-int-ptr-icmp.ll
llvm/test/Transforms/InstCombine/puts-i16.ll
llvm/test/Transforms/InstCombine/readnone-maythrow.ll
llvm/test/Transforms/InstCombine/realloc-free.ll
llvm/test/Transforms/InstCombine/realloc.ll
llvm/test/Transforms/InstCombine/recurrence.ll
llvm/test/Transforms/InstCombine/reduction-add-sext-zext-i1.ll
llvm/test/Transforms/InstCombine/reduction-and-sext-zext-i1.ll
llvm/test/Transforms/InstCombine/reduction-mul-sext-zext-i1.ll
llvm/test/Transforms/InstCombine/reduction-or-sext-zext-i1.ll
llvm/test/Transforms/InstCombine/reduction-smax-sext-zext-i1.ll
llvm/test/Transforms/InstCombine/reduction-smin-sext-zext-i1.ll
llvm/test/Transforms/InstCombine/reduction-umax-sext-zext-i1.ll
llvm/test/Transforms/InstCombine/reduction-umin-sext-zext-i1.ll
llvm/test/Transforms/InstCombine/reduction-xor-sext-zext-i1.ll
llvm/test/Transforms/InstCombine/rem.ll
llvm/test/Transforms/InstCombine/remove-loop-phi-multiply-by-zero.ll
llvm/test/Transforms/InstCombine/result-of-usub-is-non-zero-and-no-overflow.ll
llvm/test/Transforms/InstCombine/rotate.ll
llvm/test/Transforms/InstCombine/salvage-dbg-declare.ll
llvm/test/Transforms/InstCombine/saturating-add-sub.ll
llvm/test/Transforms/InstCombine/scalable-trunc.ll
llvm/test/Transforms/InstCombine/scalarization-inseltpoison.ll
llvm/test/Transforms/InstCombine/scalarization.ll
llvm/test/Transforms/InstCombine/sdiv-canonicalize.ll
llvm/test/Transforms/InstCombine/select-and-or.ll
llvm/test/Transforms/InstCombine/select-binop-cmp.ll
llvm/test/Transforms/InstCombine/select-cmp-cttz-ctlz.ll
llvm/test/Transforms/InstCombine/select-cmpxchg.ll
llvm/test/Transforms/InstCombine/select-gep.ll
llvm/test/Transforms/InstCombine/select-load-call.ll
llvm/test/Transforms/InstCombine/select-masked_load.ll
llvm/test/Transforms/InstCombine/select-min-max.ll
llvm/test/Transforms/InstCombine/select-safe-transforms.ll
llvm/test/Transforms/InstCombine/select_meta.ll
llvm/test/Transforms/InstCombine/set.ll
llvm/test/Transforms/InstCombine/sext.ll
llvm/test/Transforms/InstCombine/shift-add.ll
llvm/test/Transforms/InstCombine/shift-amount-reassociation-in-bittest.ll
llvm/test/Transforms/InstCombine/shift-amount-reassociation-with-truncation-shl.ll
llvm/test/Transforms/InstCombine/shift-amount-reassociation.ll
llvm/test/Transforms/InstCombine/shift-logic.ll
llvm/test/Transforms/InstCombine/shift-shift.ll
llvm/test/Transforms/InstCombine/shift.ll
llvm/test/Transforms/InstCombine/shl-and-negC-icmpeq-zero.ll
llvm/test/Transforms/InstCombine/shl-and-signbit-icmpeq-zero.ll
llvm/test/Transforms/InstCombine/shl-unsigned-cmp-const.ll
llvm/test/Transforms/InstCombine/shufflevec-bitcast-inseltpoison.ll
llvm/test/Transforms/InstCombine/shufflevec-bitcast.ll
llvm/test/Transforms/InstCombine/signbit-lshr-and-icmpeq-zero.ll
llvm/test/Transforms/InstCombine/signbit-shl-and-icmpeq-zero.ll
llvm/test/Transforms/InstCombine/signed-mul-lack-of-overflow-check-via-mul-sdiv.ll
llvm/test/Transforms/InstCombine/signed-mul-overflow-check-via-mul-sdiv.ll
llvm/test/Transforms/InstCombine/simplify-demanded-bits-pointer.ll
llvm/test/Transforms/InstCombine/simplify-libcalls-erased.ll
llvm/test/Transforms/InstCombine/simplify-libcalls-inreg.ll
llvm/test/Transforms/InstCombine/sincospi.ll
llvm/test/Transforms/InstCombine/sink-alloca.ll
llvm/test/Transforms/InstCombine/sink-into-catchswitch.ll
llvm/test/Transforms/InstCombine/sink-into-ncd.ll
llvm/test/Transforms/InstCombine/sink-into-resume-block.ll
llvm/test/Transforms/InstCombine/sink-not-into-another-hand-of-and.ll
llvm/test/Transforms/InstCombine/sink-not-into-another-hand-of-or.ll
llvm/test/Transforms/InstCombine/sink_instruction.ll
llvm/test/Transforms/InstCombine/sqrt-nofast.ll
llvm/test/Transforms/InstCombine/sqrt.ll
llvm/test/Transforms/InstCombine/srem1.ll
llvm/test/Transforms/InstCombine/stack-overalign.ll
llvm/test/Transforms/InstCombine/stacksave-debuginfo.ll
llvm/test/Transforms/InstCombine/stacksaverestore.ll
llvm/test/Transforms/InstCombine/statepoint-cleanup.ll
llvm/test/Transforms/InstCombine/statepoint-iter.ll
llvm/test/Transforms/InstCombine/statepoint.ll
llvm/test/Transforms/InstCombine/stdiocall-bad-sig.ll
llvm/test/Transforms/InstCombine/store-load-unaliased-gep.ll
llvm/test/Transforms/InstCombine/store.ll
llvm/test/Transforms/InstCombine/storemerge-dbg.ll
llvm/test/Transforms/InstCombine/stpcpy-2.ll
llvm/test/Transforms/InstCombine/stpcpy_chk-2.ll
llvm/test/Transforms/InstCombine/str-int-3.ll
llvm/test/Transforms/InstCombine/strcall-bad-sig.ll
llvm/test/Transforms/InstCombine/strcat-1.ll
llvm/test/Transforms/InstCombine/strcat-2.ll
llvm/test/Transforms/InstCombine/strcat-3.ll
llvm/test/Transforms/InstCombine/strchr-2.ll
llvm/test/Transforms/InstCombine/strchr-4.ll
llvm/test/Transforms/InstCombine/strcmp-1.ll
llvm/test/Transforms/InstCombine/strcmp-2.ll
llvm/test/Transforms/InstCombine/strcmp-3.ll
llvm/test/Transforms/InstCombine/strcmp-4.ll
llvm/test/Transforms/InstCombine/strcpy-2.ll
llvm/test/Transforms/InstCombine/strcpy-nonzero-as.ll
llvm/test/Transforms/InstCombine/strcpy_chk-2.ll
llvm/test/Transforms/InstCombine/strcspn-1.ll
llvm/test/Transforms/InstCombine/strcspn-2.ll
llvm/test/Transforms/InstCombine/strlen-3.ll
llvm/test/Transforms/InstCombine/strlen-5.ll
llvm/test/Transforms/InstCombine/strlen-6.ll
llvm/test/Transforms/InstCombine/strlen-7.ll
llvm/test/Transforms/InstCombine/strlen-8.ll
llvm/test/Transforms/InstCombine/strlen-9.ll
llvm/test/Transforms/InstCombine/strlen_chk.ll
llvm/test/Transforms/InstCombine/strncat-1.ll
llvm/test/Transforms/InstCombine/strncmp-1.ll
llvm/test/Transforms/InstCombine/strncmp-4.ll
llvm/test/Transforms/InstCombine/strncmp-6.ll
llvm/test/Transforms/InstCombine/strncmp-wrong-datalayout.ll
llvm/test/Transforms/InstCombine/strncpy-3.ll
llvm/test/Transforms/InstCombine/strncpy-4.ll
llvm/test/Transforms/InstCombine/strncpy_chk-2.ll
llvm/test/Transforms/InstCombine/strnlen-1.ll
llvm/test/Transforms/InstCombine/strnlen-3.ll
llvm/test/Transforms/InstCombine/strnlen-6.ll
llvm/test/Transforms/InstCombine/strpbrk-1.ll
llvm/test/Transforms/InstCombine/strpbrk-2.ll
llvm/test/Transforms/InstCombine/strrchr-1.ll
llvm/test/Transforms/InstCombine/strrchr-2.ll
llvm/test/Transforms/InstCombine/strrchr-3.ll
llvm/test/Transforms/InstCombine/strspn-1.ll
llvm/test/Transforms/InstCombine/strstr-1.ll
llvm/test/Transforms/InstCombine/strstr-2.ll
llvm/test/Transforms/InstCombine/strto-1.ll
llvm/test/Transforms/InstCombine/struct-assign-tbaa-new.ll
llvm/test/Transforms/InstCombine/struct-assign-tbaa.ll
llvm/test/Transforms/InstCombine/sub-ashr-and-to-icmp-select.ll
llvm/test/Transforms/InstCombine/sub-ashr-or-to-icmp-select.ll
llvm/test/Transforms/InstCombine/sub-from-sub.ll
llvm/test/Transforms/InstCombine/sub-gep.ll
llvm/test/Transforms/InstCombine/sub-lshr-or-to-icmp-select.ll
llvm/test/Transforms/InstCombine/sub-minmax.ll
llvm/test/Transforms/InstCombine/sub.ll
llvm/test/Transforms/InstCombine/swifterror-argument-bitcast-fold.ll
llvm/test/Transforms/InstCombine/switch-constant-expr.ll
llvm/test/Transforms/InstCombine/tan.ll
llvm/test/Transforms/InstCombine/tbaa-store-to-load.ll
llvm/test/Transforms/InstCombine/tmp-alloca-bypass.ll
llvm/test/Transforms/InstCombine/token.ll
llvm/test/Transforms/InstCombine/trivial-dse-calls.ll
llvm/test/Transforms/InstCombine/trunc-inseltpoison.ll
llvm/test/Transforms/InstCombine/trunc-load.ll
llvm/test/Transforms/InstCombine/trunc.ll
llvm/test/Transforms/InstCombine/type_pun-inseltpoison.ll
llvm/test/Transforms/InstCombine/type_pun.ll
llvm/test/Transforms/InstCombine/uaddo.ll
llvm/test/Transforms/InstCombine/udiv-simplify.ll
llvm/test/Transforms/InstCombine/udivrem-change-width.ll
llvm/test/Transforms/InstCombine/umul-sign-check.ll
llvm/test/Transforms/InstCombine/unavailable-debug.ll
llvm/test/Transforms/InstCombine/unsigned-mul-lack-of-overflow-check-via-mul-udiv.ll
llvm/test/Transforms/InstCombine/unsigned-mul-overflow-check-via-mul-udiv.ll
llvm/test/Transforms/InstCombine/unused-nonnull.ll
llvm/test/Transforms/InstCombine/unwind-inline-asm.ll
llvm/test/Transforms/InstCombine/urem-simplify-bug.ll
llvm/test/Transforms/InstCombine/vararg.ll
llvm/test/Transforms/InstCombine/vec_demanded_elts-inseltpoison.ll
llvm/test/Transforms/InstCombine/vec_demanded_elts.ll
llvm/test/Transforms/InstCombine/vec_extract_2elts.ll
llvm/test/Transforms/InstCombine/vec_extract_var_elt-inseltpoison.ll
llvm/test/Transforms/InstCombine/vec_extract_var_elt.ll
llvm/test/Transforms/InstCombine/vec_gep_scalar_arg-inseltpoison.ll
llvm/test/Transforms/InstCombine/vec_gep_scalar_arg.ll
llvm/test/Transforms/InstCombine/vec_phi_extract-inseltpoison.ll
llvm/test/Transforms/InstCombine/vec_phi_extract.ll
llvm/test/Transforms/InstCombine/vec_shuffle-inseltpoison.ll
llvm/test/Transforms/InstCombine/vec_shuffle.ll
llvm/test/Transforms/InstCombine/vector-casts-inseltpoison.ll
llvm/test/Transforms/InstCombine/vector-casts.ll
llvm/test/Transforms/InstCombine/vector_gep1-inseltpoison.ll
llvm/test/Transforms/InstCombine/vector_gep1.ll
llvm/test/Transforms/InstCombine/vector_gep2.ll
llvm/test/Transforms/InstCombine/volatile_load_cast.ll
llvm/test/Transforms/InstCombine/volatile_store.ll
llvm/test/Transforms/InstCombine/vscale_alloca.ll
llvm/test/Transforms/InstCombine/vscale_cmp.ll
llvm/test/Transforms/InstCombine/vscale_extractelement.ll
llvm/test/Transforms/InstCombine/vscale_gep.ll
llvm/test/Transforms/InstCombine/vscale_insertelement-inseltpoison.ll
llvm/test/Transforms/InstCombine/vscale_insertelement.ll
llvm/test/Transforms/InstCombine/vscale_load.ll
llvm/test/Transforms/InstCombine/wcslen-2.ll
llvm/test/Transforms/InstCombine/weak-symbols.ll
llvm/test/Transforms/InstCombine/with_overflow.ll
llvm/test/Transforms/InstCombine/xor-icmps.ll
llvm/test/Transforms/InstCombine/xor-of-icmps-with-extra-uses.ll
llvm/test/Transforms/InstCombine/xor-of-or.ll
llvm/test/Transforms/InstCombine/xor.ll
llvm/test/Transforms/InstCombine/xor2.ll
llvm/test/Transforms/InstCombine/zext-or-icmp.ll

index 70ab97350364c88cb099446570546e9c5555a2bc..778083e3ae03a5718435725baf90c43fb80d88ec 100644 (file)
@@ -1,10 +1,10 @@
 ; RUN: opt < %s -passes=instcombine -disable-output
 
-@X = global i32 5               ; <i32*> [#uses=1]
+@X = global i32 5               ; <ptr> [#uses=1]
 
 define i64 @test() {
         %C = add i64 1, 2               ; <i64> [#uses=1]
-        %V = add i64 ptrtoint (i32* @X to i64), %C              ; <i64> [#uses=1]
+        %V = add i64 ptrtoint (ptr @X to i64), %C              ; <i64> [#uses=1]
         ret i64 %V
 }
 
index cb9243fed55655d89dde5954889f99af6a310ac3..d634224dd7b7bd71fe4b9a343c173b3600d76b15 100644 (file)
 ; END.
 
 target datalayout = "e-p:32:32"
-@silly = external constant i32          ; <i32*> [#uses=1]
+@silly = external constant i32          ; <ptr> [#uses=1]
 
-declare void @bzero(i8*, i32)
+declare void @bzero(ptr, i32)
 
-declare void @bcopy(i8*, i8*, i32)
+declare void @bcopy(ptr, ptr, i32)
 
-declare i32 @bcmp(i8*, i8*, i32)
+declare i32 @bcmp(ptr, ptr, i32)
 
-declare i32 @fputs(i8*, i8*)
+declare i32 @fputs(ptr, ptr)
 
-declare i32 @fputs_unlocked(i8*, i8*)
+declare i32 @fputs_unlocked(ptr, ptr)
 
 define i32 @function(i32 %a.1) {
 entry:
-        %a.0 = alloca i32               ; <i32*> [#uses=2]
-        %result = alloca i32            ; <i32*> [#uses=2]
-        store i32 %a.1, i32* %a.0
-        %tmp.0 = load i32, i32* %a.0         ; <i32> [#uses=1]
-        %tmp.1 = load i32, i32* @silly               ; <i32> [#uses=1]
+        %a.0 = alloca i32               ; <ptr> [#uses=2]
+        %result = alloca i32            ; <ptr> [#uses=2]
+        store i32 %a.1, ptr %a.0
+        %tmp.0 = load i32, ptr %a.0         ; <i32> [#uses=1]
+        %tmp.1 = load i32, ptr @silly               ; <i32> [#uses=1]
         %tmp.2 = add i32 %tmp.0, %tmp.1         ; <i32> [#uses=1]
-        store i32 %tmp.2, i32* %result
+        store i32 %tmp.2, ptr %result
         br label %return
 
 return:         ; preds = %entry
-        %tmp.3 = load i32, i32* %result              ; <i32> [#uses=1]
+        %tmp.3 = load i32, ptr %result              ; <i32> [#uses=1]
         ret i32 %tmp.3
 }
 
index 027299ff2540c9b1805c472d3c383237680867d9..e1309b9871dbe88425494a4603ad054083a43d25 100644 (file)
@@ -7,12 +7,12 @@ declare i32 @bitmap_clear(...)
 
 define i32 @oof() {
 entry:
-        %live_head = alloca i32         ; <i32*> [#uses=2]
-        %tmp.1 = icmp ne i32* %live_head, null          ; <i1> [#uses=1]
+        %live_head = alloca i32         ; <ptr> [#uses=2]
+        %tmp.1 = icmp ne ptr %live_head, null          ; <i1> [#uses=1]
         br i1 %tmp.1, label %then, label %UnifiedExitNode
 
 then:           ; preds = %entry
-        %tmp.4 = call i32 (...) @bitmap_clear( i32* %live_head )               ; <i32> [#uses=0]
+        %tmp.4 = call i32 (...) @bitmap_clear( ptr %live_head )               ; <i32> [#uses=0]
         br label %UnifiedExitNode
 
 UnifiedExitNode:                ; preds = %then, %entry
index f0dbc63deff9c66850d96e51f4aa4f160b503f3d..5cdea324c4bace40ac0d74c72233b1fbce2becf5 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: opt < %s -passes=instcombine -S | grep load
 
-define void @test(i32* %P) {
+define void @test(ptr %P) {
         ; Dead but not deletable!
-        %X = load volatile i32, i32* %P              ; <i32> [#uses=0]
+        %X = load volatile i32, ptr %P              ; <i32> [#uses=0]
         ret void
 }
index 0f27110c7fc7276d81f13b2079dae3eb96b91078..06af1443c24aeb34cb1b5bb8d8db98e6d2a23db2 100644 (file)
@@ -1,18 +1,18 @@
 ; RUN: opt < %s -passes=instcombine -disable-output
 
-declare i32* @bar()
+declare ptr @bar()
 
-define float* @foo() personality i32 (...)* @__gxx_personality_v0 {
-        %tmp.11 = invoke float* bitcast (i32* ()* @bar to float* ()*)( )
-                        to label %invoke_cont unwind label %X           ; <float*> [#uses=1]
+define ptr @foo() personality ptr @__gxx_personality_v0 {
+        %tmp.11 = invoke ptr @bar( )
+                        to label %invoke_cont unwind label %X           ; <ptr> [#uses=1]
 
 invoke_cont:            ; preds = %0
-        ret float* %tmp.11
+        ret ptr %tmp.11
 
 X:              ; preds = %0
-        %exn = landingpad {i8*, i32}
+        %exn = landingpad {ptr, i32}
                  cleanup
-        ret float* null
+        ret ptr null
 }
 
 declare i32 @__gxx_personality_v0(...)
index fe9946cede17c0729cad94981a7083ca1e97add2..88f8f7849e9eac46b94ead0b35cb3a2133effdf1 100644 (file)
@@ -6,8 +6,8 @@ target datalayout = "e-p:32:32"
 declare void @foo(...)
 
 define void @test(i64 %X) {
-        %Y = inttoptr i64 %X to i32*            ; <i32*> [#uses=1]
-        call void (...) @foo( i32* %Y )
+        %Y = inttoptr i64 %X to ptr            ; <ptr> [#uses=1]
+        call void (...) @foo( ptr %Y )
         ret void
 }
 
index 214ce68eda74b766657c20af36f1d5eaab7f5341..d68cbd8d1534685b8d0aba7c3c13ef1db671d0e1 100644 (file)
@@ -7,23 +7,23 @@
 ;
 ; RUN: opt < %s -passes=instcombine -disable-output
 
-declare i8* @test()
+declare ptr @test()
 
-define i32 @foo() personality i32 (...)* @__gxx_personality_v0 {
+define i32 @foo() personality ptr @__gxx_personality_v0 {
 entry:
         br i1 true, label %cont, label %call
 
 call:           ; preds = %entry
-        %P = invoke i32* bitcast (i8* ()* @test to i32* ()*)( )
-                        to label %cont unwind label %N          ; <i32*> [#uses=1]
+        %P = invoke ptr @test( )
+                        to label %cont unwind label %N          ; <ptr> [#uses=1]
 
 cont:           ; preds = %call, %entry
-        %P2 = phi i32* [ %P, %call ], [ null, %entry ]          ; <i32*> [#uses=1]
-        %V = load i32, i32* %P2              ; <i32> [#uses=1]
+        %P2 = phi ptr [ %P, %call ], [ null, %entry ]          ; <ptr> [#uses=1]
+        %V = load i32, ptr %P2              ; <i32> [#uses=1]
         ret i32 %V
 
 N:              ; preds = %call
-        %exn = landingpad {i8*, i32}
+        %exn = landingpad {ptr, i32}
                  cleanup
         ret i32 0
 }
index 7648079b2ffb11e1e476b909e892dd902dc7d1b1..65c13345f7de5fb3ea04be3ededae38efa74ac11 100644 (file)
@@ -2,9 +2,8 @@
 
 %Ty = type opaque
 
-define i32 @test(%Ty* %X) {
-        %Y = bitcast %Ty* %X to i32*            ; <i32*> [#uses=1]
-        %Z = load i32, i32* %Y               ; <i32> [#uses=1]
+define i32 @test(ptr %X) {
+        %Z = load i32, ptr %X               ; <i32> [#uses=1]
         ret i32 %Z
 }
 
index ad2226d8fc9e7117b26797919f6047db528dfea8..a9a07e3b0c63fd445e821110568296fb2bcbbac5 100644 (file)
@@ -1,9 +1,9 @@
 ; RUN: opt < %s -passes=instcombine -disable-output
 
-@p = weak global i32 0          ; <i32*> [#uses=1]
+@p = weak global i32 0          ; <ptr> [#uses=1]
 
 define i32 @test(i32 %x) {
-        %y = mul i32 %x, ptrtoint (i32* @p to i32)              ; <i32> [#uses=1]
+        %y = mul i32 %x, ptrtoint (ptr @p to i32)              ; <i32> [#uses=1]
         ret i32 %y
 }
 
index 10122e48ab6645d2565c5f072b49f3f850811a25..20eb459ff1f44df5298692e7002a64ac4ef4d372 100644 (file)
@@ -6,13 +6,13 @@
 ; so could produce incorrect results!
 
 define i32 @test(i1 %C) {
-        %X = alloca i32         ; <i32*> [#uses=3]
-        %X2 = alloca i32                ; <i32*> [#uses=2]
-        store i32 1, i32* %X
-        store i32 2, i32* %X2
-        %Y = select i1 %C, i32* %X, i32* %X2            ; <i32*> [#uses=1]
-        store i32 3, i32* %X
-        %Z = load i32, i32* %Y               ; <i32> [#uses=1]
+        %X = alloca i32         ; <ptr> [#uses=3]
+        %X2 = alloca i32                ; <ptr> [#uses=2]
+        store i32 1, ptr %X
+        store i32 2, ptr %X2
+        %Y = select i1 %C, ptr %X, ptr %X2            ; <ptr> [#uses=1]
+        store i32 3, ptr %X
+        %Z = load i32, ptr %Y               ; <i32> [#uses=1]
         ret i32 %Z
 }
 
index f711db0cb25e32bdf7f375eefb64685f202de038..cb73d607467f11321761c62ebd6d85b5545f772e 100644 (file)
@@ -6,19 +6,19 @@
 
 define i32 @test(i1 %C) {
 entry:
-        %X = alloca i32         ; <i32*> [#uses=3]
-        %X2 = alloca i32                ; <i32*> [#uses=2]
-        store i32 1, i32* %X
-        store i32 2, i32* %X2
+        %X = alloca i32         ; <ptr> [#uses=3]
+        %X2 = alloca i32                ; <ptr> [#uses=2]
+        store i32 1, ptr %X
+        store i32 2, ptr %X2
         br i1 %C, label %cond_true.i, label %cond_continue.i
 
 cond_true.i:            ; preds = %entry
         br label %cond_continue.i
 
 cond_continue.i:                ; preds = %cond_true.i, %entry
-        %mem_tmp.i.0 = phi i32* [ %X, %cond_true.i ], [ %X2, %entry ]           ; <i32*> [#uses=1]
-        store i32 3, i32* %X
-        %tmp.3 = load i32, i32* %mem_tmp.i.0         ; <i32> [#uses=1]
+        %mem_tmp.i.0 = phi ptr [ %X, %cond_true.i ], [ %X2, %entry ]           ; <ptr> [#uses=1]
+        store i32 3, ptr %X
+        %tmp.3 = load i32, ptr %mem_tmp.i.0         ; <i32> [#uses=1]
         ret i32 %tmp.3
 }
 
index 8fac45dbf27a6598c993553d28a22f7406250d64..e8a7a5a1185c8541d5afab965ee28196d701e71e 100644 (file)
@@ -25,17 +25,17 @@ define i1 @lt_signed_to_large_unsigned(i8 %SB) {
 ; PR28011 - https://llvm.org/bugs/show_bug.cgi?id=28011
 ; The above transform only applies to scalar integers; it shouldn't be attempted for constant expressions or vectors.
 
-@a = common global i32** null
+@a = common global ptr null
 @b = common global [1 x i32] zeroinitializer
 
 define i1 @PR28011(i16 %a) {
 ; CHECK-LABEL: @PR28011(
 ; CHECK-NEXT:    [[CONV:%.*]] = sext i16 [[A:%.*]] to i32
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i32 [[CONV]], or (i32 zext (i1 icmp ne (i32*** bitcast ([1 x i32]* @b to i32***), i32*** @a) to i32), i32 1)
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i32 [[CONV]], or (i32 zext (i1 icmp ne (ptr @b, ptr @a) to i32), i32 1)
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %conv = sext i16 %a to i32
-  %cmp = icmp ne i32 %conv, or (i32 zext (i1 icmp ne (i32*** bitcast ([1 x i32]* @b to i32***), i32*** @a) to i32), i32 1)
+  %cmp = icmp ne i32 %conv, or (i32 zext (i1 icmp ne (ptr @b, ptr @a) to i32), i32 1)
   ret i1 %cmp
 }
 
index 5ad06cddf4c07ac37683541d9e2d5c844015f92d..ff43bd1914fa9f6bda6c3591549e83f6b4352799 100644 (file)
@@ -2,13 +2,13 @@
 
 ; This example caused instcombine to spin into an infinite loop.
 
-define void @test(i32* %P) {
+define void @test(ptr %P) {
         ret void
 
 Dead:           ; preds = %Dead
         %X = phi i32 [ %Y, %Dead ]              ; <i32> [#uses=1]
         %Y = sdiv i32 %X, 10            ; <i32> [#uses=2]
-        store i32 %Y, i32* %P
+        store i32 %Y, ptr %P
         br label %Dead
 }
 
index 7faaa8a85e991bc31bbfc9f17a28fb063becf7a1..3996d0729698969770540df5879f1b68e7ca708b 100644 (file)
@@ -1,8 +1,8 @@
 ; RUN: opt < %s -passes=instcombine -S | grep and
 ; PR913
 
-define i32 @test(i32* %tmp1) {
-        %tmp.i = load i32, i32* %tmp1                ; <i32> [#uses=1]
+define i32 @test(ptr %tmp1) {
+        %tmp.i = load i32, ptr %tmp1                ; <i32> [#uses=1]
         %tmp = bitcast i32 %tmp.i to i32                ; <i32> [#uses=1]
         %tmp2.ui = lshr i32 %tmp, 5             ; <i32> [#uses=1]
         %tmp2 = bitcast i32 %tmp2.ui to i32             ; <i32> [#uses=1]
index 16b5940d349863166caf6967eb92ab9fc6da3d0e..8ee737a995e7a0bcac744f7fca0347ebddcb5559 100644 (file)
@@ -7,29 +7,23 @@ target triple = "i686-pc-linux-gnu"
 
 define i32 @visible(i32 %direction, i64 %p1.0, i64 %p2.0, i64 %p3.0) {
 entry:
-       %p1_addr = alloca %struct.point         ; <%struct.point*> [#uses=2]
-       %p2_addr = alloca %struct.point         ; <%struct.point*> [#uses=2]
-       %p3_addr = alloca %struct.point         ; <%struct.point*> [#uses=2]
+       %p1_addr = alloca %struct.point         ; <ptr> [#uses=2]
+       %p2_addr = alloca %struct.point         ; <ptr> [#uses=2]
+       %p3_addr = alloca %struct.point         ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       %tmp = bitcast %struct.point* %p1_addr to { i64 }*              ; <{ i64 }*> [#uses=1]
-       %tmp.upgrd.1 = getelementptr { i64 }, { i64 }* %tmp, i64 0, i32 0               ; <i64*> [#uses=1]
-       store i64 %p1.0, i64* %tmp.upgrd.1
-       %tmp1 = bitcast %struct.point* %p2_addr to { i64 }*             ; <{ i64 }*> [#uses=1]
-       %tmp2 = getelementptr { i64 }, { i64 }* %tmp1, i64 0, i32 0             ; <i64*> [#uses=1]
-       store i64 %p2.0, i64* %tmp2
-       %tmp3 = bitcast %struct.point* %p3_addr to { i64 }*             ; <{ i64 }*> [#uses=1]
-       %tmp4 = getelementptr { i64 }, { i64 }* %tmp3, i64 0, i32 0             ; <i64*> [#uses=1]
-       store i64 %p3.0, i64* %tmp4
+       %tmp.upgrd.1 = getelementptr { i64 }, ptr %p1_addr, i64 0, i32 0                ; <ptr> [#uses=1]
+       store i64 %p1.0, ptr %tmp.upgrd.1
+       %tmp2 = getelementptr { i64 }, ptr %p2_addr, i64 0, i32 0               ; <ptr> [#uses=1]
+       store i64 %p2.0, ptr %tmp2
+       %tmp4 = getelementptr { i64 }, ptr %p3_addr, i64 0, i32 0               ; <ptr> [#uses=1]
+       store i64 %p3.0, ptr %tmp4
        %tmp.upgrd.2 = icmp eq i32 %direction, 0                ; <i1> [#uses=1]
-       %tmp5 = bitcast %struct.point* %p1_addr to { i64 }*             ; <{ i64 }*> [#uses=1]
-       %tmp6 = getelementptr { i64 }, { i64 }* %tmp5, i64 0, i32 0             ; <i64*> [#uses=1]
-       %tmp.upgrd.3 = load i64, i64* %tmp6             ; <i64> [#uses=1]
-       %tmp7 = bitcast %struct.point* %p2_addr to { i64 }*             ; <{ i64 }*> [#uses=1]
-       %tmp8 = getelementptr { i64 }, { i64 }* %tmp7, i64 0, i32 0             ; <i64*> [#uses=1]
-       %tmp9 = load i64, i64* %tmp8            ; <i64> [#uses=1]
-       %tmp10 = bitcast %struct.point* %p3_addr to { i64 }*            ; <{ i64 }*> [#uses=1]
-       %tmp11 = getelementptr { i64 }, { i64 }* %tmp10, i64 0, i32 0           ; <i64*> [#uses=1]
-       %tmp12 = load i64, i64* %tmp11          ; <i64> [#uses=1]
+       %tmp6 = getelementptr { i64 }, ptr %p1_addr, i64 0, i32 0               ; <ptr> [#uses=1]
+       %tmp.upgrd.3 = load i64, ptr %tmp6              ; <i64> [#uses=1]
+       %tmp8 = getelementptr { i64 }, ptr %p2_addr, i64 0, i32 0               ; <ptr> [#uses=1]
+       %tmp9 = load i64, ptr %tmp8             ; <i64> [#uses=1]
+       %tmp11 = getelementptr { i64 }, ptr %p3_addr, i64 0, i32 0              ; <ptr> [#uses=1]
+       %tmp12 = load i64, ptr %tmp11           ; <i64> [#uses=1]
        %tmp13 = call i32 @determinant( i64 %tmp.upgrd.3, i64 %tmp9, i64 %tmp12 )               ; <i32> [#uses=2]
        br i1 %tmp.upgrd.2, label %cond_true, label %cond_false
 
index 71b8e61967af50d20fa423dd02aa1f7aa88c1e53..392f7fc75423912290053bafe7514450aede0128 100644 (file)
@@ -8,28 +8,22 @@ target triple = "i686-pc-linux-gnu"
 
 define i32 @visible(i32 %direction, i64 %p1.0, i64 %p2.0, i64 %p3.0) {
 entry:
-        %p1_addr = alloca %struct.point         ; <%struct.point*> [#uses=2]
-        %p2_addr = alloca %struct.point         ; <%struct.point*> [#uses=2]
-        %p3_addr = alloca %struct.point         ; <%struct.point*> [#uses=2]
-        %tmp = bitcast %struct.point* %p1_addr to { i64 }*              ; <{ i64 }*> [#uses=1]
-        %tmp.upgrd.1 = getelementptr { i64 }, { i64 }* %tmp, i32 0, i32 0                ; <i64*> [#uses=1]
-        store i64 %p1.0, i64* %tmp.upgrd.1
-        %tmp1 = bitcast %struct.point* %p2_addr to { i64 }*             ; <{ i64 }*> [#uses=1]
-        %tmp2 = getelementptr { i64 }, { i64 }* %tmp1, i32 0, i32 0              ; <i64*> [#uses=1]
-        store i64 %p2.0, i64* %tmp2
-        %tmp3 = bitcast %struct.point* %p3_addr to { i64 }*             ; <{ i64 }*> [#uses=1]
-        %tmp4 = getelementptr { i64 }, { i64 }* %tmp3, i32 0, i32 0              ; <i64*> [#uses=1]
-        store i64 %p3.0, i64* %tmp4
+        %p1_addr = alloca %struct.point         ; <ptr> [#uses=2]
+        %p2_addr = alloca %struct.point         ; <ptr> [#uses=2]
+        %p3_addr = alloca %struct.point         ; <ptr> [#uses=2]
+        %tmp.upgrd.1 = getelementptr { i64 }, ptr %p1_addr, i32 0, i32 0                ; <ptr> [#uses=1]
+        store i64 %p1.0, ptr %tmp.upgrd.1
+        %tmp2 = getelementptr { i64 }, ptr %p2_addr, i32 0, i32 0              ; <ptr> [#uses=1]
+        store i64 %p2.0, ptr %tmp2
+        %tmp4 = getelementptr { i64 }, ptr %p3_addr, i32 0, i32 0              ; <ptr> [#uses=1]
+        store i64 %p3.0, ptr %tmp4
         %tmp.upgrd.2 = icmp eq i32 %direction, 0                ; <i1> [#uses=1]
-        %tmp5 = bitcast %struct.point* %p1_addr to { i64 }*             ; <{ i64 }*> [#uses=1]
-        %tmp6 = getelementptr { i64 }, { i64 }* %tmp5, i32 0, i32 0              ; <i64*> [#uses=1]
-        %tmp.upgrd.3 = load i64, i64* %tmp6          ; <i64> [#uses=1]
-        %tmp7 = bitcast %struct.point* %p2_addr to { i64 }*             ; <{ i64 }*> [#uses=1]
-        %tmp8 = getelementptr { i64 }, { i64 }* %tmp7, i32 0, i32 0              ; <i64*> [#uses=1]
-        %tmp9 = load i64, i64* %tmp8         ; <i64> [#uses=1]
-        %tmp10 = bitcast %struct.point* %p3_addr to { i64 }*            ; <{ i64 }*> [#uses=1]
-        %tmp11 = getelementptr { i64 }, { i64 }* %tmp10, i32 0, i32 0            ; <i64*> [#uses=1]
-        %tmp12 = load i64, i64* %tmp11               ; <i64> [#uses=1]
+        %tmp6 = getelementptr { i64 }, ptr %p1_addr, i32 0, i32 0              ; <ptr> [#uses=1]
+        %tmp.upgrd.3 = load i64, ptr %tmp6          ; <i64> [#uses=1]
+        %tmp8 = getelementptr { i64 }, ptr %p2_addr, i32 0, i32 0              ; <ptr> [#uses=1]
+        %tmp9 = load i64, ptr %tmp8         ; <i64> [#uses=1]
+        %tmp11 = getelementptr { i64 }, ptr %p3_addr, i32 0, i32 0            ; <ptr> [#uses=1]
+        %tmp12 = load i64, ptr %tmp11               ; <i64> [#uses=1]
         %tmp13 = call i32 @determinant( i64 %tmp.upgrd.3, i64 %tmp9, i64 %tmp12 )         ; <i32> [#uses=2]
         %tmp14 = icmp slt i32 %tmp13, 0         ; <i1> [#uses=1]
         %tmp26 = icmp sgt i32 %tmp13, 0         ; <i1> [#uses=1]
index 0833d910f992cc55ce23bba0bf1d8d86b40935a1..1e64f90de6c667269913dd51cb7ac0dddc31e7c4 100644 (file)
@@ -3,21 +3,21 @@
 
 target datalayout = "e-p:32:32"
 target triple = "i686-pc-linux-gnu"
-@r = external global [17 x i32]         ; <[17 x i32]*> [#uses=1]
+@r = external global [17 x i32]         ; <ptr> [#uses=1]
 
-define i1 @print_pgm_cond_true(i32 %tmp12.reload, i32* %tmp16.out) {
+define i1 @print_pgm_cond_true(i32 %tmp12.reload, ptr %tmp16.out) {
 ; CHECK-LABEL: @print_pgm_cond_true(
 ; CHECK-NEXT:  newFuncRoot:
 ; CHECK-NEXT:    br label [[COND_TRUE:%.*]]
 ; CHECK:       bb27.exitStub:
-; CHECK-NEXT:    store i32 [[TMP16:%.*]], i32* [[TMP16_OUT:%.*]], align 4
+; CHECK-NEXT:    store i32 [[TMP16:%.*]], ptr [[TMP16_OUT:%.*]], align 4
 ; CHECK-NEXT:    ret i1 true
 ; CHECK:       cond_next23.exitStub:
-; CHECK-NEXT:    store i32 [[TMP16]], i32* [[TMP16_OUT]], align 4
+; CHECK-NEXT:    store i32 [[TMP16]], ptr [[TMP16_OUT]], align 4
 ; CHECK-NEXT:    ret i1 false
 ; CHECK:       cond_true:
-; CHECK-NEXT:    [[TMP15:%.*]] = getelementptr [17 x i32], [17 x i32]* @r, i32 0, i32 [[TMP12_RELOAD:%.*]]
-; CHECK-NEXT:    [[TMP16]] = load i32, i32* [[TMP15]], align 4
+; CHECK-NEXT:    [[TMP15:%.*]] = getelementptr [17 x i32], ptr @r, i32 0, i32 [[TMP12_RELOAD:%.*]]
+; CHECK-NEXT:    [[TMP16]] = load i32, ptr [[TMP15]], align 4
 ; CHECK-NEXT:    [[TMP0:%.*]] = add i32 [[TMP16]], -32
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult i32 [[TMP0]], -63
 ; CHECK-NEXT:    br i1 [[TMP1]], label [[BB27_EXITSTUB:%.*]], label [[COND_NEXT23_EXITSTUB:%.*]]
@@ -26,35 +26,35 @@ newFuncRoot:
   br label %cond_true
 
 bb27.exitStub:          ; preds = %cond_true
-  store i32 %tmp16, i32* %tmp16.out
+  store i32 %tmp16, ptr %tmp16.out
   ret i1 true
 
 cond_next23.exitStub:           ; preds = %cond_true
-  store i32 %tmp16, i32* %tmp16.out
+  store i32 %tmp16, ptr %tmp16.out
   ret i1 false
 
 cond_true:              ; preds = %newFuncRoot
-  %tmp15 = getelementptr [17 x i32], [17 x i32]* @r, i32 0, i32 %tmp12.reload         ; <i32*> [#uses=1]
-  %tmp16 = load i32, i32* %tmp15               ; <i32> [#uses=4]
+  %tmp15 = getelementptr [17 x i32], ptr @r, i32 0, i32 %tmp12.reload         ; <ptr> [#uses=1]
+  %tmp16 = load i32, ptr %tmp15               ; <i32> [#uses=4]
   %tmp18 = icmp slt i32 %tmp16, -31               ; <i1> [#uses=1]
   %tmp21 = icmp sgt i32 %tmp16, 31                ; <i1> [#uses=1]
   %bothcond = or i1 %tmp18, %tmp21                ; <i1> [#uses=1]
   br i1 %bothcond, label %bb27.exitStub, label %cond_next23.exitStub
 }
 
-define i1 @print_pgm_cond_true_logical(i32 %tmp12.reload, i32* %tmp16.out) {
+define i1 @print_pgm_cond_true_logical(i32 %tmp12.reload, ptr %tmp16.out) {
 ; CHECK-LABEL: @print_pgm_cond_true_logical(
 ; CHECK-NEXT:  newFuncRoot:
 ; CHECK-NEXT:    br label [[COND_TRUE:%.*]]
 ; CHECK:       bb27.exitStub:
-; CHECK-NEXT:    store i32 [[TMP16:%.*]], i32* [[TMP16_OUT:%.*]], align 4
+; CHECK-NEXT:    store i32 [[TMP16:%.*]], ptr [[TMP16_OUT:%.*]], align 4
 ; CHECK-NEXT:    ret i1 true
 ; CHECK:       cond_next23.exitStub:
-; CHECK-NEXT:    store i32 [[TMP16]], i32* [[TMP16_OUT]], align 4
+; CHECK-NEXT:    store i32 [[TMP16]], ptr [[TMP16_OUT]], align 4
 ; CHECK-NEXT:    ret i1 false
 ; CHECK:       cond_true:
-; CHECK-NEXT:    [[TMP15:%.*]] = getelementptr [17 x i32], [17 x i32]* @r, i32 0, i32 [[TMP12_RELOAD:%.*]]
-; CHECK-NEXT:    [[TMP16]] = load i32, i32* [[TMP15]], align 4
+; CHECK-NEXT:    [[TMP15:%.*]] = getelementptr [17 x i32], ptr @r, i32 0, i32 [[TMP12_RELOAD:%.*]]
+; CHECK-NEXT:    [[TMP16]] = load i32, ptr [[TMP15]], align 4
 ; CHECK-NEXT:    [[TMP0:%.*]] = add i32 [[TMP16]], -32
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult i32 [[TMP0]], -63
 ; CHECK-NEXT:    br i1 [[TMP1]], label [[BB27_EXITSTUB:%.*]], label [[COND_NEXT23_EXITSTUB:%.*]]
@@ -63,16 +63,16 @@ newFuncRoot:
   br label %cond_true
 
 bb27.exitStub:          ; preds = %cond_true
-  store i32 %tmp16, i32* %tmp16.out
+  store i32 %tmp16, ptr %tmp16.out
   ret i1 true
 
 cond_next23.exitStub:           ; preds = %cond_true
-  store i32 %tmp16, i32* %tmp16.out
+  store i32 %tmp16, ptr %tmp16.out
   ret i1 false
 
 cond_true:              ; preds = %newFuncRoot
-  %tmp15 = getelementptr [17 x i32], [17 x i32]* @r, i32 0, i32 %tmp12.reload         ; <i32*> [#uses=1]
-  %tmp16 = load i32, i32* %tmp15               ; <i32> [#uses=4]
+  %tmp15 = getelementptr [17 x i32], ptr @r, i32 0, i32 %tmp12.reload         ; <ptr> [#uses=1]
+  %tmp16 = load i32, ptr %tmp15               ; <i32> [#uses=4]
   %tmp18 = icmp slt i32 %tmp16, -31               ; <i1> [#uses=1]
   %tmp21 = icmp sgt i32 %tmp16, 31                ; <i1> [#uses=1]
   %bothcond = select i1 %tmp18, i1 true, i1 %tmp21                ; <i1> [#uses=1]
index 80e43cb0a89e488c18025dd881ed51a8e0dd17d9..07ff176f1593fc7f2b665f0b17d32123bd9fdb08 100644 (file)
@@ -6,17 +6,17 @@
 target datalayout = "e-p:32:32"
 target triple = "i686-pc-linux-gnu"
        %struct.internal_state = type { i32 }
-       %struct.mng_data = type { i32, i8*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i8, i32, i32, i32, i32, i16, i16, i16, i8, i8, double, double, double, i8, i8, i8, i8, i32, i32, i32, i32, i32, i8, i32, i32, i8*, i8* (i32)*, void (i8*, i32)*, void (i8*, i8*, i32)*, i8 (%struct.mng_data*)*, i8 (%struct.mng_data*)*, i8 (%struct.mng_data*, i8*, i32, i32*)*, i8 (%struct.mng_data*, i8*, i32, i32*)*, i8 (%struct.mng_data*, i32, i8, i32, i32, i32, i32, i8*)*, i8 (%struct.mng_data*, i32, i32, i8*)*, i8 (%struct.mng_data*, i32, i32)*, i8 (%struct.mng_data*, i8, i8*, i8*, i8*, i8*)*, i8 (%struct.mng_data*)*, i8 (%struct.mng_data*, i8*)*, i8 (%struct.mng_data*, i8*)*, i8 (%struct.mng_data*, i32, i32)*, i8 (%struct.mng_data*, i32, i32, i8*)*, i8 (%struct.mng_data*, i8, i8, i32, i32)*, i8* (%struct.mng_data*, i32)*, i8* (%struct.mng_data*, i32)*, i8* (%struct.mng_data*, i32)*, i8 (%struct.mng_data*, i32, i32, i32, i32)*, i32 (%struct.mng_data*)*, i8 (%struct.mng_data*, i32)*, i8 (%struct.mng_data*, i32)*, i8 (%struct.mng_data*, i32, i32, i32, i32, i32, i32, i32, i32)*, i8 (%struct.mng_data*, i8)*, i8 (%struct.mng_data*, i32, i8*)*, i8 (%struct.mng_data*, i32, i8, i8*)*, i8, i32, i32, i8*, i8*, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32, i8, i8, i8, i8, i8, i32, i8, i8, i8, i32, i8*, i32, i8*, i32, i8, i8, i8, i32, i8*, i8*, i32, i32, i8*, i8*, %struct.mng_pushdata*, %struct.mng_pushdata*, %struct.mng_pushdata*, %struct.mng_pushdata*, i8, i8, i32, i32, i8*, i8, i8, i32, i32, i32, i32, i32, i32, i8, i8, i8, i8, i32, i32, i8*, i32, i32, i32, i8, i8, i32, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i8*, i8*, i8*, i32, i8*, i8*, i8*, i8*, i8*, %struct.mng_savedata*, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8*, i8*, i8*, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, [256 x i8], double, void ()*, void ()*, void ()*, void ()*, void ()*, void ()*, void ()*, void ()*, void ()*, void ()*, void ()*, void ()*, i16, i8, i8, i8, i8, i8, i32, i32, i8, i32, i32, i32, i32, i16, i16, i16, i8, i16, i8, i32, i32, i32, i32, i8, i32, i32, i8, i32, i32, i32, i32, i8, i32, i32, i8, i32, i32, i32, i32, i32, i8, i32, i8, i16, i16, i16, i16, i32, [256 x %struct.mng_palette8e], i32, [256 x i8], i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i8*, i16, i16, i16, i8*, i8, i8, i32, i32, i32, i32, i8, void ()*, void ()*, void ()*, void ()*, void ()*, void ()*, i8*, i8, i8, i8, i32, i8*, i8*, i16, i16, i16, i16, i32, i32, i8*, %struct.z_stream, i32, i32, i32, i32, i32, i32, i8, i8, [256 x i32], i8 }
+       %struct.mng_data = type { i32, ptr, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i32, i32, i8, i32, i32, i32, i32, i16, i16, i16, i8, i8, double, double, double, i8, i8, i8, i8, i32, i32, i32, i32, i32, i8, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i32, i32, ptr, ptr, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, i32, i8, i8, i8, i8, i8, i32, i8, i8, i8, i32, ptr, i32, ptr, i32, i8, i8, i8, i32, ptr, ptr, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, i32, i32, ptr, i8, i8, i32, i32, i32, i32, i32, i32, i8, i8, i8, i8, i32, i32, ptr, i32, i32, i32, i8, i8, i32, i32, i32, i32, i8, i8, i8, i8, i8, i8, i8, i8, i8, i32, ptr, ptr, ptr, i32, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, [256 x i8], double, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i16, i8, i8, i8, i8, i8, i32, i32, i8, i32, i32, i32, i32, i16, i16, i16, i8, i16, i8, i32, i32, i32, i32, i8, i32, i32, i8, i32, i32, i32, i32, i8, i32, i32, i8, i32, i32, i32, i32, i32, i8, i32, i8, i16, i16, i16, i16, i32, [256 x %struct.mng_palette8e], i32, [256 x i8], i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, ptr, i16, i16, i16, ptr, i8, i8, i32, i32, i32, i32, i8, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i8, i8, i8, i32, ptr, ptr, i16, i16, i16, i16, i32, i32, ptr, %struct.z_stream, i32, i32, i32, i32, i32, i32, i8, i8, [256 x i32], i8 }
        %struct.mng_palette8e = type { i8, i8, i8 }
-       %struct.mng_pushdata = type { i8*, i8*, i32, i8, i8*, i32 }
-       %struct.mng_savedata = type { i8, i8, i8, i8, i8, i8, i8, i16, i16, i16, i8, i16, i8, i8, i32, i32, i8, i32, i32, i32, i32, i32, [256 x %struct.mng_palette8e], i32, [256 x i8], i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, i8*, i16, i16, i16 }
-       %struct.z_stream = type { i8*, i32, i32, i8*, i32, i32, i8*, %struct.internal_state*, i8* (i8*, i32, i32)*, void (i8*, i8*)*, i8*, i32, i32, i32 }
+       %struct.mng_pushdata = type { ptr, ptr, i32, i8, ptr, i32 }
+       %struct.mng_savedata = type { i8, i8, i8, i8, i8, i8, i8, i16, i16, i16, i8, i16, i8, i8, i32, i32, i8, i32, i32, i32, i32, i32, [256 x %struct.mng_palette8e], i32, [256 x i8], i32, i32, i32, i32, i32, i32, i32, i32, i32, i8, i32, ptr, i16, i16, i16 }
+       %struct.z_stream = type { ptr, i32, i32, ptr, i32, i32, ptr, ptr, ptr, ptr, ptr, i32, i32, i32 }
 
-define void @mng_write_basi(i8* %src1, i16* %src2) {
+define void @mng_write_basi(ptr %src1, ptr %src2) {
 entry:
-       %tmp = load i8, i8* %src1 ; <i8> [#uses=1]
+       %tmp = load i8, ptr %src1 ; <i8> [#uses=1]
        %tmp.upgrd.1 = icmp ugt i8 %tmp, 8              ; <i1> [#uses=1]
-       %tmp.upgrd.2 = load i16, i16* %src2; <i16> [#uses=2]
+       %tmp.upgrd.2 = load i16, ptr %src2; <i16> [#uses=2]
        %tmp3 = icmp eq i16 %tmp.upgrd.2, 255           ; <i1> [#uses=1]
        %tmp7 = icmp eq i16 %tmp.upgrd.2, -1            ; <i1> [#uses=1]
        %bOpaque.0.in = select i1 %tmp.upgrd.1, i1 %tmp7, i1 %tmp3              ; <i1> [#uses=1]
index 113ada3df9d93c4946dbb71b9227c9b15373f0b9..242c21825aded93642cc4fcd54ee0536a06c6eca 100644 (file)
@@ -10,15 +10,15 @@ define i32 @test2(i32 %C) {
 entry:
        %A = alloca i32
        %B = alloca i32
-       %tmp = call i32 (...) @bar( i32* %A )           ; <i32> [#uses=0]
-       %T = load i32, i32* %A          ; <i32> [#uses=1]
+       %tmp = call i32 (...) @bar( ptr %A )            ; <i32> [#uses=0]
+       %T = load i32, ptr %A           ; <i32> [#uses=1]
        %tmp2 = icmp eq i32 %C, 0               ; <i1> [#uses=1]
        br i1 %tmp2, label %cond_next, label %cond_true
 
 cond_true:             ; preds = %entry
-       store i32 123, i32* %B
+       store i32 123, ptr %B
        call i32 @test2( i32 123 )              ; <i32>:0 [#uses=0]
-       %T1 = load i32, i32* %B         ; <i32> [#uses=1]
+       %T1 = load i32, ptr %B          ; <i32> [#uses=1]
        br label %cond_next
 
 cond_next:             ; preds = %cond_true, %entry
index b7e2bc0de95074f3ea7b21dbd2ca9f8efd35a125..cddd175d3225ff7fbbbb774a9d97bc2025e048eb 100644 (file)
@@ -6,17 +6,17 @@
 ; compile a kernel though...
 
 target datalayout = "e-p:32:32"
-@str = internal constant [6 x i8] c"%llx\0A\00"         ; <[6 x i8]*> [#uses=1]
+@str = internal constant [6 x i8] c"%llx\0A\00"         ; <ptr> [#uses=1]
 
-declare i32 @printf(i8*, ...)
+declare i32 @printf(ptr, ...)
 
-define i32 @main(i32 %x, i8** %a) {
+define i32 @main(i32 %x, ptr %a) {
 entry:
-        %tmp = getelementptr [6 x i8], [6 x i8]* @str, i32 0, i64 0               ; <i8*> [#uses=1]
-        %tmp1 = load i8*, i8** %a            ; <i8*> [#uses=1]
-        %tmp2 = ptrtoint i8* %tmp1 to i32               ; <i32> [#uses=1]
+        %tmp = getelementptr [6 x i8], ptr @str, i32 0, i64 0               ; <ptr> [#uses=1]
+        %tmp1 = load ptr, ptr %a            ; <ptr> [#uses=1]
+        %tmp2 = ptrtoint ptr %tmp1 to i32               ; <i32> [#uses=1]
         %tmp3 = zext i32 %tmp2 to i64           ; <i64> [#uses=1]
-        %tmp.upgrd.1 = call i32 (i8*, ...) @printf( i8* %tmp, i64 %tmp3 )              ; <i32> [#uses=0]
+        %tmp.upgrd.1 = call i32 (ptr, ...) @printf( ptr %tmp, i64 %tmp3 )              ; <i32> [#uses=0]
         ret i32 0
 }
 
index 45164f89c925b76a6be07ddd61e8a8ca774a9af8..2883fbe088216a7fcac1de037b1f02ec104138b4 100644 (file)
@@ -3,12 +3,12 @@
 
 target datalayout = "e-p:32:32"
 target triple = "i686-pc-linux-gnu"
-       %struct.termbox = type { %struct.termbox*, i32, i32, i32, i32, i32 }
+       %struct.termbox = type { ptr, i32, i32, i32, i32, i32 }
 
 
 define void @ggenorien() {
 entry:
-       %tmp68 = icmp eq %struct.termbox* null, null            ; <i1> [#uses=1]
+       %tmp68 = icmp eq ptr null, null         ; <i1> [#uses=1]
        br i1 %tmp68, label %cond_next448, label %bb80
 
 bb80:          ; preds = %entry
index b3c00614f8fb5094edaca9f19d20b95218edd9d9..2f0a49c4f5e6cf1d86ad27d056e6af7685bff9a4 100644 (file)
@@ -9,11 +9,9 @@ define i32 @main() {
 ; CHECK-LABEL: @main(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[U:%.*]] = alloca %struct..1anon, align 8
-; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds %struct..1anon, %struct..1anon* [[U]], i64 0, i32 0
-; CHECK-NEXT:    store double 0x7FF0000000000000, double* [[TMP1]], align 8
-; CHECK-NEXT:    [[TMP34:%.*]] = bitcast %struct..1anon* [[U]] to %struct..0anon*
-; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds %struct..0anon, %struct..0anon* [[TMP34]], i64 0, i32 1
-; CHECK-NEXT:    [[TMP6:%.*]] = load i32, i32* [[TMP5]], align 4
+; CHECK-NEXT:    store double 0x7FF0000000000000, ptr [[U]], align 8
+; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds %struct..0anon, ptr [[U]], i64 0, i32 1
+; CHECK-NEXT:    [[TMP6:%.*]] = load i32, ptr [[TMP5]], align 4
 ; CHECK-NEXT:    [[TMP89:%.*]] = and i32 [[TMP6]], 2146435072
 ; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq i32 [[TMP89]], 2146435072
 ; CHECK-NEXT:    br i1 [[TMP0]], label %cond_false, label %cond_true
@@ -24,12 +22,9 @@ define i32 @main() {
 ;
 entry:
   %u = alloca %struct..1anon, align 8
-  %tmp1 = getelementptr %struct..1anon, %struct..1anon* %u, i32 0, i32 0
-  store double 0x7FF0000000000000, double* %tmp1
-  %tmp3 = getelementptr %struct..1anon, %struct..1anon* %u, i32 0, i32 0
-  %tmp34 = bitcast double* %tmp3 to %struct..0anon*
-  %tmp5 = getelementptr %struct..0anon, %struct..0anon* %tmp34, i32 0, i32 1
-  %tmp6 = load i32, i32* %tmp5
+  store double 0x7FF0000000000000, ptr %u
+  %tmp5 = getelementptr %struct..0anon, ptr %u, i32 0, i32 1
+  %tmp6 = load i32, ptr %tmp5
   %tmp7 = shl i32 %tmp6, 1
   %tmp8 = lshr i32 %tmp7, 21
   %tmp89 = trunc i32 %tmp8 to i16
index 05d9c593eb23b8722eb4565db8b94339586ecde6..105d52dfec07e4d72871d2315836dba0bfd30bfd 100644 (file)
@@ -6,8 +6,8 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 target triple = "i686-pc-linux-gnu"
 
 
-define i1 @test(i32* %tmp141, i32* %tmp145, 
-            i32 %b8, i32 %iftmp.430.0, i32* %tmp134.out, i32* %tmp137.out)
+define i1 @test(ptr %tmp141, ptr %tmp145, 
+            i32 %b8, i32 %iftmp.430.0, ptr %tmp134.out, ptr %tmp137.out)
 {
 newFuncRoot:
        %tmp133 = and i32 %b8, 1                ; <i32> [#uses=1]
@@ -15,21 +15,21 @@ newFuncRoot:
        %tmp136 = ashr i32 %b8, 1               ; <i32> [#uses=1]
        %tmp137 = shl i32 %tmp136, 3            ; <i32> [#uses=3]
        %tmp139 = ashr i32 %tmp134, 2           ; <i32> [#uses=1]
-       store i32 %tmp139, i32* %tmp141
+       store i32 %tmp139, ptr %tmp141
        %tmp143 = ashr i32 %tmp137, 2           ; <i32> [#uses=1]
-       store i32 %tmp143, i32* %tmp145
+       store i32 %tmp143, ptr %tmp145
        icmp eq i32 %iftmp.430.0, 0             ; <i1>:0 [#uses=1]
        zext i1 %0 to i8                ; <i8>:1 [#uses=1]
        icmp ne i8 %1, 0                ; <i1>:2 [#uses=1]
        br i1 %2, label %cond_true147.exitStub, label %cond_false252.exitStub
 
 cond_true147.exitStub:         ; preds = %newFuncRoot
-       store i32 %tmp134, i32* %tmp134.out
-       store i32 %tmp137, i32* %tmp137.out
+       store i32 %tmp134, ptr %tmp134.out
+       store i32 %tmp137, ptr %tmp137.out
        ret i1 true
 
 cond_false252.exitStub:                ; preds = %newFuncRoot
-       store i32 %tmp134, i32* %tmp134.out
-       store i32 %tmp137, i32* %tmp137.out
+       store i32 %tmp134, ptr %tmp134.out
+       store i32 %tmp137, ptr %tmp137.out
        ret i1 false
 }
index ecc8a28cba2f20bc562a4e8d4f3c416082712d84..3610781357a904e98fe854b76f0059da6e2b805e 100644 (file)
@@ -4,15 +4,13 @@ target datalayout = "E-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 target triple = "powerpc-unknown-linux-gnu"
 
 %struct.abc = type { i32, [32 x i8] }        
-%struct.def = type { i8**, %struct.abc }        
+%struct.def = type { ptr, %struct.abc }        
         %struct.anon = type <{  }>
 
-define i8* @foo(%struct.anon* %deviceRef, %struct.abc* %pCap) {
+define ptr @foo(ptr %deviceRef, ptr %pCap) {
 entry:
-        %tmp1 = bitcast %struct.anon* %deviceRef to %struct.def*            
-        %tmp3 = getelementptr %struct.def, %struct.def* %tmp1, i32 0, i32 1               
-        %tmp35 = bitcast %struct.abc* %tmp3 to i8*           
-        ret i8* %tmp35
+        %tmp3 = getelementptr %struct.def, ptr %deviceRef, i32 0, i32 1               
+        ret ptr %tmp3
 }
 
 
index fbf363afce29ad52e278641027ad9e70b43cf73a..868463ed141c71e3d221307f951518323217d995 100644 (file)
@@ -1,10 +1,10 @@
 ; RUN: opt < %s -passes=instcombine -S | grep "call.*sret"
 ; Make sure instcombine doesn't drop the sret attribute.
 
-define void @blah(i16* %tmp10) {
+define void @blah(ptr %tmp10) {
 entry:
-       call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend_stret to void (i16*)*)(i16* sret(i16) %tmp10)
+       call void @objc_msgSend_stret(ptr sret(i16) %tmp10)
        ret void
 }
 
-declare i8* @objc_msgSend_stret(i8*, i8*, ...)
+declare ptr @objc_msgSend_stret(ptr, ptr, ...)
index ed7b8769930a3e7733e57d77b6810e42881f716a..e0ab8350b6cb447f19987e47992eee03b196f749 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: opt < %s -passes=instcombine -S | grep "ashr"
 ; PR1499
 
-define void @av_cmp_q_cond_true(i32* %retval, i32* %tmp9, i64* %tmp10) {
+define void @av_cmp_q_cond_true(ptr %retval, ptr %tmp9, ptr %tmp10) {
 newFuncRoot:
        br label %cond_true
 
@@ -9,14 +9,14 @@ return.exitStub:              ; preds = %cond_true
        ret void
 
 cond_true:             ; preds = %newFuncRoot
-       %tmp30 = load i64, i64* %tmp10          ; <i64> [#uses=1]
+       %tmp30 = load i64, ptr %tmp10           ; <i64> [#uses=1]
        %.cast = zext i32 63 to i64             ; <i64> [#uses=1]
        %tmp31 = ashr i64 %tmp30, %.cast                ; <i64> [#uses=1]
        %tmp3132 = trunc i64 %tmp31 to i32              ; <i32> [#uses=1]
        %tmp33 = or i32 %tmp3132, 1             ; <i32> [#uses=1]
-       store i32 %tmp33, i32* %tmp9
-       %tmp34 = load i32, i32* %tmp9           ; <i32> [#uses=1]
-       store i32 %tmp34, i32* %retval
+       store i32 %tmp33, ptr %tmp9
+       %tmp34 = load i32, ptr %tmp9            ; <i32> [#uses=1]
+       store i32 %tmp34, ptr %retval
        br label %return.exitStub
 }
 
index eb8cafc09eca87de177dd63a12ace4a8cc595a5e..be8e3eb860f3318bb3a3122a3058e8c53c22e6ec 100644 (file)
@@ -1,15 +1,15 @@
 ; RUN: opt < %s -passes=instcombine -S | grep icmp
 ; PR1646
 
-@__gthrw_pthread_cancel = weak alias i32 (i32), i32 (i32)* @pthread_cancel             ; <i32 (i32)*> [#uses=1]
-@__gthread_active_ptr.5335 = internal constant i8* bitcast (i32 (i32)* @__gthrw_pthread_cancel to i8*)         ; <i8**> [#uses=1]
+@__gthrw_pthread_cancel = weak alias i32 (i32), ptr @pthread_cancel            ; <ptr> [#uses=1]
+@__gthread_active_ptr.5335 = internal constant ptr @__gthrw_pthread_cancel             ; <ptr> [#uses=1]
 define weak i32 @pthread_cancel(i32) {
        ret i32 0
 }
 
 define i1 @__gthread_active_p() {
 entry:
-       %tmp1 = load i8*, i8** @__gthread_active_ptr.5335, align 4              ; <i8*> [#uses=1]
-       %tmp2 = icmp ne i8* %tmp1, null         ; <i1> [#uses=1]
+       %tmp1 = load ptr, ptr @__gthread_active_ptr.5335, align 4               ; <ptr> [#uses=1]
+       %tmp2 = icmp ne ptr %tmp1, null         ; <i1> [#uses=1]
        ret i1 %tmp2
 }
index ff1fd079457e1233fa5dc9d06601a1231c632fb5..c994d9aac811ddbea7888b832360eea71adabe03 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: opt < %s -passes=instcombine -S | grep icmp
 ; PR1678
 
-@A = weak alias void (), void ()* @B           ; <void ()*> [#uses=1]
+@A = weak alias void (), ptr @B                ; <ptr> [#uses=1]
 
 define weak void @B() {
        ret void
@@ -10,7 +10,7 @@ define weak void @B() {
 define i32 @active() {
 entry:
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       %tmp1 = icmp ne void ()* @A, null               ; <i1> [#uses=1]
+       %tmp1 = icmp ne ptr @A, null            ; <i1> [#uses=1]
        %tmp12 = zext i1 %tmp1 to i32           ; <i32> [#uses=1]
        ret i32 %tmp12
 }
index bb8ee3fa6aae8b33c98f4a89979a55b1d9ae4f50..bf178dd01592bde98da8e15253c47ff9d3f4177c 100644 (file)
@@ -2,19 +2,18 @@
 ; RUN: opt < %s -O3 -S | not grep xyz
 target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
 
-@.str = internal constant [4 x i8] c"xyz\00"           ; <[4 x i8]*> [#uses=1]
+@.str = internal constant [4 x i8] c"xyz\00"           ; <ptr> [#uses=1]
 
-define void @foo(i8* %P) {
+define void @foo(ptr %P) {
 entry:
-  %P_addr = alloca i8*
-  store i8* %P, i8** %P_addr
-  %tmp = load i8*, i8** %P_addr, align 4
-  %tmp1 = getelementptr [4 x i8], [4 x i8]* @.str, i32 0, i32 0
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %tmp, i8* %tmp1, i32 4, i1 false)
+  %P_addr = alloca ptr
+  store ptr %P, ptr %P_addr
+  %tmp = load ptr, ptr %P_addr, align 4
+  call void @llvm.memcpy.p0.p0.i32(ptr %tmp, ptr @.str, i32 4, i1 false)
   br label %return
 
 return:                                           ; preds = %entry
   ret void
 }
 
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i1) nounwind
+declare void @llvm.memcpy.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1) nounwind
index c8d5a0c9024b65daf95e753d15b7b0dcdad27d27..4006de0f3b0c669a34a479dc3728f9141ced2a75 100644 (file)
@@ -1,22 +1,21 @@
 ; RUN: opt < %s -passes=instcombine -disable-output
 
        %struct.Ray = type { %struct.Vec, %struct.Vec }
-       %struct.Scene = type { i32 (...)** }
+       %struct.Scene = type { ptr }
        %struct.Vec = type { double, double, double }
 
-declare double @_Z9ray_traceRK3VecRK3RayRK5Scene(%struct.Vec*, %struct.Ray*, %struct.Scene*)
+declare double @_Z9ray_traceRK3VecRK3RayRK5Scene(ptr, ptr, ptr)
 
-define i32 @main(i32 %argc, i8** %argv) {
+define i32 @main(i32 %argc, ptr %argv) {
 entry:
-       %tmp3 = alloca %struct.Ray, align 4             ; <%struct.Ray*> [#uses=2]
+       %tmp3 = alloca %struct.Ray, align 4             ; <ptr> [#uses=2]
        %tmp97 = icmp slt i32 0, 512            ; <i1> [#uses=1]
        br i1 %tmp97, label %bb71, label %bb108
 
 bb29:          ; preds = %bb62
-       %tmp322 = bitcast %struct.Ray* %tmp3 to %struct.Vec*            ; <%struct.Vec*> [#uses=1]
-       %tmp322.0 = getelementptr %struct.Vec, %struct.Vec* %tmp322, i32 0, i32 0               ; <double*> [#uses=1]
-       store double 0.000000e+00, double* %tmp322.0
-       %tmp57 = call double @_Z9ray_traceRK3VecRK3RayRK5Scene( %struct.Vec* null, %struct.Ray* %tmp3, %struct.Scene* null )            ; <double> [#uses=0]
+       %tmp322.0 = getelementptr %struct.Vec, ptr %tmp3, i32 0, i32 0          ; <ptr> [#uses=1]
+       store double 0.000000e+00, ptr %tmp322.0
+       %tmp57 = call double @_Z9ray_traceRK3VecRK3RayRK5Scene( ptr null, ptr %tmp3, ptr null )         ; <double> [#uses=0]
        br label %bb62
 
 bb62:          ; preds = %bb71, %bb29
index f15568949a38d34afc2c754d88caf9cc31730fa7..a407cd2d3d3d147f3e99f24919e2e94b7f267324 100644 (file)
@@ -2,7 +2,7 @@
 ; PR1745
 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:128:128"
 target triple = "i686-apple-darwin8"
-@p = weak global i8* null              ; <i8**> [#uses=1]
+@p = weak global ptr null              ; <ptr> [#uses=1]
 
 define i32 @main() {
 entry:
@@ -11,7 +11,7 @@ entry:
 
 lab:           ; preds = %cleanup31, %entry
        %n.0 = phi i32 [ 0, %entry ], [ %tmp25, %cleanup31 ]            ; <i32> [#uses=2]
-       %tmp2 = call i8* @llvm.stacksave( )             ; <i8*> [#uses=2]
+       %tmp2 = call ptr @llvm.stacksave( )             ; <ptr> [#uses=2]
        %tmp4 = srem i32 %n.0, 47               ; <i32> [#uses=1]
        %tmp5 = add i32 %tmp4, 1                ; <i32> [#uses=5]
        %tmp7 = sub i32 %tmp5, 1                ; <i32> [#uses=0]
@@ -21,12 +21,10 @@ lab:                ; preds = %cleanup31, %entry
        %tmp1314 = zext i32 %tmp5 to i64                ; <i64> [#uses=1]
        %tmp15 = mul i64 %tmp1314, 32           ; <i64> [#uses=0]
        %tmp17 = mul i32 %tmp5, 4               ; <i32> [#uses=1]
-       %tmp18 = alloca i8, i32 %tmp17          ; <i8*> [#uses=1]
-       %tmp1819 = bitcast i8* %tmp18 to i32*           ; <i32*> [#uses=2]
-       %tmp21 = getelementptr i32, i32* %tmp1819, i32 0                ; <i32*> [#uses=1]
-       store i32 1, i32* %tmp21, align 4
-       %tmp2223 = bitcast i32* %tmp1819 to i8*         ; <i8*> [#uses=1]
-       store volatile i8* %tmp2223, i8** @p, align 4
+       %tmp18 = alloca i8, i32 %tmp17          ; <ptr> [#uses=1]
+       %tmp21 = getelementptr i32, ptr %tmp18, i32 0           ; <ptr> [#uses=1]
+       store i32 1, ptr %tmp21, align 4
+       store volatile ptr %tmp18, ptr @p, align 4
        %tmp25 = add i32 %n.0, 1                ; <i32> [#uses=2]
        %tmp27 = icmp sle i32 %tmp25, 999999            ; <i1> [#uses=1]
        %tmp2728 = zext i1 %tmp27 to i8         ; <i8> [#uses=1]
@@ -34,14 +32,14 @@ lab:                ; preds = %cleanup31, %entry
        br i1 %toBool, label %cleanup31, label %cond_next
 
 cond_next:             ; preds = %lab
-       call void @llvm.stackrestore( i8* %tmp2 )
+       call void @llvm.stackrestore( ptr %tmp2 )
        ret i32 0
 
 cleanup31:             ; preds = %lab
-       call void @llvm.stackrestore( i8* %tmp2 )
+       call void @llvm.stackrestore( ptr %tmp2 )
        br label %lab
 }
 
-declare i8* @llvm.stacksave()
+declare ptr @llvm.stacksave()
 
-declare void @llvm.stackrestore(i8*)
+declare void @llvm.stackrestore(ptr)
index 0fcd0a4bd68c71b74cc2c6c3fe77d24d3c9fa873..2381d6a99e0e804510d9322b186b36e2935c0d2d 100644 (file)
@@ -11,7 +11,7 @@ bb.i:         ; preds = %entry
        br label %bb51.i.i
 
 bb27.i.i:              ; preds = %bb51.i.i
-       %tmp31.i.i = load i16, i16* null, align 2               ; <i16> [#uses=2]
+       %tmp31.i.i = load i16, ptr null, align 2                ; <i16> [#uses=2]
        %tmp35.i.i = icmp ult i16 %tmp31.i.i, 1         ; <i1> [#uses=1]
        %tmp41.i.i = icmp ugt i16 %tmp31.i.i, -1                ; <i1> [#uses=1]
        %bothcond.i.i = or i1 %tmp35.i.i, %tmp41.i.i            ; <i1> [#uses=1]
index ba77c00e4a662c26292f0c540fdd9d2bbf9ec328..5a3ec386194ea65ea0f3300b4868b6febd8dcf0b 100644 (file)
@@ -4,10 +4,9 @@ target triple = "i686-apple-darwin8"
 
 declare void @__darwin_gcc3_preregister_frame_info()
 
-define void @_start(i32 %argc, i8** %argv, i8** %envp) {
+define void @_start(i32 %argc, ptr %argv, ptr %envp) {
 entry:
-       %tmp1 = bitcast void ()* @__darwin_gcc3_preregister_frame_info to i32*          ; <i32*> [#uses=1]
-       %tmp2 = load i32, i32* %tmp1, align 4           ; <i32> [#uses=1]
+       %tmp2 = load i32, ptr @__darwin_gcc3_preregister_frame_info, align 4            ; <i32> [#uses=1]
        %tmp3 = icmp ne i32 %tmp2, 0            ; <i1> [#uses=1]
        %tmp34 = zext i1 %tmp3 to i8            ; <i8> [#uses=1]
        %toBool = icmp ne i8 %tmp34, 0          ; <i1> [#uses=1]
index 39111bff0e1ad8816f1d428293272eb550d25b33..23547105c33d8d22d2af1deccdc7e1e25916139a 100644 (file)
@@ -13,8 +13,8 @@ target triple = "i686-pc-linux-gnu"
 
 define i32 @foo() {
 entry:
-        %x = load i8, i8* bitcast (%opaque_t* @g to i8*)
-        %y = load i32, i32* bitcast (%op_ts* @h to i32*)
+        %x = load i8, ptr @g
+        %y = load i32, ptr @h
        %z = zext i8 %x to i32
        %r = add i32 %y, %z
         ret i32 %r
index 941e083969d43f9db13f7fe84f026cc203404d6a..9da8c6e6f96d9bde6c31f00890417f0b41f354c0 100644 (file)
@@ -1,12 +1,12 @@
 ; RUN: opt < %s -passes=instcombine -S | not grep bitcast
 ; PR1716
 
-@.str = internal constant [4 x i8] c"%d\0A\00"         ; <[4 x i8]*> [#uses=1]
+@.str = internal constant [4 x i8] c"%d\0A\00"         ; <ptr> [#uses=1]
 
-define i32 @main(i32 %argc, i8** %argv) {
+define i32 @main(i32 %argc, ptr %argv) {
 entry:
-       %tmp32 = tail call i32 (i8*  , ...) bitcast (i32 (i8*, ...)  * @printf to i32 (i8*  , ...)  *)( i8* getelementptr ([4 x i8], [4 x i8]* @.str, i32 0, i32 0)  , i32 0 ) nounwind                 ; <i32> [#uses=0]
+       %tmp32 = tail call i32 (ptr  , ...) @printf( ptr @.str  , i32 0 ) nounwind              ; <i32> [#uses=0]
        ret i32 undef
 }
 
-declare i32 @printf(i8*, ...) nounwind 
+declare i32 @printf(ptr, ...) nounwind 
index 0af16714c920e61ce8cbc8b4973713562b1133eb..a6192a3f9df3701d600e5f1ab960f25166159eae 100644 (file)
@@ -4,6 +4,6 @@ target triple = "i686-pc-linux-gnu"
 ; PR1850
 
 define i1 @test() {
-       %cond = icmp ule i8* inttoptr (i64 4294967297 to i8*), inttoptr (i64 5 to i8*)
+       %cond = icmp ule ptr inttoptr (i64 4294967297 to ptr), inttoptr (i64 5 to ptr)
        ret i1 %cond
 }
index 09fcfbd48468e00efc80225a166f575c6215410d..e8db5c046640358d6d7a690f04eb609bb8e1a803 100644 (file)
@@ -2,9 +2,8 @@
 
 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"
 
-define i8* @foo([100 x {i8,i8,i8}]* %x) {
+define ptr @foo(ptr %x) {
 entry:
-        %p = bitcast [100 x {i8,i8,i8}]* %x to i8*
-        %q = getelementptr i8, i8* %p, i32 -4
-        ret i8* %q
+        %q = getelementptr i8, ptr %x, i32 -4
+        ret ptr %q
 }
index 7260c001b0db60b1a2fc88b5437dc2a0ea3df314..1b46f33e40f30ade8733b000bd28173ad97c0179 100644 (file)
@@ -3,8 +3,8 @@
 define i32 @test1() {
 entry:
        %z = alloca i32
-       store i32 0, i32* %z
-       %tmp = load i32, i32* %z
+       store i32 0, ptr %z
+       %tmp = load i32, ptr %z
        %sub = sub i32 %tmp, 1
        %cmp = icmp ule i32 %sub, 0
        %retval = select i1 %cmp, i32 0, i32 1
@@ -14,8 +14,8 @@ entry:
 define i32 @test2() {
 entry:
        %z = alloca i32
-       store i32 0, i32* %z
-       %tmp = load i32, i32* %z
+       store i32 0, ptr %z
+       %tmp = load i32, ptr %z
        %sub = sub i32 %tmp, 1
        %cmp = icmp ugt i32 %sub, 0
        %retval = select i1 %cmp, i32 1, i32 0
@@ -25,8 +25,8 @@ entry:
 define i32 @test3() {
 entry:
        %z = alloca i32
-       store i32 0, i32* %z
-       %tmp = load i32, i32* %z
+       store i32 0, ptr %z
+       %tmp = load i32, ptr %z
        %sub = sub i32 %tmp, 1
        %cmp = icmp slt i32 %sub, 0
        %retval = select i1 %cmp, i32 1, i32 0
@@ -36,8 +36,8 @@ entry:
 define i32 @test4() {
 entry:
        %z = alloca i32
-       store i32 0, i32* %z
-       %tmp = load i32, i32* %z
+       store i32 0, ptr %z
+       %tmp = load i32, ptr %z
        %sub = sub i32 %tmp, 1
        %cmp = icmp sle i32 %sub, 0
        %retval = select i1 %cmp, i32 1, i32 0
@@ -47,8 +47,8 @@ entry:
 define i32 @test5() {
 entry:
        %z = alloca i32
-       store i32 0, i32* %z
-       %tmp = load i32, i32* %z
+       store i32 0, ptr %z
+       %tmp = load i32, ptr %z
        %sub = sub i32 %tmp, 1
        %cmp = icmp sge i32 %sub, 0
        %retval = select i1 %cmp, i32 0, i32 1
@@ -58,8 +58,8 @@ entry:
 define i32 @test6() {
 entry:
        %z = alloca i32
-       store i32 0, i32* %z
-       %tmp = load i32, i32* %z
+       store i32 0, ptr %z
+       %tmp = load i32, ptr %z
        %sub = sub i32 %tmp, 1
        %cmp = icmp sgt i32 %sub, 0
        %retval = select i1 %cmp, i32 0, i32 1
@@ -69,8 +69,8 @@ entry:
 define i32 @test7() {
 entry:
        %z = alloca i32
-       store i32 0, i32* %z
-       %tmp = load i32, i32* %z
+       store i32 0, ptr %z
+       %tmp = load i32, ptr %z
        %sub = sub i32 %tmp, 1
        %cmp = icmp eq i32 %sub, 0
        %retval = select i1 %cmp, i32 0, i32 1
@@ -80,8 +80,8 @@ entry:
 define i32 @test8() {
 entry:
        %z = alloca i32
-       store i32 0, i32* %z
-       %tmp = load i32, i32* %z
+       store i32 0, ptr %z
+       %tmp = load i32, ptr %z
        %sub = sub i32 %tmp, 1
        %cmp = icmp ne i32 %sub, 0
        %retval = select i1 %cmp, i32 1, i32 0
index 0bb9705295d47868c8355a2c406ec2194c5c52d2..462dfc73f2fe7f3f46bd2c9b8f446efd310e1866 100644 (file)
@@ -7,7 +7,7 @@ define void @a() {
   ret void
 }
 
-define signext i32 @b(i32* inreg  %x)   {
+define signext i32 @b(ptr inreg  %x)   {
   ret i32 0
 }
 
@@ -15,16 +15,16 @@ define void @c(...) {
   ret void
 }
 
-define void @g(i32* %y) {
+define void @g(ptr %y) {
 ; CHECK-LABEL: @g(
-; CHECK: call i64 bitcast (i32 (i32*)* @b to i64 (i32)*)(i32 0)
-       %x = call i64 bitcast (i32 (i32*)* @b to i64 (i32)*)( i32 0 )           ; <i64> [#uses=0]
+; CHECK: call i64 @b(i32 0)
+       %x = call i64 @b( i32 0 )               ; <i64> [#uses=0]
 
 ; The rest should not have bitcasts remaining
 ; CHECK-NOT: bitcast
-  call void bitcast (void ()* @a to void (i32*)*)( i32* noalias  %y )
-  call <2 x i32> bitcast (i32 (i32*)* @b to <2 x i32> (i32*)*)( i32* inreg  null )             ; <<2 x i32>>:1 [#uses=0]
-  call void bitcast (void (...)* @c to void (i32)*)( i32 0 )
-  call void bitcast (void (...)* @c to void (i32)*)( i32 zeroext  0 )
+  call void @a( ptr noalias  %y )
+  call <2 x i32> @b( ptr inreg  null )         ; <<2 x i32>>:1 [#uses=0]
+  call void @c( i32 0 )
+  call void @c( i32 zeroext  0 )
   ret void
 }
index 2cfd0a82d82faa18ae5e3c4025488b64195af9a6..fe5e51bbbab958ee785979881a530a2a876f826a 100644 (file)
@@ -5,6 +5,6 @@ define <2 x i32> @f() {
 }
 
 define i32 @g() {
-       %x = call i32 bitcast (<2 x i32> ()* @f to i32 ()*)( )          ; <i32> [#uses=1]
+       %x = call i32 @f( )             ; <i32> [#uses=1]
        ret i32 %x
 }
index e4fee58ca8f835ba6e678f9d9e389737b65b38ff..4f5ce4d00a1009825da238a2236db68381534d0a 100644 (file)
@@ -1,26 +1,24 @@
 ; RUN: opt < %s -passes=instcombine -S | grep zeroext
 
-       %struct.FRAME.nest = type { i32, i32 (...)* }
+       %struct.FRAME.nest = type { i32, ptr }
        %struct.__builtin_trampoline = type { [10 x i8] }
 
-declare void @llvm.init.trampoline(i8*, i8*, i8*) nounwind 
-declare i8* @llvm.adjust.trampoline(i8*) nounwind
+declare void @llvm.init.trampoline(ptr, ptr, ptr) nounwind 
+declare ptr @llvm.adjust.trampoline(ptr) nounwind
 
-declare i32 @f(%struct.FRAME.nest* nest , ...)
+declare i32 @f(ptr nest , ...)
 
 define i32 @nest(i32 %n) {
 entry:
-       %FRAME.0 = alloca %struct.FRAME.nest, align 8           ; <%struct.FRAME.nest*> [#uses=3]
-       %TRAMP.216 = alloca [10 x i8], align 16         ; <[10 x i8]*> [#uses=1]
-       %TRAMP.216.sub = getelementptr [10 x i8], [10 x i8]* %TRAMP.216, i32 0, i32 0           ; <i8*> [#uses=1]
-       %tmp3 = getelementptr %struct.FRAME.nest, %struct.FRAME.nest* %FRAME.0, i32 0, i32 0            ; <i32*> [#uses=1]
-       store i32 %n, i32* %tmp3, align 8
-       %FRAME.06 = bitcast %struct.FRAME.nest* %FRAME.0 to i8*         ; <i8*> [#uses=1]
-       call void @llvm.init.trampoline( i8* %TRAMP.216.sub, i8* bitcast (i32 (%struct.FRAME.nest*, ...)* @f to i8*), i8* %FRAME.06 )           ; <i8*> [#uses=1]
-        %tramp = call i8* @llvm.adjust.trampoline( i8* %TRAMP.216.sub)
-       %tmp7 = getelementptr %struct.FRAME.nest, %struct.FRAME.nest* %FRAME.0, i32 0, i32 1            ; <i32 (...)**> [#uses=1]
-       %tmp89 = bitcast i8* %tramp to i32 (...)*               ; <i32 (...)*> [#uses=2]
-       store i32 (...)* %tmp89, i32 (...)** %tmp7, align 8
-       %tmp2.i = call i32 (...) %tmp89( i32 zeroext 0 )                ; <i32> [#uses=1]
+       %FRAME.0 = alloca %struct.FRAME.nest, align 8           ; <ptr> [#uses=3]
+       %TRAMP.216 = alloca [10 x i8], align 16         ; <ptr> [#uses=1]
+       %TRAMP.216.sub = getelementptr [10 x i8], ptr %TRAMP.216, i32 0, i32 0          ; <ptr> [#uses=1]
+       %tmp3 = getelementptr %struct.FRAME.nest, ptr %FRAME.0, i32 0, i32 0            ; <ptr> [#uses=1]
+       store i32 %n, ptr %tmp3, align 8
+       call void @llvm.init.trampoline( ptr %TRAMP.216.sub, ptr @f, ptr %FRAME.0 )             ; <ptr> [#uses=1]
+        %tramp = call ptr @llvm.adjust.trampoline( ptr %TRAMP.216.sub)
+       %tmp7 = getelementptr %struct.FRAME.nest, ptr %FRAME.0, i32 0, i32 1            ; <ptr> [#uses=1]
+       store ptr %tramp, ptr %tmp7, align 8
+       %tmp2.i = call i32 (...) %tramp( i32 zeroext 0 )                ; <i32> [#uses=1]
        ret i32 %tmp2.i
 }
index 3c5e6608648c5a232bee2642a45525a69bf9468f..26806159a3a45df988e33a6e87b1bdb7bdbbfef8 100644 (file)
@@ -1,9 +1,9 @@
 ; RUN: opt < %s -passes=instcombine -S | grep "16" | count 1
 
-define i8* @bork(i8** %qux) {
-  %tmp275 = load i8*, i8** %qux, align 1
-  %tmp275276 = ptrtoint i8* %tmp275 to i32
+define ptr @bork(ptr %qux) {
+  %tmp275 = load ptr, ptr %qux, align 1
+  %tmp275276 = ptrtoint ptr %tmp275 to i32
   %tmp277 = add i32 %tmp275276, 16
-  %tmp277278 = inttoptr i32 %tmp277 to i8*
-  ret i8* %tmp277278
+  %tmp277278 = inttoptr i32 %tmp277 to ptr
+  ret ptr %tmp277278
 }
index 62a9d83255663ccb5e652e55b8363e1aadfaddae..2dcf902dc34f5f2a9ac3669d2d91931d166b8990 100644 (file)
@@ -1,8 +1,8 @@
 ; RUN: opt < %s -passes=instcombine -S | grep "store volatile"
 
 define void @test() {
-       %votf = alloca <4 x float>              ; <<4 x float>*> [#uses=1]
-       store volatile <4 x float> zeroinitializer, <4 x float>* %votf, align 16
+       %votf = alloca <4 x float>              ; <ptr> [#uses=1]
+       store volatile <4 x float> zeroinitializer, ptr %votf, align 16
        ret void
 }
 
index a797ed4902b0414568c5f97dc64a7cafb9745986..43dda98a1791fb11a697ffea9cf7afa6ff7f23cb 100644 (file)
@@ -1,22 +1,22 @@
 ; RUN: opt < %s -passes=instcombine -S | grep "load volatile" | count 2
 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:128:128"
 target triple = "i386-apple-darwin8"
-@g_1 = internal global i32 0           ; <i32*> [#uses=3]
+@g_1 = internal global i32 0           ; <ptr> [#uses=3]
 
 define i32 @main() nounwind  {
 entry:
        %tmp93 = icmp slt i32 0, 10             ; <i1> [#uses=0]
-       %tmp34 = load volatile i32, i32* @g_1, align 4          ; <i32> [#uses=1]
+       %tmp34 = load volatile i32, ptr @g_1, align 4           ; <i32> [#uses=1]
        br label %bb
 
 bb:            ; preds = %bb, %entry
        %b.0.reg2mem.0 = phi i32 [ 0, %entry ], [ %tmp6, %bb ]          ; <i32> [#uses=1]
        %tmp3.reg2mem.0 = phi i32 [ %tmp34, %entry ], [ %tmp3, %bb ]            ; <i32> [#uses=1]
        %tmp4 = add i32 %tmp3.reg2mem.0, 5              ; <i32> [#uses=1]
-       store volatile i32 %tmp4, i32* @g_1, align 4
+       store volatile i32 %tmp4, ptr @g_1, align 4
        %tmp6 = add i32 %b.0.reg2mem.0, 1               ; <i32> [#uses=2]
        %tmp9 = icmp slt i32 %tmp6, 10          ; <i1> [#uses=1]
-       %tmp3 = load volatile i32, i32* @g_1, align 4           ; <i32> [#uses=1]
+       %tmp3 = load volatile i32, ptr @g_1, align 4            ; <i32> [#uses=1]
        br i1 %tmp9, label %bb, label %bb11
 
 bb11:          ; preds = %bb
index 53974badba7b128d2d104235e78c7a4239dd1fc5..72e27139e775fa0ed8e9d2193453ff13e5e8e56f 100644 (file)
@@ -2,16 +2,16 @@
 ; PR2262
 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:128:128"
 target triple = "i386-apple-darwin8"
-@g_1 = internal global i32 0           ; <i32*> [#uses=3]
+@g_1 = internal global i32 0           ; <ptr> [#uses=3]
 
 define i32 @main(i32 %i) nounwind  {
 entry:
        %tmp93 = icmp slt i32 %i, 10            ; <i1> [#uses=0]
-       %tmp34 = load volatile i32, i32* @g_1, align 4          ; <i32> [#uses=1]
+       %tmp34 = load volatile i32, ptr @g_1, align 4           ; <i32> [#uses=1]
        br i1 %tmp93, label %bb11, label %bb
 
 bb:            ; preds = %bb, %entry
-       %tmp3 = load volatile i32, i32* @g_1, align 4           ; <i32> [#uses=1]
+       %tmp3 = load volatile i32, ptr @g_1, align 4            ; <i32> [#uses=1]
        br label %bb11
 
 bb11:          ; preds = %bb
index 4be97d8ff44cd3fc7b313080748a78dabd0881ae..8c3c8cf0919a99672c134181dfdb0e47619bfd73 100644 (file)
@@ -6,20 +6,20 @@ target triple = "i386-apple-darwin8"
 define i32 @a() nounwind  {
 entry:
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       %tmp1 = call i8* @malloc( i32 10 ) nounwind             ; <i8*> [#uses=5]
-       %tmp3 = getelementptr i8, i8* %tmp1, i32 1              ; <i8*> [#uses=1]
-       store i8 0, i8* %tmp3, align 1
-       %tmp5 = getelementptr i8, i8* %tmp1, i32 0              ; <i8*> [#uses=1]
-       store i8 1, i8* %tmp5, align 1
-       %tmp7 = call i32 @strlen( i8* %tmp1 ) nounwind readonly                 ; <i32> [#uses=1]
-       %tmp9 = getelementptr i8, i8* %tmp1, i32 0              ; <i8*> [#uses=1]
-       store i8 0, i8* %tmp9, align 1
-       %tmp11 = call i32 (...) @b( i8* %tmp1 ) nounwind                ; <i32> [#uses=0]
+       %tmp1 = call ptr @malloc( i32 10 ) nounwind             ; <ptr> [#uses=5]
+       %tmp3 = getelementptr i8, ptr %tmp1, i32 1              ; <ptr> [#uses=1]
+       store i8 0, ptr %tmp3, align 1
+       %tmp5 = getelementptr i8, ptr %tmp1, i32 0              ; <ptr> [#uses=1]
+       store i8 1, ptr %tmp5, align 1
+       %tmp7 = call i32 @strlen( ptr %tmp1 ) nounwind readonly                 ; <i32> [#uses=1]
+       %tmp9 = getelementptr i8, ptr %tmp1, i32 0              ; <ptr> [#uses=1]
+       store i8 0, ptr %tmp9, align 1
+       %tmp11 = call i32 (...) @b( ptr %tmp1 ) nounwind                ; <i32> [#uses=0]
        ret i32 %tmp7
 }
 
-declare i8* @malloc(i32) nounwind 
+declare ptr @malloc(i32) nounwind 
 
-declare i32 @strlen(i8*) nounwind readonly 
+declare i32 @strlen(ptr) nounwind readonly 
 
 declare i32 @b(...)
index 03c9590ec51c99f5f757eac4f740a8850adb0def..50c0f7ccee6fd7bdaaf65836bf83af7723c92c2c 100644 (file)
@@ -6,27 +6,27 @@ target triple = "i386-apple-darwin8"
 define i32 @a() nounwind  {
 entry:
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       %tmp1 = call i8* @malloc( i32 10 ) nounwind             ; <i8*> [#uses=5]
-       %tmp3 = getelementptr i8, i8* %tmp1, i32 1              ; <i8*> [#uses=1]
-       store i8 0, i8* %tmp3, align 1
-       %tmp5 = getelementptr i8, i8* %tmp1, i32 0              ; <i8*> [#uses=1]
-       store i8 1, i8* %tmp5, align 1
+       %tmp1 = call ptr @malloc( i32 10 ) nounwind             ; <ptr> [#uses=5]
+       %tmp3 = getelementptr i8, ptr %tmp1, i32 1              ; <ptr> [#uses=1]
+       store i8 0, ptr %tmp3, align 1
+       %tmp5 = getelementptr i8, ptr %tmp1, i32 0              ; <ptr> [#uses=1]
+       store i8 1, ptr %tmp5, align 1
 ; CHECK: store
 ; CHECK: store
 ; CHECK-NEXT: strlen
 ; CHECK-NEXT: store
-       %tmp7 = call i32 @strlen( i8* %tmp1 ) nounwind readonly                 ; <i32> [#uses=1]
-       %tmp9 = getelementptr i8, i8* %tmp1, i32 0              ; <i8*> [#uses=1]
-       store i8 0, i8* %tmp9, align 1
-       %tmp11 = call i32 (...) @b( i8* %tmp1 ) nounwind                ; <i32> [#uses=0]
+       %tmp7 = call i32 @strlen( ptr %tmp1 ) nounwind readonly                 ; <i32> [#uses=1]
+       %tmp9 = getelementptr i8, ptr %tmp1, i32 0              ; <ptr> [#uses=1]
+       store i8 0, ptr %tmp9, align 1
+       %tmp11 = call i32 (...) @b( ptr %tmp1 ) nounwind                ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
        ret i32 %tmp7
 }
 
-declare i8* @malloc(i32) nounwind 
+declare ptr @malloc(i32) nounwind 
 
-declare i32 @strlen(i8*) nounwind readonly 
+declare i32 @strlen(ptr) nounwind readonly 
 
 declare i32 @b(...)
index b5f38db536d0329d0e7214561fdc40cbc1a12978..c7909539841d727f26f167450bd0d23f96c25323 100644 (file)
@@ -1,35 +1,35 @@
 ; RUN: opt < %s -passes=instcombine -disable-output
 ; PR2303
-       %"struct.std::ctype<char>" = type { %"struct.std::locale::facet", i32*, i8, i32*, i32*, i16*, i8, [256 x i8], [256 x i8], i8 }
-       %"struct.std::locale::facet" = type { i32 (...)**, i32 }
+       %"struct.std::ctype<char>" = type { %"struct.std::locale::facet", ptr, i8, ptr, ptr, ptr, i8, [256 x i8], [256 x i8], i8 }
+       %"struct.std::locale::facet" = type { ptr, i32 }
 
-declare i32* @_ZNSt6locale5facet15_S_get_c_localeEv()
+declare ptr @_ZNSt6locale5facet15_S_get_c_localeEv()
 
-declare i32** @__ctype_toupper_loc() readnone 
+declare ptr @__ctype_toupper_loc() readnone 
 
-declare i32** @__ctype_tolower_loc() readnone 
+declare ptr @__ctype_tolower_loc() readnone 
 
-define void @_ZNSt5ctypeIcEC2EPiPKtbm(%"struct.std::ctype<char>"* %this, i32* %unnamed_arg, i16* %__table, i8 zeroext  %__del, i64 %__refs) personality i32 (...)* @__gxx_personality_v0 {
+define void @_ZNSt5ctypeIcEC2EPiPKtbm(ptr %this, ptr %unnamed_arg, ptr %__table, i8 zeroext  %__del, i64 %__refs) personality ptr @__gxx_personality_v0 {
 entry:
-       %tmp8 = invoke i32* @_ZNSt6locale5facet15_S_get_c_localeEv( )
-                       to label %invcont unwind label %lpad            ; <i32*> [#uses=0]
+       %tmp8 = invoke ptr @_ZNSt6locale5facet15_S_get_c_localeEv( )
+                       to label %invcont unwind label %lpad            ; <ptr> [#uses=0]
 
 invcont:               ; preds = %entry
-       %tmp32 = invoke i32** @__ctype_toupper_loc( ) readnone 
-                       to label %invcont31 unwind label %lpad          ; <i32**> [#uses=0]
+       %tmp32 = invoke ptr @__ctype_toupper_loc( ) readnone 
+                       to label %invcont31 unwind label %lpad          ; <ptr> [#uses=0]
 
 invcont31:             ; preds = %invcont
-       %tmp38 = invoke i32** @__ctype_tolower_loc( ) readnone 
-                       to label %invcont37 unwind label %lpad          ; <i32**> [#uses=1]
+       %tmp38 = invoke ptr @__ctype_tolower_loc( ) readnone 
+                       to label %invcont37 unwind label %lpad          ; <ptr> [#uses=1]
 
 invcont37:             ; preds = %invcont31
-       %tmp39 = load i32*, i32** %tmp38, align 8               ; <i32*> [#uses=1]
-       %tmp41 = getelementptr %"struct.std::ctype<char>", %"struct.std::ctype<char>"* %this, i32 0, i32 4              ; <i32**> [#uses=1]
-       store i32* %tmp39, i32** %tmp41, align 8
+       %tmp39 = load ptr, ptr %tmp38, align 8          ; <ptr> [#uses=1]
+       %tmp41 = getelementptr %"struct.std::ctype<char>", ptr %this, i32 0, i32 4              ; <ptr> [#uses=1]
+       store ptr %tmp39, ptr %tmp41, align 8
        ret void
 
 lpad:          ; preds = %invcont31, %invcont, %entry
-        %exn = landingpad {i8*, i32}
+        %exn = landingpad {ptr, i32}
                  cleanup
        unreachable
 }
index ac23fa3fc8522e050950c515b9bb5edebab5778e..1358f5e521eaa05ec837598dc96c0ccbffd2b20a 100644 (file)
@@ -7,14 +7,14 @@ declare void @BZALLOC(i32)
 
 define void @f(i32) {
 entry:
-       %blockSize100k = alloca i32             ; <i32*> [#uses=2]
-       store i32 %0, i32* %blockSize100k
-       %n = alloca i32         ; <i32*> [#uses=2]
-       load i32, i32* %blockSize100k           ; <i32>:1 [#uses=1]
-       store i32 %1, i32* %n
-       load i32, i32* %n               ; <i32>:2 [#uses=1]
+       %blockSize100k = alloca i32             ; <ptr> [#uses=2]
+       store i32 %0, ptr %blockSize100k
+       %n = alloca i32         ; <ptr> [#uses=2]
+       load i32, ptr %blockSize100k            ; <i32>:1 [#uses=1]
+       store i32 %1, ptr %n
+       load i32, ptr %n                ; <i32>:2 [#uses=1]
        add i32 %2, 2           ; <i32>:3 [#uses=1]
-       mul i32 %3, ptrtoint (i32* getelementptr (i32, i32* null, i32 1) to i32)                ; <i32>:4 [#uses=1]
+       mul i32 %3, ptrtoint (ptr getelementptr (i32, ptr null, i32 1) to i32)          ; <i32>:4 [#uses=1]
        call void @BZALLOC( i32 %4 )
        br label %return
 
index 9b34dd1d751ffeae0900c4fac91fb21732e99a32..5b7bbefb77e054953f94bd554401cc3c77b56ef6 100644 (file)
@@ -5,9 +5,9 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 target triple = "i386-pc-linux-gnu"
 
 define i1 @f1() {
-  ret i1 icmp eq (i8* inttoptr (i32 1 to i8*), i8* inttoptr (i32 2 to i8*))
+  ret i1 icmp eq (ptr inttoptr (i32 1 to ptr), ptr inttoptr (i32 2 to ptr))
 }
 
 define i1 @f2() {
-  ret i1 icmp eq (i8* inttoptr (i16 1 to i8*), i8* inttoptr (i16 2 to i8*))
+  ret i1 icmp eq (ptr inttoptr (i16 1 to ptr), ptr inttoptr (i16 2 to ptr))
 }
index 81db043eca8183093555ddfccfba6a9d021f8986..66751eb704548aad5d0af8dda2830793143bdbc2 100644 (file)
@@ -3,9 +3,9 @@
 
 ; CHECK-LABEL: @f(
 ; CHECK: ret i1 false
-define i1 @f(i8* %x) {
+define i1 @f(ptr %x) {
 entry:
-       %tmp462 = load i8, i8* %x, align 1          ; <i8> [#uses=1]
+       %tmp462 = load i8, ptr %x, align 1          ; <i8> [#uses=1]
        %tmp462463 = sitofp i8 %tmp462 to float         ; <float> [#uses=1]
        %tmp464 = fcmp ugt float %tmp462463, 0x47EFFFFFE0000000         ; <i1>
        ret i1 %tmp464
index 1932152fbf82558273662c39f325ffdebae25d3b..46270f7f72c151db043f3c28d55b04387ab1c62d 100644 (file)
@@ -1,17 +1,17 @@
 ; RUN: opt < %s -passes=instcombine -S | grep "store i32" | count 2
 
-@g_139 = global i32 0           ; <i32*> [#uses=2]
+@g_139 = global i32 0           ; <ptr> [#uses=2]
 
 define void @func_56(i32 %p_60) nounwind  {
 entry:
-        store i32 1, i32* @g_139, align 4
+        store i32 1, ptr @g_139, align 4
         %tmp1 = icmp ne i32 %p_60, 0            ; <i1> [#uses=1]
         %tmp12 = zext i1 %tmp1 to i8            ; <i8> [#uses=1]
         %toBool = icmp ne i8 %tmp12, 0          ; <i1> [#uses=1]
         br i1 %toBool, label %bb, label %return
 
 bb:             ; preds = %bb, %entry
-        store i32 1, i32* @g_139, align 4
+        store i32 1, ptr @g_139, align 4
         br label %bb
 
 return:         ; preds = %entry
index 377d223296239c9a3ee5d0af967c97039a74d2b7..2cb5c974853f9cec7759a937c2e34204ce86b9ba 100644 (file)
@@ -1,19 +1,19 @@
 ; RUN: opt < %s -passes=instcombine -S | grep "store i8" | count 2
 
-define i32 @a(i8* %s) nounwind  {
+define i32 @a(ptr %s) nounwind  {
 entry:
-       store i8 0, i8* %s, align 1 ; This store cannot be eliminated!
-       %tmp3 = call i32 @strlen( i8* %s ) nounwind readonly
+       store i8 0, ptr %s, align 1 ; This store cannot be eliminated!
+       %tmp3 = call i32 @strlen( ptr %s ) nounwind readonly
        %tmp5 = icmp ne i32 %tmp3, 0
        br i1 %tmp5, label %bb, label %bb8
 
 bb:            ; preds = %entry
-       store i8 0, i8* %s, align 1
+       store i8 0, ptr %s, align 1
        br label %bb8
 
 bb8:
        ret i32 %tmp3
 }
 
-declare i32 @strlen(i8*) nounwind readonly 
+declare i32 @strlen(ptr) nounwind readonly 
 
index 59d0ded685958e4e49747ce8b30cfd53b259665e..e03371d00f6a3989f45b4050e666c95d0ca64467 100644 (file)
@@ -1,16 +1,16 @@
 ; RUN: opt < %s -passes=instcombine -S | grep load | count 3
 ; PR2471
 
-declare i32 @x(i32*)
-define i32 @b(i32* %a, i32* %b) {
+declare i32 @x(ptr)
+define i32 @b(ptr %a, ptr %b) {
 entry:
-        %tmp1 = load i32, i32* %a            
-        %tmp3 = load i32, i32* %b           
+        %tmp1 = load i32, ptr %a            
+        %tmp3 = load i32, ptr %b           
         %add = add i32 %tmp1, %tmp3   
-        %call = call i32 @x( i32* %a )
+        %call = call i32 @x( ptr %a )
         %tobool = icmp ne i32 %add, 0
        ; not safe to turn into an uncond load
-        %cond = select i1 %tobool, i32* %b, i32* %a             
-        %tmp8 = load i32, i32* %cond       
+        %cond = select i1 %tobool, ptr %b, ptr %a             
+        %tmp8 = load i32, ptr %cond       
         ret i32 %tmp8
 }
index cb06571f41490999d58169f6a8791e628dfd0d17..a88570e5362548836a3dcf929334b07789691cb3 100644 (file)
@@ -2,15 +2,14 @@
 ; PR2488
 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"
 target triple = "i386-pc-linux-gnu"
-@p = weak global i8* null              ; <i8**> [#uses=2]
+@p = weak global ptr null              ; <ptr> [#uses=2]
 
 define i32 @main() nounwind  {
 entry:
-       %tmp248 = call i8* @llvm.stacksave( )           ; <i8*> [#uses=1]
-       %tmp2752 = alloca i32           ; <i32*> [#uses=2]
-       %tmpcast53 = bitcast i32* %tmp2752 to i8*               ; <i8*> [#uses=1]
-       store i32 2, i32* %tmp2752, align 4
-       store volatile i8* %tmpcast53, i8** @p, align 4
+       %tmp248 = call ptr @llvm.stacksave( )           ; <ptr> [#uses=1]
+       %tmp2752 = alloca i32           ; <ptr> [#uses=2]
+       store i32 2, ptr %tmp2752, align 4
+       store volatile ptr %tmp2752, ptr @p, align 4
        br label %bb44
 
 bb:            ; preds = %bb44
@@ -18,22 +17,21 @@ bb:         ; preds = %bb44
 
 bb44:          ; preds = %bb44, %entry
        %indvar = phi i32 [ 0, %entry ], [ %tmp3857, %bb44 ]            ; <i32> [#uses=1]
-       %tmp249 = phi i8* [ %tmp248, %entry ], [ %tmp2, %bb44 ]         ; <i8*> [#uses=1]
+       %tmp249 = phi ptr [ %tmp248, %entry ], [ %tmp2, %bb44 ]         ; <ptr> [#uses=1]
        %tmp3857 = add i32 %indvar, 1           ; <i32> [#uses=3]
-       call void @llvm.stackrestore( i8* %tmp249 )
-       %tmp2 = call i8* @llvm.stacksave( )             ; <i8*> [#uses=1]
+       call void @llvm.stackrestore( ptr %tmp249 )
+       %tmp2 = call ptr @llvm.stacksave( )             ; <ptr> [#uses=1]
        %tmp4 = srem i32 %tmp3857, 1000         ; <i32> [#uses=2]
        %tmp5 = add i32 %tmp4, 1                ; <i32> [#uses=1]
-       %tmp27 = alloca i32, i32 %tmp5          ; <i32*> [#uses=3]
-       %tmpcast = bitcast i32* %tmp27 to i8*           ; <i8*> [#uses=1]
-       store i32 1, i32* %tmp27, align 4
-       %tmp34 = getelementptr i32, i32* %tmp27, i32 %tmp4              ; <i32*> [#uses=1]
-       store i32 2, i32* %tmp34, align 4
-       store volatile i8* %tmpcast, i8** @p, align 4
+       %tmp27 = alloca i32, i32 %tmp5          ; <ptr> [#uses=3]
+       store i32 1, ptr %tmp27, align 4
+       %tmp34 = getelementptr i32, ptr %tmp27, i32 %tmp4               ; <ptr> [#uses=1]
+       store i32 2, ptr %tmp34, align 4
+       store volatile ptr %tmp27, ptr @p, align 4
        %exitcond = icmp eq i32 %tmp3857, 999999                ; <i1> [#uses=1]
        br i1 %exitcond, label %bb, label %bb44
 }
 
-declare i8* @llvm.stacksave() nounwind 
+declare ptr @llvm.stacksave() nounwind 
 
-declare void @llvm.stackrestore(i8*) nounwind 
+declare void @llvm.stackrestore(ptr) nounwind 
index 5ea323a7f11a19ad7edff118285f439d79836ff0..f45b0a1bb98536afa2366a3d74841f631ae97c7b 100644 (file)
@@ -2,22 +2,22 @@
 ; PR2496
 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:128:128"
 target triple = "i386-apple-darwin8"
-@g_1 = internal global i32 0           ; <i32*> [#uses=3]
+@g_1 = internal global i32 0           ; <ptr> [#uses=3]
 
 define i32 @main() nounwind  {
 entry:
        %tmp93 = icmp slt i32 0, 10             ; <i1> [#uses=0]
-       %tmp34 = load volatile i32, i32* @g_1, align 4          ; <i32> [#uses=1]
+       %tmp34 = load volatile i32, ptr @g_1, align 4           ; <i32> [#uses=1]
        br label %bb
 
 bb:            ; preds = %bb, %entry
        %b.0.reg2mem.0 = phi i32 [ 0, %entry ], [ %tmp6, %bb ]          ; <i32> [#uses=1]
        %tmp3.reg2mem.0 = phi i32 [ %tmp3, %bb ], [ %tmp34, %entry ]
        %tmp4 = add i32 %tmp3.reg2mem.0, 5              ; <i32> [#uses=1]
-       store volatile i32 %tmp4, i32* @g_1, align 4
+       store volatile i32 %tmp4, ptr @g_1, align 4
        %tmp6 = add i32 %b.0.reg2mem.0, 1               ; <i32> [#uses=2]
        %tmp9 = icmp slt i32 %tmp6, 10          ; <i1> [#uses=1]
-       %tmp3 = load volatile i32, i32* @g_1, align 4           ; <i32> [#uses=1]
+       %tmp3 = load volatile i32, ptr @g_1, align 4            ; <i32> [#uses=1]
        br i1 %tmp9, label %bb, label %bb11
 
 bb11:          ; preds = %bb
index 8aa86a5cb9b45f36b1e54b3a629ab42c75ea4130..1ab49007eedf48bcb9e875f61980498060535758 100644 (file)
@@ -2,12 +2,12 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 ; PR2629
 
-define void @f(i8* %x) nounwind  {
+define void @f(ptr %x) nounwind  {
 ; CHECK-LABEL: @f(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[BB:%.*]]
 ; CHECK:       bb:
-; CHECK-NEXT:    [[L1:%.*]] = load i8, i8* [[X:%.*]], align 1
+; CHECK-NEXT:    [[L1:%.*]] = load i8, ptr [[X:%.*]], align 1
 ; CHECK-NEXT:    [[TMP0:%.*]] = add i8 [[L1]], -9
 ; CHECK-NEXT:    [[C1:%.*]] = icmp ult i8 [[TMP0]], -3
 ; CHECK-NEXT:    [[TMP1:%.*]] = add i8 [[L1]], -13
@@ -23,8 +23,7 @@ entry:
   br label %bb
 
 bb:
-  %g1 = getelementptr i8, i8* %x, i32 0
-  %l1 = load i8, i8* %g1, align 1
+  %l1 = load i8, ptr %x, align 1
   %s1 = sub i8 %l1, 6
   %c1 = icmp ugt i8 %s1, 2
   %s2 = sub i8 %l1, 10
@@ -39,12 +38,12 @@ incompatible:
   ret void
 }
 
-define void @f_logical(i8* %x) nounwind  {
+define void @f_logical(ptr %x) nounwind  {
 ; CHECK-LABEL: @f_logical(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[BB:%.*]]
 ; CHECK:       bb:
-; CHECK-NEXT:    [[L1:%.*]] = load i8, i8* [[X:%.*]], align 1
+; CHECK-NEXT:    [[L1:%.*]] = load i8, ptr [[X:%.*]], align 1
 ; CHECK-NEXT:    [[TMP0:%.*]] = add i8 [[L1]], -9
 ; CHECK-NEXT:    [[C1:%.*]] = icmp ult i8 [[TMP0]], -3
 ; CHECK-NEXT:    [[TMP1:%.*]] = add i8 [[L1]], -13
@@ -60,8 +59,7 @@ entry:
   br label %bb
 
 bb:
-  %g1 = getelementptr i8, i8* %x, i32 0
-  %l1 = load i8, i8* %g1, align 1
+  %l1 = load i8, ptr %x, align 1
   %s1 = sub i8 %l1, 6
   %c1 = icmp ugt i8 %s1, 2
   %s2 = sub i8 %l1, 10
index 346c97ee446b5afb47f303a17b35d709b037d2e5..f86a1bbca130ead32fa0d3b3dcd82efe175494a9 100644 (file)
@@ -22,6 +22,6 @@ define void @entry(i32 %m_task_id, i32 %start_x, i32 %end_x, i32 %start_y, i32 %
        %11 = extractelement <2 x i32> %10, i32 1               ; <i32> [#uses=1]
        %12 = insertelement <4 x i32> zeroinitializer, i32 %11, i32 3           ; <<4 x i32>> [#uses=1]
        %13 = sitofp <4 x i32> %12 to <4 x float>               ; <<4 x float>> [#uses=1]
-       store <4 x float> %13, <4 x float>* null
+       store <4 x float> %13, ptr null
        br label %4
 }
index fda6cb07f6b0371acb1eff65a79f44ccf8ed0fc2..a01da8267f144e279017aad3317b3c1cb82a49d4 100644 (file)
@@ -2,7 +2,7 @@
 ; PR2940
 
 define i32 @tstid() {
-       %var0 = inttoptr i32 1 to i8*           ; <i8*> [#uses=1]
-       %var2 = ptrtoint i8* %var0 to i32               ; <i32> [#uses=1]
+       %var0 = inttoptr i32 1 to ptr           ; <ptr> [#uses=1]
+       %var2 = ptrtoint ptr %var0 to i32               ; <i32> [#uses=1]
        ret i32 %var2
 }
index 0f3e3ac1027d44a910070ae27cb0943a6e8b6309..df389eaaec4c21533a892a3ce117ac6958a1af8e 100644 (file)
@@ -3,9 +3,9 @@
 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:128:128"
 target triple = "i386-apple-darwin9.6"
 
-define i32 @test(i32* %P) nounwind {
+define i32 @test(ptr %P) nounwind {
 entry:
-  %Q = addrspacecast i32* %P to i32 addrspace(1)*
-  store i32 0, i32 addrspace(1)* %Q, align 4
+  %Q = addrspacecast ptr %P to ptr addrspace(1)
+  store i32 0, ptr addrspace(1) %Q, align 4
   ret i32 0
 }
index 660cba57f5e7b166cb8773cdf2880bb864e0a848..d1e8972548653582c6a4578908676558f279c97d 100644 (file)
@@ -6,42 +6,42 @@
 ; ModuleID = 'apf.c'
 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:128:128"
 target triple = "i386-apple-darwin9.6"
-@"\01LC" = internal constant [4 x i8] c"%f\0A\00"              ; <[4 x i8]*> [#uses=1]
+@"\01LC" = internal constant [4 x i8] c"%f\0A\00"              ; <ptr> [#uses=1]
 
 define void @foo1() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 0x7FF0000000000000, float* %x, align 4
-       store float 0x7FF8000000000000, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 0x7FF0000000000000, ptr %x, align 4
+       store float 0x7FF8000000000000, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
        ret void
 }
 
-declare i32 @printf(i8*, ...) nounwind
+declare i32 @printf(ptr, ...) nounwind
 
 define void @foo2() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 0x7FF0000000000000, float* %x, align 4
-       store float 0.000000e+00, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 0x7FF0000000000000, ptr %x, align 4
+       store float 0.000000e+00, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
@@ -50,17 +50,17 @@ return:             ; preds = %entry
 
 define void @foo3() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 0x7FF0000000000000, float* %x, align 4
-       store float 3.500000e+00, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 0x7FF0000000000000, ptr %x, align 4
+       store float 3.500000e+00, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
@@ -69,17 +69,17 @@ return:             ; preds = %entry
 
 define void @foo4() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 0x7FF0000000000000, float* %x, align 4
-       store float 0x7FF0000000000000, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 0x7FF0000000000000, ptr %x, align 4
+       store float 0x7FF0000000000000, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
@@ -88,17 +88,17 @@ return:             ; preds = %entry
 
 define void @foo5() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 0x7FF8000000000000, float* %x, align 4
-       store float 0x7FF0000000000000, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 0x7FF8000000000000, ptr %x, align 4
+       store float 0x7FF0000000000000, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
@@ -107,17 +107,17 @@ return:           ; preds = %entry
 
 define void @foo6() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 0x7FF8000000000000, float* %x, align 4
-       store float 0.000000e+00, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 0x7FF8000000000000, ptr %x, align 4
+       store float 0.000000e+00, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
@@ -126,17 +126,17 @@ return:           ; preds = %entry
 
 define void @foo7() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 0x7FF8000000000000, float* %x, align 4
-       store float 3.500000e+00, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 0x7FF8000000000000, ptr %x, align 4
+       store float 3.500000e+00, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
@@ -145,17 +145,17 @@ return:           ; preds = %entry
 
 define void @foo8() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 0x7FF8000000000000, float* %x, align 4
-       store float 0x7FF8000000000000, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 0x7FF8000000000000, ptr %x, align 4
+       store float 0x7FF8000000000000, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
@@ -164,17 +164,17 @@ return:           ; preds = %entry
 
 define void @foo9() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 0.000000e+00, float* %x, align 4
-       store float 0x7FF8000000000000, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 0.000000e+00, ptr %x, align 4
+       store float 0x7FF8000000000000, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
@@ -183,17 +183,17 @@ return:           ; preds = %entry
 
 define void @foo10() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 0.000000e+00, float* %x, align 4
-       store float 0x7FF0000000000000, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 0.000000e+00, ptr %x, align 4
+       store float 0x7FF0000000000000, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
@@ -202,17 +202,17 @@ return:           ; preds = %entry
 
 define void @foo11() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 0.000000e+00, float* %x, align 4
-       store float 0.000000e+00, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 0.000000e+00, ptr %x, align 4
+       store float 0.000000e+00, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
@@ -221,17 +221,17 @@ return:           ; preds = %entry
 
 define void @foo12() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 0.000000e+00, float* %x, align 4
-       store float 3.500000e+00, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 0.000000e+00, ptr %x, align 4
+       store float 3.500000e+00, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
@@ -240,17 +240,17 @@ return:           ; preds = %entry
 
 define void @foo13() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 3.500000e+00, float* %x, align 4
-       store float 0x7FF8000000000000, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 3.500000e+00, ptr %x, align 4
+       store float 0x7FF8000000000000, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
@@ -259,17 +259,17 @@ return:           ; preds = %entry
 
 define void @foo14() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 3.500000e+00, float* %x, align 4
-       store float 0x7FF0000000000000, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 3.500000e+00, ptr %x, align 4
+       store float 0x7FF0000000000000, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
@@ -278,17 +278,17 @@ return:           ; preds = %entry
 
 define void @foo15() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 3.500000e+00, float* %x, align 4
-       store float 0.000000e+00, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 3.500000e+00, ptr %x, align 4
+       store float 0.000000e+00, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
@@ -297,17 +297,17 @@ return:           ; preds = %entry
 
 define void @foo16() nounwind {
 entry:
-       %y = alloca float               ; <float*> [#uses=2]
-       %x = alloca float               ; <float*> [#uses=2]
+       %y = alloca float               ; <ptr> [#uses=2]
+       %x = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       store float 3.500000e+00, float* %x, align 4
-       store float 3.500000e+00, float* %y, align 4
-       %0 = load float, float* %y, align 4             ; <float> [#uses=1]
+       store float 3.500000e+00, ptr %x, align 4
+       store float 3.500000e+00, ptr %y, align 4
+       %0 = load float, ptr %y, align 4                ; <float> [#uses=1]
        %1 = fpext float %0 to double           ; <double> [#uses=1]
-       %2 = load float, float* %x, align 4             ; <float> [#uses=1]
+       %2 = load float, ptr %x, align 4                ; <float> [#uses=1]
        %3 = fpext float %2 to double           ; <double> [#uses=1]
        %4 = frem double %3, %1         ; <double> [#uses=1]
-       %5 = call i32 (i8*, ...) @printf(i8* getelementptr ([4 x i8], [4 x i8]* @"\01LC", i32 0, i32 0), double %4) nounwind            ; <i32> [#uses=0]
+       %5 = call i32 (ptr, ...) @printf(ptr @"\01LC", double %4) nounwind              ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
index 58f84f43374ad52f68aa9c8ee1290bb8dcd77a2a..8bf2ef350c727d074d5e94a820614c82ba985bb9 100644 (file)
@@ -8,68 +8,68 @@ target triple = "i386-apple-darwin9.6"
 
 define float @test1() nounwind {
 entry:
-       %retval = alloca float          ; <float*> [#uses=2]
-       %0 = alloca float               ; <float*> [#uses=2]
+       %retval = alloca float          ; <ptr> [#uses=2]
+       %0 = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
        %1 = frem double 1.000000e-01, 1.000000e+00     ; <double> [#uses=1]
        %2 = fptrunc double %1 to float         ; <float> [#uses=1]
-       store float %2, float* %0, align 4
-       %3 = load float, float* %0, align 4             ; <float> [#uses=1]
-       store float %3, float* %retval, align 4
+       store float %2, ptr %0, align 4
+       %3 = load float, ptr %0, align 4                ; <float> [#uses=1]
+       store float %3, ptr %retval, align 4
        br label %return
 
 return:                ; preds = %entry
-       %retval1 = load float, float* %retval           ; <float> [#uses=1]
+       %retval1 = load float, ptr %retval              ; <float> [#uses=1]
        ret float %retval1
 }
 
 define float @test2() nounwind {
 entry:
-       %retval = alloca float          ; <float*> [#uses=2]
-       %0 = alloca float               ; <float*> [#uses=2]
+       %retval = alloca float          ; <ptr> [#uses=2]
+       %0 = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
        %1 = frem double -1.000000e-01, 1.000000e+00    ; <double> [#uses=1]
        %2 = fptrunc double %1 to float         ; <float> [#uses=1]
-       store float %2, float* %0, align 4
-       %3 = load float, float* %0, align 4             ; <float> [#uses=1]
-       store float %3, float* %retval, align 4
+       store float %2, ptr %0, align 4
+       %3 = load float, ptr %0, align 4                ; <float> [#uses=1]
+       store float %3, ptr %retval, align 4
        br label %return
 
 return:                ; preds = %entry
-       %retval1 = load float, float* %retval           ; <float> [#uses=1]
+       %retval1 = load float, ptr %retval              ; <float> [#uses=1]
        ret float %retval1
 }
 
 define float @test3() nounwind {
 entry:
-       %retval = alloca float          ; <float*> [#uses=2]
-       %0 = alloca float               ; <float*> [#uses=2]
+       %retval = alloca float          ; <ptr> [#uses=2]
+       %0 = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
        %1 = frem double 1.000000e-01, -1.000000e+00    ; <double> [#uses=1]
        %2 = fptrunc double %1 to float         ; <float> [#uses=1]
-       store float %2, float* %0, align 4
-       %3 = load float, float* %0, align 4             ; <float> [#uses=1]
-       store float %3, float* %retval, align 4
+       store float %2, ptr %0, align 4
+       %3 = load float, ptr %0, align 4                ; <float> [#uses=1]
+       store float %3, ptr %retval, align 4
        br label %return
 
 return:                ; preds = %entry
-       %retval1 = load float, float* %retval           ; <float> [#uses=1]
+       %retval1 = load float, ptr %retval              ; <float> [#uses=1]
        ret float %retval1
 }
 
 define float @test4() nounwind {
 entry:
-       %retval = alloca float          ; <float*> [#uses=2]
-       %0 = alloca float               ; <float*> [#uses=2]
+       %retval = alloca float          ; <ptr> [#uses=2]
+       %0 = alloca float               ; <ptr> [#uses=2]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
        %1 = frem double -1.000000e-01, -1.000000e+00   ; <double> [#uses=1]
        %2 = fptrunc double %1 to float         ; <float> [#uses=1]
-       store float %2, float* %0, align 4
-       %3 = load float, float* %0, align 4             ; <float> [#uses=1]
-       store float %3, float* %retval, align 4
+       store float %2, ptr %0, align 4
+       %3 = load float, ptr %0, align 4                ; <float> [#uses=1]
+       store float %3, ptr %retval, align 4
        br label %return
 
 return:                ; preds = %entry
-       %retval1 = load float, float* %retval           ; <float> [#uses=1]
+       %retval1 = load float, ptr %retval              ; <float> [#uses=1]
        ret float %retval1
 }
index ecce1505cdc862a65defa047f482b8c75e0fc354..477f8cb6dce7d2878c128d86655345d88c2380c5 100644 (file)
@@ -4,15 +4,14 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 target triple = "x86_64-unknown-linux-gnu"
        %struct.atomic_t = type { i32 }
        %struct.inode = type { i32, %struct.mutex }
-       %struct.list_head = type { %struct.list_head*, %struct.list_head* }
+       %struct.list_head = type { ptr, ptr }
        %struct.lock_class_key = type {  }
        %struct.mutex = type { %struct.atomic_t, %struct.rwlock_t, %struct.list_head }
        %struct.rwlock_t = type { %struct.lock_class_key }
 
-define void @handle_event(%struct.inode* %bar) nounwind {
+define void @handle_event(ptr %bar) nounwind {
 entry:
-       %0 = getelementptr %struct.inode, %struct.inode* %bar, i64 -1, i32 1, i32 1             ; <%struct.rwlock_t*> [#uses=1]
-       %1 = bitcast %struct.rwlock_t* %0 to i32*               ; <i32*> [#uses=1]
-       store i32 1, i32* %1, align 4
+       %0 = getelementptr %struct.inode, ptr %bar, i64 -1, i32 1, i32 1                ; <ptr> [#uses=1]
+       store i32 1, ptr %0, align 4
        ret void
 }
index a38714027022eee9c254055aef1ae2297326a665..75f5115d23d3bafcc12bf3b1a4cbb3de3c86ad0d 100644 (file)
@@ -1,11 +1,11 @@
 ; RUN: opt < %s -passes=instcombine | llvm-dis
 ; PR3452
-define i128 @test(i64 %A, i64 %B, i1 %C, i128 %Z, i128 %Y, i64* %P, i64* %Q) {
+define i128 @test(i64 %A, i64 %B, i1 %C, i128 %Z, i128 %Y, ptr %P, ptr %Q) {
 entry:
        %tmp2 = trunc i128 %Z to i64
        %tmp4 = trunc i128 %Y to i64
-       store i64 %tmp2, i64* %P
-       store i64 %tmp4, i64* %Q
+       store i64 %tmp2, ptr %P
+       store i64 %tmp4, ptr %Q
        %x = sub i64 %tmp2, %tmp4
        %c = sub i64 %tmp2, %tmp4
        %tmp137 = zext i1 %C to i64
index ceffb8941de86faf406cc5b6fb0f243ea178efcb..d87033f952a02ecd3b5cdca88f1765c578b50764 100644 (file)
@@ -3,12 +3,12 @@
 ; Check that nocapture attributes are added when run after an SCC pass.
 ; PR3520
 
-define i32 @use(i8* %x) nounwind readonly {
-; CHECK: @use(i8* nocapture %x)
-  %1 = tail call i64 @strlen(i8* %x) nounwind readonly
+define i32 @use(ptr %x) nounwind readonly {
+; CHECK: @use(ptr nocapture %x)
+  %1 = tail call i64 @strlen(ptr %x) nounwind readonly
   %2 = trunc i64 %1 to i32
   ret i32 %2
 }
 
-declare i64 @strlen(i8*) nounwind readonly
-; CHECK: declare i64 @strlen(i8* nocapture) nounwind readonly
+declare i64 @strlen(ptr) nounwind readonly
+; CHECK: declare i64 @strlen(ptr nocapture) nounwind readonly
index 5e2ac42b4d7df4183892e0bf8c2ba23af6c47097..9c515f07f31fac88da6b781d6308eb3f16e8b288 100644 (file)
@@ -7,6 +7,6 @@ target triple = "i386-pc-linux-gnu"
 @.str1 = internal constant [4 x i8] c"\B5%8\00"
 
 define i32 @test() {
-  %rhsv = load i32, i32* bitcast ([4 x i8]* @.str1 to i32*), align 1
+  %rhsv = load i32, ptr @.str1, align 1
   ret i32 %rhsv
 }
index c26167667c8d76f3882e7bd8a4be6a57be09d7c0..3ae6f0095fc6f4df43967af914311dbd2f9f8f0c 100644 (file)
@@ -3,24 +3,20 @@
 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"
 target triple = "i386-pc-linux-gnu"
 
-define void @_ada_c32001b(i32 %tmp5, i32* %src) {
+define void @_ada_c32001b(i32 %tmp5, ptr %src) {
 entry:
        %max289 = select i1 false, i32 %tmp5, i32 0             ; <i32> [#uses=1]
        %tmp6 = mul i32 %max289, 4              ; <i32> [#uses=1]
-       %tmp7 = alloca i8, i32 0                ; <i8*> [#uses=1]
-       %tmp8 = bitcast i8* %tmp7 to [0 x [0 x i32]]*           ; <[0 x [0 x i32]]*> [#uses=1]
-       %tmp11 = load i32, i32* %src, align 1           ; <i32> [#uses=1]
+       %tmp7 = alloca i8, i32 0                ; <ptr> [#uses=1]
+       %tmp11 = load i32, ptr %src, align 1            ; <i32> [#uses=1]
        %tmp12 = icmp eq i32 %tmp11, 3          ; <i1> [#uses=1]
        %tmp13 = zext i1 %tmp12 to i8           ; <i8> [#uses=1]
        %tmp14 = ashr i32 %tmp6, 2              ; <i32> [#uses=1]
-       %tmp15 = bitcast [0 x [0 x i32]]* %tmp8 to i8*          ; <i8*> [#uses=1]
        %tmp16 = mul i32 %tmp14, 4              ; <i32> [#uses=1]
        %tmp17 = mul i32 1, %tmp16              ; <i32> [#uses=1]
-       %tmp18 = getelementptr i8, i8* %tmp15, i32 %tmp17               ; <i8*> [#uses=1]
-       %tmp19 = bitcast i8* %tmp18 to [0 x i32]*               ; <[0 x i32]*> [#uses=1]
-       %tmp20 = bitcast [0 x i32]* %tmp19 to i32*              ; <i32*> [#uses=1]
-       %tmp21 = getelementptr i32, i32* %tmp20, i32 0          ; <i32*> [#uses=1]
-       %tmp22 = load i32, i32* %tmp21, align 1         ; <i32> [#uses=1]
+       %tmp18 = getelementptr i8, ptr %tmp7, i32 %tmp17                ; <ptr> [#uses=1]
+       %tmp21 = getelementptr i32, ptr %tmp18, i32 0           ; <ptr> [#uses=1]
+       %tmp22 = load i32, ptr %tmp21, align 1          ; <i32> [#uses=1]
        %tmp23 = icmp eq i32 %tmp22, 4          ; <i1> [#uses=1]
        %tmp24 = zext i1 %tmp23 to i8           ; <i8> [#uses=1]
        %toBool709 = icmp ne i8 %tmp13, 0               ; <i1> [#uses=1]
index 3cf9c48dfe2bba62bbc5ec9aa3c2be836149c098..7227fa5e20213ff6a0db5b168f0348a9d19a9024 100644 (file)
@@ -1,11 +1,11 @@
 ; RUN: opt < %s -passes=instcombine | llvm-dis
 ; PR3826
 
-define void @0(<4 x i16>*, <4 x i16>*) {
-       %3 = alloca <4 x i16>*          ; <<4 x i16>**> [#uses=1]
-       %4 = load <4 x i16>, <4 x i16>* null, align 1           ; <<4 x i16>> [#uses=1]
+define void @0(ptr, ptr) {
+       %3 = alloca ptr         ; <ptr> [#uses=1]
+       %4 = load <4 x i16>, ptr null, align 1          ; <<4 x i16>> [#uses=1]
        %5 = ashr <4 x i16> %4, <i16 5, i16 5, i16 5, i16 5>            ; <<4 x i16>> [#uses=1]
-       %6 = load <4 x i16>*, <4 x i16>** %3            ; <<4 x i16>*> [#uses=1]
-       store <4 x i16> %5, <4 x i16>* %6, align 1
+       %6 = load ptr, ptr %3           ; <ptr> [#uses=1]
+       store <4 x i16> %5, ptr %6, align 1
        ret void
 }
index b0d5ec54eeb6bdc002dd673ee2e4d77074fe9bb6..7f32f947aa2164aa6d399f48136db58cb4aed0f8 100644 (file)
@@ -1,8 +1,8 @@
 ; RUN: opt < %s -passes=instcombine -S | not grep cmp
 ; rdar://6903175
 
-define i1 @f0(i32 *%a) nounwind {
-       %b = load i32, i32* %a, align 4
+define i1 @f0(ptr %a) nounwind {
+       %b = load i32, ptr %a, align 4
        %c = uitofp i32 %b to double
        %d = fcmp ogt double %c, 0x41EFFFFFFFE00000
        ret i1 %d
index 61191f9ae352aa592a6b21ad2f71e6aace6c65a0..0bfa8e97cfc68b6da8abe29fdae744c3ebd2066e 100644 (file)
@@ -2,6 +2,6 @@
 ; PR4366
 
 define void @a() {
-  store i32 0, i32 addrspace(1)* null
+  store i32 0, ptr addrspace(1) null
   ret void
 }
index e549086166987409d024bfdc833cb78cd85c20b6..10fae95b0a15cf569e54e709fba755012e3c8463 100644 (file)
@@ -3,14 +3,14 @@
 @.str254 = internal constant [2 x i8] c".\00"
 @.str557 = internal constant [3 x i8] c"::\00"
 
-define i8* @demangle_qualified(i32 %isfuncname) nounwind {
+define ptr @demangle_qualified(i32 %isfuncname) nounwind {
 entry:
   %tobool272 = icmp ne i32 %isfuncname, 0
-  %cond276 = select i1 %tobool272, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str254, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str557, i32 0, i32 0) ; <i8*> [#uses=4]
-  %cmp.i504 = icmp eq i8* %cond276, null
-  %rval = getelementptr i8, i8* %cond276, i1 %cmp.i504
-  ret i8* %rval
+  %cond276 = select i1 %tobool272, ptr @.str254, ptr @.str557 ; <ptr> [#uses=4]
+  %cmp.i504 = icmp eq ptr %cond276, null
+  %rval = getelementptr i8, ptr %cond276, i1 %cmp.i504
+  ret ptr %rval
 }
 
 ; CHECK: %cond276 = select i1
-; CHECK: ret i8* %cond276
+; CHECK: ret ptr %cond276
index e802cf62c6d1d229d91a4ea09ead7ef9b70cb53b..c9b2d6b41aa9c9966d26da07c1dfe85c24b2d038 100644 (file)
@@ -3,13 +3,13 @@
 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-unknown-linux-gnu"
 
-@g_92 = common global [2 x i32*] zeroinitializer, align 4 ; <[2 x i32*]*> [#uses=1]
-@g_177 = constant i32** bitcast (i8* getelementptr (i8, i8* bitcast ([2 x i32*]* @g_92 to i8*), i64 4) to i32**), align 4 ; <i32***> [#uses=1]
+@g_92 = common global [2 x ptr] zeroinitializer, align 4 ; <ptr> [#uses=1]
+@g_177 = constant ptr getelementptr (i8, ptr @g_92, i64 4), align 4 ; <ptr> [#uses=1]
 
 define i1 @PR6486() nounwind {
 ; CHECK-LABEL: @PR6486(
-  %tmp = load i32**, i32*** @g_177                       ; <i32**> [#uses=1]
-  %cmp = icmp ne i32** null, %tmp                 ; <i1> [#uses=1]
+  %tmp = load ptr, ptr @g_177                       ; <ptr> [#uses=1]
+  %cmp = icmp ne ptr null, %tmp                 ; <i1> [#uses=1]
   %conv = zext i1 %cmp to i32                     ; <i32> [#uses=1]
   %cmp1 = icmp sle i32 0, %conv                   ; <i1> [#uses=1]
   ret i1 %cmp1
@@ -21,12 +21,12 @@ define i1 @PR6486() nounwind {
 
 define i1 @PR16462_1() nounwind {
 ; CHECK-LABEL: @PR16462_1(
-  ret i1 icmp sgt (i32 sext (i16 trunc (i32 select (i1 icmp eq (i32* getelementptr inbounds ([1 x i32], [1 x i32]* @a, i32 0, i32 0), i32* @d), i32 0, i32 1) to i16) to i32), i32 65535)
+  ret i1 icmp sgt (i32 sext (i16 trunc (i32 select (i1 icmp eq (ptr @a, ptr @d), i32 0, i32 1) to i16) to i32), i32 65535)
 ; CHECK: ret i1 false
 }
 
 define i1 @PR16462_2() nounwind {
 ; CHECK-LABEL: @PR16462_2(
-  ret i1 icmp sgt (i32 sext (i16 trunc (i32 select (i1 icmp eq (i32* getelementptr inbounds ([1 x i32], [1 x i32]* @a, i32 0, i32 0), i32* @d), i32 0, i32 1) to i16) to i32), i32 42)
+  ret i1 icmp sgt (i32 sext (i16 trunc (i32 select (i1 icmp eq (ptr @a, ptr @d), i32 0, i32 1) to i16) to i32), i32 42)
 ; CHECK: ret i1 false
 }
index a1c71f06ac1b46740cc7fb4d20cd0ae68a0c64df..53100cd651788f80800b5d62cf1ada0bae1b13fa 100644 (file)
@@ -9,17 +9,16 @@ target triple = "x86_64-unknown-linux-gnu"
 
 @.str = private constant [3 x i8] c"%s\00"
 
-define void @CopyEventArg(%union.anon* %ev, i8* %src) nounwind {
+define void @CopyEventArg(ptr %ev, ptr %src) nounwind {
 ; CHECK-LABEL: @CopyEventArg(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CSTR:%.*]] = bitcast %union.anon* [[EV:%.*]] to i8*
-; CHECK-NEXT:    [[STRCPY:%.*]] = call i8* @strcpy(i8* noundef nonnull dereferenceable(1) [[SRC:%.*]], i8* noundef nonnull dereferenceable(1) [[CSTR]])
+; CHECK-NEXT:    [[STRCPY:%.*]] = call ptr @strcpy(ptr noundef nonnull dereferenceable(1) [[SRC:%.*]], ptr noundef nonnull dereferenceable(1) [[EV:%.*]])
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %call = call i32 (i8*, i8*, ...) @sprintf(i8* %src, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), %union.anon* %ev) nounwind
+  %call = call i32 (ptr, ptr, ...) @sprintf(ptr %src, ptr @.str, ptr %ev) nounwind
   ret void
 }
 
-declare i32 @sprintf(i8*, i8*, ...)
+declare i32 @sprintf(ptr, ptr, ...)
 
index c3a078a9bfdefe021e151469320f715e54965dfa..608a1588406e0960f681061f291f27796bbdf187 100644 (file)
@@ -2,16 +2,16 @@
 
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
 
-define {}* @foo({}* %x, i32 %n) {
+define ptr @foo(ptr %x, i32 %n) {
 ; CHECK-LABEL: @foo(
 ; CHECK-NOT: getelementptr
-  %p = getelementptr {}, {}* %x, i32 %n
-  ret {}* %p
+  %p = getelementptr {}, ptr %x, i32 %n
+  ret ptr %p
 }
 
-define i8* @bar(i64 %n, {{}, [0 x {[0 x i8]}]}* %p) {
+define ptr @bar(i64 %n, ptr %p) {
 ; CHECK-LABEL: @bar(
-  %g = getelementptr {{}, [0 x {[0 x i8]}]}, {{}, [0 x {[0 x i8]}]}* %p, i64 %n, i32 1, i64 %n, i32 0, i64 %n
+  %g = getelementptr {{}, [0 x {[0 x i8]}]}, ptr %p, i64 %n, i32 1, i64 %n, i32 0, i64 %n
 ; CHECK: %p, i64 0, i32 1, i64 0, i32 0, i64 %n
-  ret i8* %g
+  ret ptr %g
 }
index 7faf952e9eb14c1caf986e51193bc937c0c7369a..98f716d6d7b7098e35b25fc52029b5d13e782e8e 100644 (file)
@@ -7,7 +7,7 @@
 
 target triple = "x86_64-unknown-linux-gnu"
 
-define <4 x float> @m_387(i8* noalias nocapture %A, i8* nocapture %B, <4 x i1> %C) nounwind {
+define <4 x float> @m_387(ptr noalias nocapture %A, ptr nocapture %B, <4 x i1> %C) nounwind {
 entry:
   %movcsext20 = sext <4 x i1> %C to <4 x i32>
   %tmp2389 = xor <4 x i32> %movcsext20, <i32 -1, i32 -1, i32 -1, i32 -1>
index 3bca0de3bc3e572b240e4f614b97e9efd04ee48c..b34c4c2a32213148d71b8083d62363db2b2843e0 100644 (file)
@@ -5,10 +5,10 @@ define <2 x i16> @entry(<2 x i16> %a) nounwind {
 entry:
   %a.addr = alloca <2 x i16>, align 4
   %.compoundliteral = alloca <2 x i16>, align 4
-  store <2 x i16> %a, <2 x i16>* %a.addr, align 4
-  %tmp = load <2 x i16>, <2 x i16>* %a.addr, align 4
-  store <2 x i16> zeroinitializer, <2 x i16>* %.compoundliteral
-  %tmp1 = load <2 x i16>, <2 x i16>* %.compoundliteral
+  store <2 x i16> %a, ptr %a.addr, align 4
+  %tmp = load <2 x i16>, ptr %a.addr, align 4
+  store <2 x i16> zeroinitializer, ptr %.compoundliteral
+  %tmp1 = load <2 x i16>, ptr %.compoundliteral
   %cmp = icmp uge <2 x i16> %tmp, %tmp1
   %sext = sext <2 x i1> %cmp to <2 x i16>
   ret <2 x i16> %sext
index 29e5fb27a4b9d20c0eeeef92901715ff855c433e..2aba273da92697d143afc6b9cf51ece2e8374b6a 100644 (file)
@@ -9,10 +9,10 @@ entry:
     %tmp2 = add i32 %argc, 1879048192
     %p = alloca i8
 ; CHECK: getelementptr
-    %p1 = getelementptr i8, i8* %p, i32 %tmp1
+    %p1 = getelementptr i8, ptr %p, i32 %tmp1
 ; CHECK: getelementptr
-    %p2 = getelementptr i8, i8* %p, i32 %tmp2
-    %cmp = icmp ult i8* %p1, %p2
+    %p2 = getelementptr i8, ptr %p, i32 %tmp2
+    %cmp = icmp ult ptr %p1, %p2
     br i1 %cmp, label %bbtrue, label %bbfalse
 bbtrue:          ; preds = %entry
     ret i32 -1
index a9b7de5e7b88db9fb52c34ac7c143bcf842d77be..ac7c17d12bf071835f0ff68360d6372515dd1fd9 100644 (file)
@@ -11,12 +11,12 @@ define zeroext i16 @foo1(i32 %on_off) {
 ;
   %on_off.addr = alloca i32, align 4
   %a = alloca i32, align 4
-  store i32 %on_off, i32* %on_off.addr, align 4
-  %tmp = load i32, i32* %on_off.addr, align 4
+  store i32 %on_off, ptr %on_off.addr, align 4
+  %tmp = load i32, ptr %on_off.addr, align 4
   %sub = sub i32 1, %tmp
   %mul = mul i32 %sub, -2
-  store i32 %mul, i32* %a, align 4
-  %tmp1 = load i32, i32* %a, align 4
+  store i32 %mul, ptr %a, align 4
+  %tmp1 = load i32, ptr %a, align 4
   %conv = trunc i32 %tmp1 to i16
   ret i16 %conv
 }
@@ -31,14 +31,14 @@ define zeroext i16 @foo2(i32 %on_off, i32 %q) {
   %on_off.addr = alloca i32, align 4
   %q.addr = alloca i32, align 4
   %a = alloca i32, align 4
-  store i32 %on_off, i32* %on_off.addr, align 4
-  store i32 %q, i32* %q.addr, align 4
-  %tmp = load i32, i32* %q.addr, align 4
-  %tmp1 = load i32, i32* %on_off.addr, align 4
+  store i32 %on_off, ptr %on_off.addr, align 4
+  store i32 %q, ptr %q.addr, align 4
+  %tmp = load i32, ptr %q.addr, align 4
+  %tmp1 = load i32, ptr %on_off.addr, align 4
   %sub = sub i32 %tmp, %tmp1
   %mul = mul i32 %sub, -4
-  store i32 %mul, i32* %a, align 4
-  %tmp2 = load i32, i32* %a, align 4
+  store i32 %mul, ptr %a, align 4
+  %tmp2 = load i32, ptr %a, align 4
   %conv = trunc i32 %tmp2 to i16
   ret i16 %conv
 }
@@ -52,12 +52,12 @@ define zeroext i16 @foo3(i32 %on_off) {
 ;
   %on_off.addr = alloca i32, align 4
   %a = alloca i32, align 4
-  store i32 %on_off, i32* %on_off.addr, align 4
-  %tmp = load i32, i32* %on_off.addr, align 4
+  store i32 %on_off, ptr %on_off.addr, align 4
+  %tmp = load i32, ptr %on_off.addr, align 4
   %sub = sub i32 7, %tmp
   %mul = mul i32 %sub, -4
-  store i32 %mul, i32* %a, align 4
-  %tmp1 = load i32, i32* %a, align 4
+  store i32 %mul, ptr %a, align 4
+  %tmp1 = load i32, ptr %a, align 4
   %conv = trunc i32 %tmp1 to i16
   ret i16 %conv
 }
index 515d26dac8baa13af7c9c1dd54dcb69615295476..0aee53b80eb6400cba077d767613fb1df954eb51 100644 (file)
@@ -4,9 +4,9 @@
 
 @G = external global [0 x %opaque_struct]
 
-declare void @foo(%opaque_struct*)
+declare void @foo(ptr)
 
 define void @bar() {
-  call void @foo(%opaque_struct* bitcast ([0 x %opaque_struct]* @G to %opaque_struct*))
+  call void @foo(ptr @G)
   ret void
 }
index d839e19129e16bd471b4c20a1c624dc4f94a698f..7366b50ed4b51fa659fdec95440f1472c96b7c22 100644 (file)
@@ -3,12 +3,12 @@
 @.str = private unnamed_addr constant [35 x i8] c"\0Ain_range input (should be 0): %f\0A\00", align 1
 @.str1 = external hidden unnamed_addr constant [35 x i8], align 1
 
-declare i32 @printf(i8*, ...)
+declare i32 @printf(ptr, ...)
 define i64 @_Z8tempCastj(i32 %val) uwtable ssp {
 entry:
-  %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str1, i64 0, i64 0), i32 %val)
+  %call = call i32 (ptr, ...) @printf(ptr @.str1, i32 %val)
   %conv = uitofp i32 %val to double
-  %call.i = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str, i64 0, i64 0), double %conv)
+  %call.i = call i32 (ptr, ...) @printf(ptr @.str, double %conv)
   %cmp.i = fcmp oge double %conv, -1.000000e+00
   br i1 %cmp.i, label %land.rhs.i, label %if.end.critedge
 ; CHECK:  br i1 true, label %land.rhs.i, label %if.end.critedge
index de2ed86d480b762f38f4163f7c50fb642053facf..9a2d5e6aa2ea3e189896e6db3409638bad53af30 100644 (file)
@@ -3,21 +3,21 @@
 
 ; Derived from gcc.c-torture/execute/frame-address.c
 
-define i32 @func(i8* %c, i8* %f) nounwind uwtable readnone noinline ssp {
+define i32 @func(ptr %c, ptr %f) nounwind uwtable readnone noinline ssp {
 ; CHECK-LABEL: @func(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[D:%.*]] = alloca i8, align 1
-; CHECK-NEXT:    store i8 0, i8* [[D]], align 1
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i8* [[D]], [[C:%.*]]
+; CHECK-NEXT:    store i8 0, ptr [[D]], align 1
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt ptr [[D]], [[C:%.*]]
 ; CHECK-NEXT:    br i1 [[CMP]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
 ; CHECK:       if.then:
-; CHECK-NEXT:    [[CMP2:%.*]] = icmp ule i8* [[D]], [[F:%.*]]
-; CHECK-NEXT:    [[NOT_CMP1:%.*]] = icmp uge i8* [[C]], [[F]]
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp ule ptr [[D]], [[F:%.*]]
+; CHECK-NEXT:    [[NOT_CMP1:%.*]] = icmp uge ptr [[C]], [[F]]
 ; CHECK-NEXT:    [[DOTCMP2:%.*]] = and i1 [[CMP2]], [[NOT_CMP1]]
 ; CHECK-NEXT:    br label [[RETURN:%.*]]
 ; CHECK:       if.else:
-; CHECK-NEXT:    [[CMP5:%.*]] = icmp uge i8* [[D]], [[F]]
-; CHECK-NEXT:    [[NOT_CMP3:%.*]] = icmp ule i8* [[C]], [[F]]
+; CHECK-NEXT:    [[CMP5:%.*]] = icmp uge ptr [[D]], [[F]]
+; CHECK-NEXT:    [[NOT_CMP3:%.*]] = icmp ule ptr [[C]], [[F]]
 ; CHECK-NEXT:    [[DOTCMP5:%.*]] = and i1 [[CMP5]], [[NOT_CMP3]]
 ; CHECK-NEXT:    br label [[RETURN]]
 ; CHECK:       return:
@@ -27,20 +27,20 @@ define i32 @func(i8* %c, i8* %f) nounwind uwtable readnone noinline ssp {
 ;
 entry:
   %d = alloca i8, align 1
-  store i8 0, i8* %d, align 1
-  %cmp = icmp ugt i8* %d, %c
+  store i8 0, ptr %d, align 1
+  %cmp = icmp ugt ptr %d, %c
   br i1 %cmp, label %if.else, label %if.then
 
 if.then:                                          ; preds = %entry
-  %cmp2 = icmp ule i8* %d, %f
-  %not.cmp1 = icmp uge i8* %c, %f
+  %cmp2 = icmp ule ptr %d, %f
+  %not.cmp1 = icmp uge ptr %c, %f
   %.cmp2 = and i1 %cmp2, %not.cmp1
   %land.ext = zext i1 %.cmp2 to i32
   br label %return
 
 if.else:                                          ; preds = %entry
-  %cmp5 = icmp uge i8* %d, %f
-  %not.cmp3 = icmp ule i8* %c, %f
+  %cmp5 = icmp uge ptr %d, %f
+  %not.cmp3 = icmp ule ptr %c, %f
   %.cmp5 = and i1 %cmp5, %not.cmp3
   %land.ext7 = zext i1 %.cmp5 to i32
   br label %return
@@ -50,21 +50,21 @@ return:                                           ; preds = %if.else, %if.then
   ret i32 %retval.0
 }
 
-define i32 @func_logical(i8* %c, i8* %f) nounwind uwtable readnone noinline ssp {
+define i32 @func_logical(ptr %c, ptr %f) nounwind uwtable readnone noinline ssp {
 ; CHECK-LABEL: @func_logical(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[D:%.*]] = alloca i8, align 1
-; CHECK-NEXT:    store i8 0, i8* [[D]], align 1
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i8* [[D]], [[C:%.*]]
+; CHECK-NEXT:    store i8 0, ptr [[D]], align 1
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt ptr [[D]], [[C:%.*]]
 ; CHECK-NEXT:    br i1 [[CMP]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
 ; CHECK:       if.then:
-; CHECK-NEXT:    [[CMP2:%.*]] = icmp ule i8* [[D]], [[F:%.*]]
-; CHECK-NEXT:    [[NOT_CMP1:%.*]] = icmp uge i8* [[C]], [[F]]
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp ule ptr [[D]], [[F:%.*]]
+; CHECK-NEXT:    [[NOT_CMP1:%.*]] = icmp uge ptr [[C]], [[F]]
 ; CHECK-NEXT:    [[DOTCMP2:%.*]] = select i1 [[CMP2]], i1 [[NOT_CMP1]], i1 false
 ; CHECK-NEXT:    br label [[RETURN:%.*]]
 ; CHECK:       if.else:
-; CHECK-NEXT:    [[CMP5:%.*]] = icmp uge i8* [[D]], [[F]]
-; CHECK-NEXT:    [[NOT_CMP3:%.*]] = icmp ule i8* [[C]], [[F]]
+; CHECK-NEXT:    [[CMP5:%.*]] = icmp uge ptr [[D]], [[F]]
+; CHECK-NEXT:    [[NOT_CMP3:%.*]] = icmp ule ptr [[C]], [[F]]
 ; CHECK-NEXT:    [[DOTCMP5:%.*]] = select i1 [[CMP5]], i1 [[NOT_CMP3]], i1 false
 ; CHECK-NEXT:    br label [[RETURN]]
 ; CHECK:       return:
@@ -74,20 +74,20 @@ define i32 @func_logical(i8* %c, i8* %f) nounwind uwtable readnone noinline ssp
 ;
 entry:
   %d = alloca i8, align 1
-  store i8 0, i8* %d, align 1
-  %cmp = icmp ugt i8* %d, %c
+  store i8 0, ptr %d, align 1
+  %cmp = icmp ugt ptr %d, %c
   br i1 %cmp, label %if.else, label %if.then
 
 if.then:                                          ; preds = %entry
-  %cmp2 = icmp ule i8* %d, %f
-  %not.cmp1 = icmp uge i8* %c, %f
+  %cmp2 = icmp ule ptr %d, %f
+  %not.cmp1 = icmp uge ptr %c, %f
   %.cmp2 = select i1 %cmp2, i1 %not.cmp1, i1 false
   %land.ext = zext i1 %.cmp2 to i32
   br label %return
 
 if.else:                                          ; preds = %entry
-  %cmp5 = icmp uge i8* %d, %f
-  %not.cmp3 = icmp ule i8* %c, %f
+  %cmp5 = icmp uge ptr %d, %f
+  %not.cmp3 = icmp ule ptr %c, %f
   %.cmp5 = select i1 %cmp5, i1 %not.cmp3, i1 false
   %land.ext7 = zext i1 %.cmp5 to i32
   br label %return
index 7828778b8901718369c8fa970daaf0cffa2d2ffb..b4efe6126763ea0d4c293795656a38dfcd069ffd 100644 (file)
@@ -6,17 +6,17 @@
 
 define void @func() nounwind uwtable ssp {
 entry:
-  %0 = load i8, i8* @c, align 1
+  %0 = load i8, ptr @c, align 1
   %conv = zext i8 %0 to i32
   %or = or i32 %conv, 1
   %conv1 = trunc i32 %or to i8
-  store i8 %conv1, i8* @a, align 1
+  store i8 %conv1, ptr @a, align 1
   %conv2 = zext i8 %conv1 to i32
   %neg = xor i32 %conv2, -1
   %and = and i32 1, %neg
   %conv3 = trunc i32 %and to i8
-  store i8 %conv3, i8* @b, align 1
-  %1 = load i8, i8* @a, align 1
+  store i8 %conv3, ptr @b, align 1
+  %1 = load i8, ptr @a, align 1
   %conv4 = zext i8 %1 to i32
   %conv5 = zext i8 %conv3 to i32
   %tobool = icmp ne i32 %conv4, 0
@@ -31,7 +31,7 @@ land.end:                                         ; preds = %land.rhs, %entry
   %land.ext = zext i1 %2 to i32
   %mul = mul nsw i32 3, %land.ext
   %conv9 = trunc i32 %mul to i8
-  store i8 %conv9, i8* @a, align 1
+  store i8 %conv9, ptr @a, align 1
   ret void
 
 ; CHECK-LABEL: @func(
index 76b60d4409b4748094f49d04f80d696c00f90273..b3a4b4fbdf853b9341ea47ea1d76b4e5334743bf 100644 (file)
@@ -1,14 +1,14 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 ; <rdar://problem/10889741>
 
-define void @func(double %r, double %g, double %b, double* %outH, double* %outS, double* %outL) nounwind uwtable ssp {
+define void @func(double %r, double %g, double %b, ptr %outH, ptr %outS, ptr %outL) nounwind uwtable ssp {
 bb:
   %tmp = alloca double, align 8
   %tmp1 = alloca double, align 8
   %tmp2 = alloca double, align 8
-  store double %r, double* %tmp, align 8
-  store double %g, double* %tmp1, align 8
-  store double %b, double* %tmp2, align 8
+  store double %r, ptr %tmp, align 8
+  store double %g, ptr %tmp1, align 8
+  store double %b, ptr %tmp2, align 8
   %tmp3 = fcmp ogt double %r, %g
   br i1 %tmp3, label %bb4, label %bb8
 
@@ -33,17 +33,17 @@ bb11:                                             ; preds = %bb8
   br label %bb12
 
 bb12:                                             ; preds = %bb11, %bb10, %bb7, %bb6
-  %max.0 = phi double* [ %tmp, %bb6 ], [ %tmp2, %bb7 ], [ %tmp1, %bb10 ], [ %tmp2, %bb11 ]
-; CHECK: %tmp13 = load double, double* %tmp, align 8
-; CHECK: %tmp14 = load double, double* %tmp1, align 8
+  %max.0 = phi ptr [ %tmp, %bb6 ], [ %tmp2, %bb7 ], [ %tmp1, %bb10 ], [ %tmp2, %bb11 ]
+; CHECK: %tmp13 = load double, ptr %tmp, align 8
+; CHECK: %tmp14 = load double, ptr %tmp1, align 8
 ; CHECK: %tmp15 = fcmp olt double %tmp13, %tmp14
-  %tmp13 = load double, double* %tmp, align 8
-  %tmp14 = load double, double* %tmp1, align 8
+  %tmp13 = load double, ptr %tmp, align 8
+  %tmp14 = load double, ptr %tmp1, align 8
   %tmp15 = fcmp olt double %tmp13, %tmp14
   br i1 %tmp15, label %bb16, label %bb21
 
 bb16:                                             ; preds = %bb12
-  %tmp17 = load double, double* %tmp2, align 8
+  %tmp17 = load double, ptr %tmp2, align 8
   %tmp18 = fcmp olt double %tmp13, %tmp17
   br i1 %tmp18, label %bb19, label %bb20
 
@@ -54,7 +54,7 @@ bb20:                                             ; preds = %bb16
   br label %bb26
 
 bb21:                                             ; preds = %bb12
-  %tmp22 = load double, double* %tmp2, align 8
+  %tmp22 = load double, ptr %tmp2, align 8
   %tmp23 = fcmp olt double %tmp14, %tmp22
   br i1 %tmp23, label %bb24, label %bb25
 
@@ -65,23 +65,23 @@ bb25:                                             ; preds = %bb21
   br label %bb26
 
 bb26:                                             ; preds = %bb25, %bb24, %bb20, %bb19
-  %min.0 = phi double* [ %tmp, %bb19 ], [ %tmp2, %bb20 ], [ %tmp1, %bb24 ], [ %tmp2, %bb25 ]
-; CHECK: %tmp27 = load double, double* %min.0, align 8
-; CHECK: %tmp28 = load double, double* %max.0
+  %min.0 = phi ptr [ %tmp, %bb19 ], [ %tmp2, %bb20 ], [ %tmp1, %bb24 ], [ %tmp2, %bb25 ]
+; CHECK: %tmp27 = load double, ptr %min.0, align 8
+; CHECK: %tmp28 = load double, ptr %max.0
 ; CHECK: %tmp29 = fadd double %tmp27, %tmp28
-  %tmp27 = load double, double* %min.0, align 8
-  %tmp28 = load double, double* %max.0
+  %tmp27 = load double, ptr %min.0, align 8
+  %tmp28 = load double, ptr %max.0
   %tmp29 = fadd double %tmp27, %tmp28
   %tmp30 = fdiv double %tmp29, 2.000000e+00
-  store double %tmp30, double* %outL
-  %tmp31 = load double, double* %min.0
-  %tmp32 = load double, double* %max.0
+  store double %tmp30, ptr %outL
+  %tmp31 = load double, ptr %min.0
+  %tmp32 = load double, ptr %max.0
   %tmp33 = fcmp oeq double %tmp31, %tmp32
   br i1 %tmp33, label %bb34, label %bb35
 
 bb34:                                             ; preds = %bb26
-  store double 0.000000e+00, double* %outS
-  store double 0.000000e+00, double* %outH
+  store double 0.000000e+00, ptr %outS
+  store double 0.000000e+00, ptr %outH
   br label %bb81
 
 bb35:                                             ; preds = %bb26
@@ -92,69 +92,69 @@ bb35:                                             ; preds = %bb26
 bb38:                                             ; preds = %bb35
   %tmp39 = fadd double %tmp32, %tmp31
   %tmp40 = fdiv double %tmp37, %tmp39
-  store double %tmp40, double* %outS
+  store double %tmp40, ptr %outS
   br label %bb45
 
 bb41:                                             ; preds = %bb35
   %tmp42 = fsub double 2.000000e+00, %tmp32
   %tmp43 = fsub double %tmp42, %tmp31
   %tmp44 = fdiv double %tmp37, %tmp43
-  store double %tmp44, double* %outS
+  store double %tmp44, ptr %outS
   br label %bb45
 
 bb45:                                             ; preds = %bb41, %bb38
-  %tmp46 = icmp eq double* %max.0, %tmp
+  %tmp46 = icmp eq ptr %max.0, %tmp
   br i1 %tmp46, label %bb47, label %bb55
 
 bb47:                                             ; preds = %bb45
-  %tmp48 = load double, double* %tmp1, align 8
-  %tmp49 = load double, double* %tmp2, align 8
+  %tmp48 = load double, ptr %tmp1, align 8
+  %tmp49 = load double, ptr %tmp2, align 8
   %tmp50 = fsub double %tmp48, %tmp49
-  %tmp51 = load double, double* %max.0
-  %tmp52 = load double, double* %min.0
+  %tmp51 = load double, ptr %max.0
+  %tmp52 = load double, ptr %min.0
   %tmp53 = fsub double %tmp51, %tmp52
   %tmp54 = fdiv double %tmp50, %tmp53
-  store double %tmp54, double* %outH
+  store double %tmp54, ptr %outH
   br label %bb75
 
 bb55:                                             ; preds = %bb45
-  %tmp56 = icmp eq double* %max.0, %tmp1
+  %tmp56 = icmp eq ptr %max.0, %tmp1
   br i1 %tmp56, label %bb57, label %bb66
 
 bb57:                                             ; preds = %bb55
-  %tmp58 = load double, double* %tmp2, align 8
-  %tmp59 = load double, double* %tmp, align 8
+  %tmp58 = load double, ptr %tmp2, align 8
+  %tmp59 = load double, ptr %tmp, align 8
   %tmp60 = fsub double %tmp58, %tmp59
-  %tmp61 = load double, double* %max.0
-  %tmp62 = load double, double* %min.0
+  %tmp61 = load double, ptr %max.0
+  %tmp62 = load double, ptr %min.0
   %tmp63 = fsub double %tmp61, %tmp62
   %tmp64 = fdiv double %tmp60, %tmp63
   %tmp65 = fadd double 2.000000e+00, %tmp64
-  store double %tmp65, double* %outH
+  store double %tmp65, ptr %outH
   br label %bb75
 
 bb66:                                             ; preds = %bb55
-  %tmp67 = load double, double* %tmp, align 8
-  %tmp68 = load double, double* %tmp1, align 8
+  %tmp67 = load double, ptr %tmp, align 8
+  %tmp68 = load double, ptr %tmp1, align 8
   %tmp69 = fsub double %tmp67, %tmp68
-  %tmp70 = load double, double* %max.0
-  %tmp71 = load double, double* %min.0
+  %tmp70 = load double, ptr %max.0
+  %tmp71 = load double, ptr %min.0
   %tmp72 = fsub double %tmp70, %tmp71
   %tmp73 = fdiv double %tmp69, %tmp72
   %tmp74 = fadd double 4.000000e+00, %tmp73
-  store double %tmp74, double* %outH
+  store double %tmp74, ptr %outH
   br label %bb75
 
 bb75:                                             ; preds = %bb66, %bb57, %bb47
-  %tmp76 = load double, double* %outH
+  %tmp76 = load double, ptr %outH
   %tmp77 = fdiv double %tmp76, 6.000000e+00
-  store double %tmp77, double* %outH
+  store double %tmp77, ptr %outH
   %tmp78 = fcmp olt double %tmp77, 0.000000e+00
   br i1 %tmp78, label %bb79, label %bb81
 
 bb79:                                             ; preds = %bb75
   %tmp80 = fadd double %tmp77, 1.000000e+00
-  store double %tmp80, double* %outH
+  store double %tmp80, ptr %outH
   br label %bb81
 
 bb81:                                             ; preds = %bb79, %bb75, %bb34
index 338bed0438dbd8f7dc53ab9ce5ccab4431cf2a93..dfbe84423abc2316e8cf3c522bc31762e53df954 100644 (file)
@@ -5,7 +5,7 @@
 @test = constant [4 x i32] [i32 1, i32 2, i32 3, i32 4]
 
 define i64 @foo() {
-  %ret = load i64, i64* bitcast (i8* getelementptr (i8, i8* bitcast ([4 x i32]* @test to i8*), i64 2) to i64*), align 1
+  %ret = load i64, ptr getelementptr (i8, ptr @test, i64 2), align 1
   ret i64 %ret
   ; 0x00030000_00020000 in [01 00/00 00 02 00 00 00 03 00/00 00 04 00 00 00]
   ; LE: ret i64 844424930263040
index e911507a51649433d6248a0498599e0fcc066e10..6e6bd4634827026cb2c04d736cd4b22275406804 100644 (file)
@@ -2,9 +2,9 @@
 ; CHECK: addrspacecast
 
 @base = internal unnamed_addr addrspace(3) global [16 x i32] zeroinitializer, align 16
-declare void @foo(i32*)
+declare void @foo(ptr)
 
 define void @test() nounwind {
-  call void @foo(i32* getelementptr (i32, i32* addrspacecast ([16 x i32] addrspace(3)* @base to i32*), i64 2147483647)) nounwind
+  call void @foo(ptr getelementptr (i32, ptr addrspacecast (ptr addrspace(3) @base to ptr), i64 2147483647)) nounwind
   ret void
 }
index 08f79a2350c2d6b4f7f5ece8eb016c710474474e..783c177a8257d04d3465fe52cb8cb9ff5d8a8082 100644 (file)
@@ -6,8 +6,8 @@
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
 target triple = "x86_64-apple-macosx10.8.0"
 
-@x = global i8* null, align 8
-@y = global i8* null, align 8
+@x = global ptr null, align 8
+@y = global ptr null, align 8
 
 ; CHECK-LABEL: @f(
 ; CHECK-NEXT: alloca [0 x i8], align 1024
@@ -16,9 +16,7 @@ target triple = "x86_64-apple-macosx10.8.0"
 define void @f() {
   %1 = alloca [0 x i8], align 1
   %2 = alloca [0 x i8], align 1024
-  %3 = getelementptr inbounds [0 x i8], [0 x i8]* %1, i64 0, i64 0
-  %4 = getelementptr inbounds [0 x i8], [0 x i8]* %2, i64 0, i64 0
-  store i8* %3, i8** @x, align 8
-  store i8* %4, i8** @y, align 8
+  store ptr %1, ptr @x, align 8
+  store ptr %2, ptr @y, align 8
   ret void
 }
index 0c218c713fc23b881203fca3bcb57e55798f9b1f..40148c857f8254111713d17f077367f383ea3f5e 100644 (file)
@@ -5,11 +5,10 @@
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
 target triple = "x86_64-apple-macosx10.8.0"
 
-%struct.hoge = type { double*, double*, double*, double** }
+%struct.hoge = type { ptr, ptr, ptr, ptr }
 
-define void @widget(%struct.hoge* nocapture %arg, i1 %c1, i1 %c2, i1 %c3, i1 %c4, i1 %c5) {
+define void @widget(ptr nocapture %arg, i1 %c1, i1 %c2, i1 %c3, i1 %c4, i1 %c5) {
 bb:
-  %tmp = getelementptr inbounds %struct.hoge, %struct.hoge* %arg, i64 0, i32 0
   br i1 %c1, label %bb1, label %bb17
 
 bb1:                                              ; preds = %bb
@@ -19,9 +18,8 @@ bb2:                                              ; preds = %bb1
   br label %bb17
 
 bb3:                                              ; preds = %bb1
-  %tmp4 = bitcast double** %tmp to <2 x double*>*
-  %tmp5 = load <2 x double*>, <2 x double*>* %tmp4, align 8
-  %tmp6 = ptrtoint <2 x double*> %tmp5 to <2 x i64>
+  %tmp5 = load <2 x ptr>, ptr %arg, align 8
+  %tmp6 = ptrtoint <2 x ptr> %tmp5 to <2 x i64>
   %tmp7 = sub <2 x i64> zeroinitializer, %tmp6
   %tmp8 = ashr exact <2 x i64> %tmp7, <i64 3, i64 3>
   %tmp9 = extractelement <2 x i64> %tmp8, i32 0
index 12b000bab6ab26cd1d8be3c0ccb88438c02fc58d..d451701be8c1f09a876bf8abf1a52ceb568cebfb 100644 (file)
@@ -2,9 +2,9 @@
 
 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:128:128"
 
-define <4 x i32> @foo(<4 x i32*>* %in) {
-  %t17 = load <4 x i32*>, <4 x i32*>* %in, align 8
-  %t18 = icmp eq <4 x i32*> %t17, zeroinitializer
+define <4 x i32> @foo(ptr %in) {
+  %t17 = load <4 x ptr>, ptr %in, align 8
+  %t18 = icmp eq <4 x ptr> %t17, zeroinitializer
   %t19 = zext <4 x i1> %t18 to <4 x i32>
   ret <4 x i32> %t19
 }
index c9542aa9c76a493bccc8f2ed138dad8e4d21ba0b..3d3cccc20529165b2699652393bb0123d22e3cae 100644 (file)
@@ -5,8 +5,8 @@
 define i32 @function(i32 %x) nounwind {
 entry:
   %xor = xor i32 %x, 1
-  store volatile i32 %xor, i32* inttoptr (i64 1 to i32*), align 4
-  %or4 = or i32 or (i32 zext (i1 icmp eq (i32* @g, i32* null) to i32), i32 1), %xor
+  store volatile i32 %xor, ptr inttoptr (i64 1 to ptr), align 4
+  %or4 = or i32 or (i32 zext (i1 icmp eq (ptr @g, ptr null) to i32), i32 1), %xor
   ret i32 %or4
 }
 ; CHECK-LABEL: define i32 @function(
index 9c6d29d838b5461f5c22ad9bd3c544f2c5adbe35..39e1c09f330319e05f495e14104e91a819871a2b 100644 (file)
@@ -13,11 +13,11 @@ define { i64, i64 } @function(i32 %x, i32 %y, i32 %z) nounwind {
 ; CHECK-LABEL: @function(
 ; CHECK-NEXT: entry:
 ; CHECK-NEXT: %retval = alloca %struct._my_struct, align 8
-; CHECK-NOT: bitcast i96* %retval to %struct._my_struct*
+; CHECK-NOT: bitcast ptr %retval to ptr
 entry:
   %retval = alloca %struct._my_struct, align 8
-  %k.sroa.0.0.copyload = load i96, i96* bitcast (%struct._my_struct* @initval to i96*), align 1
-  %k.sroa.1.12.copyload = load i32, i32* bitcast ([4 x i8]* getelementptr inbounds (%struct._my_struct, %struct._my_struct* @initval, i64 0, i32 1) to i32*), align 1
+  %k.sroa.0.0.copyload = load i96, ptr @initval, align 1
+  %k.sroa.1.12.copyload = load i32, ptr getelementptr inbounds (%struct._my_struct, ptr @initval, i64 0, i32 1), align 1
   %0 = zext i32 %x to i96
   %bf.value = shl nuw nsw i96 %0, 6
   %bf.clear = and i96 %k.sroa.0.0.copyload, -288230376151711744
@@ -30,16 +30,13 @@ entry:
   %bf.clear4 = or i96 %bf.shl3, %bf.value.masked
   %bf.set5 = or i96 %bf.clear4, %bf.value8
   %bf.set10 = or i96 %bf.set5, %bf.clear
-  %retval.0.cast7 = bitcast %struct._my_struct* %retval to i96*
-  store i96 %bf.set10, i96* %retval.0.cast7, align 8
-  %retval.12.idx8 = getelementptr inbounds %struct._my_struct, %struct._my_struct* %retval, i64 0, i32 1
-  %retval.12.cast9 = bitcast [4 x i8]* %retval.12.idx8 to i32*
-  store i32 %k.sroa.1.12.copyload, i32* %retval.12.cast9, align 4
+  store i96 %bf.set10, ptr %retval, align 8
+  %retval.12.idx8 = getelementptr inbounds %struct._my_struct, ptr %retval, i64 0, i32 1
+  store i32 %k.sroa.1.12.copyload, ptr %retval.12.idx8, align 4
   %trunc = trunc i96 %bf.set10 to i64
   %.fca.0.insert = insertvalue { i64, i64 } undef, i64 %trunc, 0
-  %retval.8.idx12 = getelementptr inbounds %struct._my_struct, %struct._my_struct* %retval, i64 0, i32 0, i64 8
-  %retval.8.cast13 = bitcast i8* %retval.8.idx12 to i64*
-  %retval.8.load14 = load i64, i64* %retval.8.cast13, align 8
+  %retval.8.idx12 = getelementptr inbounds %struct._my_struct, ptr %retval, i64 0, i32 0, i64 8
+  %retval.8.load14 = load i64, ptr %retval.8.idx12, align 8
   %.fca.1.insert = insertvalue { i64, i64 } %.fca.0.insert, i64 %retval.8.load14, 1
   ret { i64, i64 } %.fca.1.insert
 }
index 37c3a21f324a1b75683db11c9ab5e34fbb3e4d12..19de1ad0a5803a679af9a4bd5db983525f352c47 100644 (file)
@@ -46,7 +46,7 @@ declare i32 @__gxx_personality_v0(...);
 !0 = !{i16 0, i16 32768} ; [0, 32767]
 !1 = !{i16 0, i16 32769} ; [0, 32768]
 
-define i16 @add_bounded_values(i16 %a, i16 %b) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define i16 @add_bounded_values(i16 %a, i16 %b) personality ptr @__gxx_personality_v0 {
 ; CHECK-LABEL: @add_bounded_values(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[C:%.*]] = call i16 @bounded(i16 [[A:%.*]]), !range [[RNG0:![0-9]+]]
@@ -56,8 +56,8 @@ define i16 @add_bounded_values(i16 %a, i16 %b) personality i8* bitcast (i32 (...
 ; CHECK-NEXT:    [[E:%.*]] = add nuw i16 [[C]], [[D]]
 ; CHECK-NEXT:    ret i16 [[E]]
 ; CHECK:       lpad:
-; CHECK-NEXT:    [[TMP0:%.*]] = landingpad { i8*, i32 }
-; CHECK-NEXT:    filter [0 x i8*] zeroinitializer
+; CHECK-NEXT:    [[TMP0:%.*]] = landingpad { ptr, i32 }
+; CHECK-NEXT:    filter [0 x ptr] zeroinitializer
 ; CHECK-NEXT:    ret i16 42
 ;
 entry:
@@ -68,12 +68,12 @@ cont:
   %e = add i16 %c, %d
   ret i16 %e
 lpad:
-  %0 = landingpad { i8*, i32 }
-  filter [0 x i8*] zeroinitializer
+  %0 = landingpad { ptr, i32 }
+  filter [0 x ptr] zeroinitializer
   ret i16 42
 }
 
-define i16 @add_bounded_values_2(i16 %a, i16 %b) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define i16 @add_bounded_values_2(i16 %a, i16 %b) personality ptr @__gxx_personality_v0 {
 ; CHECK-LABEL: @add_bounded_values_2(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[C:%.*]] = call i16 @bounded(i16 [[A:%.*]]), !range [[RNG1:![0-9]+]]
@@ -83,8 +83,8 @@ define i16 @add_bounded_values_2(i16 %a, i16 %b) personality i8* bitcast (i32 (.
 ; CHECK-NEXT:    [[E:%.*]] = add i16 [[C]], [[D]]
 ; CHECK-NEXT:    ret i16 [[E]]
 ; CHECK:       lpad:
-; CHECK-NEXT:    [[TMP0:%.*]] = landingpad { i8*, i32 }
-; CHECK-NEXT:    filter [0 x i8*] zeroinitializer
+; CHECK-NEXT:    [[TMP0:%.*]] = landingpad { ptr, i32 }
+; CHECK-NEXT:    filter [0 x ptr] zeroinitializer
 ; CHECK-NEXT:    ret i16 42
 ;
 entry:
@@ -96,8 +96,8 @@ cont:
   %e = add i16 %c, %d
   ret i16 %e
 lpad:
-  %0 = landingpad { i8*, i32 }
-  filter [0 x i8*] zeroinitializer
+  %0 = landingpad { ptr, i32 }
+  filter [0 x ptr] zeroinitializer
   ret i16 42
 }
 
index 28b7b2b470221e27ade03c635752dcdee7551254..61290875803086038fc9dd1d2647007c004a4e1f 100644 (file)
@@ -8,43 +8,43 @@
 ; Instcombine should propagate the load through the select instructions to
 ; allow elimination of the extra stuff by the mem2reg pass.
 
-define void @_Z5test1RiS_(i32* %x, i32* %y) {
+define void @_Z5test1RiS_(ptr %x, ptr %y) {
 ; CHECK-LABEL: @_Z5test1RiS_(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP_1_I:%.*]] = load i32, i32* [[Y:%.*]], align 4
-; CHECK-NEXT:    [[TMP_3_I:%.*]] = load i32, i32* [[X:%.*]], align 4
+; CHECK-NEXT:    [[TMP_1_I:%.*]] = load i32, ptr [[Y:%.*]], align 4
+; CHECK-NEXT:    [[TMP_3_I:%.*]] = load i32, ptr [[X:%.*]], align 4
 ; CHECK-NEXT:    [[TMP0:%.*]] = call i32 @llvm.smin.i32(i32 [[TMP_1_I]], i32 [[TMP_3_I]])
-; CHECK-NEXT:    store i32 [[TMP0]], i32* [[X]], align 4
+; CHECK-NEXT:    store i32 [[TMP0]], ptr [[X]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %tmp.1.i = load i32, i32* %y         ; <i32> [#uses=1]
-  %tmp.3.i = load i32, i32* %x         ; <i32> [#uses=1]
+  %tmp.1.i = load i32, ptr %y         ; <i32> [#uses=1]
+  %tmp.3.i = load i32, ptr %x         ; <i32> [#uses=1]
   %tmp.4.i = icmp slt i32 %tmp.1.i, %tmp.3.i              ; <i1> [#uses=1]
-  %retval.i = select i1 %tmp.4.i, i32* %y, i32* %x                ; <i32*> [#uses=1]
-  %tmp.4 = load i32, i32* %retval.i            ; <i32> [#uses=1]
-  store i32 %tmp.4, i32* %x
+  %retval.i = select i1 %tmp.4.i, ptr %y, ptr %x                ; <ptr> [#uses=1]
+  %tmp.4 = load i32, ptr %retval.i            ; <i32> [#uses=1]
+  store i32 %tmp.4, ptr %x
   ret void
 }
 
-define void @_Z5test2RiS_(i32* %x, i32* %y) {
+define void @_Z5test2RiS_(ptr %x, ptr %y) {
 ; CHECK-LABEL: @_Z5test2RiS_(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP_2:%.*]] = load i32, i32* [[X:%.*]], align 4
-; CHECK-NEXT:    [[TMP_3_I:%.*]] = load i32, i32* [[Y:%.*]], align 4
+; CHECK-NEXT:    [[TMP_2:%.*]] = load i32, ptr [[X:%.*]], align 4
+; CHECK-NEXT:    [[TMP_3_I:%.*]] = load i32, ptr [[Y:%.*]], align 4
 ; CHECK-NEXT:    [[TMP0:%.*]] = call i32 @llvm.smax.i32(i32 [[TMP_2]], i32 [[TMP_3_I]])
-; CHECK-NEXT:    store i32 [[TMP0]], i32* [[Y]], align 4
+; CHECK-NEXT:    store i32 [[TMP0]], ptr [[Y]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %tmp.0 = alloca i32             ; <i32*> [#uses=2]
-  %tmp.2 = load i32, i32* %x           ; <i32> [#uses=2]
-  store i32 %tmp.2, i32* %tmp.0
-  %tmp.3.i = load i32, i32* %y         ; <i32> [#uses=1]
+  %tmp.0 = alloca i32             ; <ptr> [#uses=2]
+  %tmp.2 = load i32, ptr %x           ; <i32> [#uses=2]
+  store i32 %tmp.2, ptr %tmp.0
+  %tmp.3.i = load i32, ptr %y         ; <i32> [#uses=1]
   %tmp.4.i = icmp slt i32 %tmp.2, %tmp.3.i                ; <i1> [#uses=1]
-  %retval.i = select i1 %tmp.4.i, i32* %y, i32* %tmp.0            ; <i32*> [#uses=1]
-  %tmp.6 = load i32, i32* %retval.i            ; <i32> [#uses=1]
-  store i32 %tmp.6, i32* %y
+  %retval.i = select i1 %tmp.4.i, ptr %y, ptr %tmp.0            ; <ptr> [#uses=1]
+  %tmp.6 = load i32, ptr %retval.i            ; <i32> [#uses=1]
+  store i32 %tmp.6, ptr %y
   ret void
 }
 
index fc0c1e02c86b6bed839a755535472292c9f3b3c6..d8e83b1b4af24d615ea5453981020378612e0cbd 100644 (file)
@@ -2,48 +2,48 @@
 ; RUN: opt -S -inline -instcombine %s | FileCheck %s --check-prefixes=CHECK,CHECK-INLINE
 ; RUN: opt -S -instcombine %s | FileCheck %s --check-prefixes=CHECK,CHECK-NOINLINE
 
-define i8* @widen_align_from_allocalign_callsite() {
+define ptr @widen_align_from_allocalign_callsite() {
 ; CHECK-LABEL: @widen_align_from_allocalign_callsite(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CALL:%.*]] = tail call align 64 i8* @my_aligned_alloc_2(i32 noundef 320, i32 allocalign noundef 64)
-; CHECK-NEXT:    ret i8* [[CALL]]
+; CHECK-NEXT:    [[CALL:%.*]] = tail call align 64 ptr @my_aligned_alloc_2(i32 noundef 320, i32 allocalign noundef 64)
+; CHECK-NEXT:    ret ptr [[CALL]]
 ;
 entry:
 
-  %call = tail call align 16 i8* @my_aligned_alloc_2(i32 noundef 320, i32 allocalign noundef 64)
-  ret i8* %call
+  %call = tail call align 16 ptr @my_aligned_alloc_2(i32 noundef 320, i32 allocalign noundef 64)
+  ret ptr %call
 }
 
-define i8* @widen_align_from_allocalign() {
+define ptr @widen_align_from_allocalign() {
 ; CHECK-LABEL: @widen_align_from_allocalign(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CALL:%.*]] = tail call align 64 i8* @my_aligned_alloc(i32 noundef 320, i32 noundef 64)
-; CHECK-NEXT:    ret i8* [[CALL]]
+; CHECK-NEXT:    [[CALL:%.*]] = tail call align 64 ptr @my_aligned_alloc(i32 noundef 320, i32 noundef 64)
+; CHECK-NEXT:    ret ptr [[CALL]]
 ;
 entry:
 
-  %call = tail call align 16 i8* @my_aligned_alloc(i32 noundef 320, i32 noundef 64)
-  ret i8* %call
+  %call = tail call align 16 ptr @my_aligned_alloc(i32 noundef 320, i32 noundef 64)
+  ret ptr %call
 }
 
-define i8* @dont_narrow_align_from_allocalign() {
+define ptr @dont_narrow_align_from_allocalign() {
 ; CHECK-LABEL: @dont_narrow_align_from_allocalign(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CALL:%.*]] = tail call align 16 i8* @my_aligned_alloc(i32 noundef 320, i32 noundef 8)
-; CHECK-NEXT:    ret i8* [[CALL]]
+; CHECK-NEXT:    [[CALL:%.*]] = tail call align 16 ptr @my_aligned_alloc(i32 noundef 320, i32 noundef 8)
+; CHECK-NEXT:    ret ptr [[CALL]]
 ;
 entry:
-  %call = tail call align 16 i8* @my_aligned_alloc(i32 noundef 320, i32 noundef 8)
-  ret i8* %call
+  %call = tail call align 16 ptr @my_aligned_alloc(i32 noundef 320, i32 noundef 8)
+  ret ptr %call
 }
 
-define i8* @my_aligned_alloc_3(i32 noundef %foo, i32 allocalign %alignment) {
+define ptr @my_aligned_alloc_3(i32 noundef %foo, i32 allocalign %alignment) {
 ; CHECK-LABEL: @my_aligned_alloc_3(
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i8* @my_aligned_alloc_2(i32 noundef [[FOO:%.*]], i32 noundef [[ALIGNMENT:%.*]])
-; CHECK-NEXT:    ret i8* [[CALL]]
+; CHECK-NEXT:    [[CALL:%.*]] = tail call ptr @my_aligned_alloc_2(i32 noundef [[FOO:%.*]], i32 noundef [[ALIGNMENT:%.*]])
+; CHECK-NEXT:    ret ptr [[CALL]]
 ;
-  %call = tail call i8* @my_aligned_alloc_2(i32 noundef %foo, i32 noundef %alignment)
-  ret i8* %call
+  %call = tail call ptr @my_aligned_alloc_2(i32 noundef %foo, i32 noundef %alignment)
+  ret ptr %call
 }
 
 ; -inline is able to make my_aligned_alloc_3's arguments disappear and directly
@@ -52,18 +52,18 @@ define i8* @my_aligned_alloc_3(i32 noundef %foo, i32 allocalign %alignment) {
 ; figure out the `align 128` on the return value once the call is directly on
 ; my_aligned_alloc_2. Note that this is a simplified version of what happens
 ; with _mm_malloc which calls posix_memalign.
-define i8* @allocalign_disappears() {
+define ptr @allocalign_disappears() {
 ; CHECK-INLINE-LABEL: @allocalign_disappears(
-; CHECK-INLINE-NEXT:    [[CALL_I:%.*]] = tail call i8* @my_aligned_alloc_2(i32 noundef 42, i32 noundef 128)
-; CHECK-INLINE-NEXT:    ret i8* [[CALL_I]]
+; CHECK-INLINE-NEXT:    [[CALL_I:%.*]] = tail call ptr @my_aligned_alloc_2(i32 noundef 42, i32 noundef 128)
+; CHECK-INLINE-NEXT:    ret ptr [[CALL_I]]
 ;
 ; CHECK-NOINLINE-LABEL: @allocalign_disappears(
-; CHECK-NOINLINE-NEXT:    [[CALL:%.*]] = tail call align 128 i8* @my_aligned_alloc_3(i32 42, i32 128)
-; CHECK-NOINLINE-NEXT:    ret i8* [[CALL]]
+; CHECK-NOINLINE-NEXT:    [[CALL:%.*]] = tail call align 128 ptr @my_aligned_alloc_3(i32 42, i32 128)
+; CHECK-NOINLINE-NEXT:    ret ptr [[CALL]]
 ;
-  %call = tail call i8* @my_aligned_alloc_3(i32 42, i32 128)
-  ret i8* %call
+  %call = tail call ptr @my_aligned_alloc_3(i32 42, i32 128)
+  ret ptr %call
 }
 
-declare i8* @my_aligned_alloc(i32 noundef, i32 allocalign noundef)
-declare i8* @my_aligned_alloc_2(i32 noundef, i32 noundef)
+declare ptr @my_aligned_alloc(i32 noundef, i32 allocalign noundef)
+declare ptr @my_aligned_alloc_2(i32 noundef, i32 noundef)
index c3d0982c245aecfec5d254cb5a85cca996882722..a86d7ccde8b605ea1bbfd215a9c4b6e9361d767d 100644 (file)
@@ -1,10 +1,10 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 target datalayout = "e-p:32:32"
 
-define i32* @test(i32* %P) {
-        %V = ptrtoint i32* %P to i32            ; <i32> [#uses=1]
-        %P2 = inttoptr i32 %V to i32*           ; <i32*> [#uses=1]
-        ret i32* %P2
-; CHECK: ret i32* %P
+define ptr @test(ptr %P) {
+        %V = ptrtoint ptr %P to i32            ; <i32> [#uses=1]
+        %P2 = inttoptr i32 %V to ptr           ; <ptr> [#uses=1]
+        ret ptr %P2
+; CHECK: ret ptr %P
 }
 
index fe437eebdeeb852d2ad4c8ec38a963846758c4b5..c59bd9387bb20c3268440cace6a3cf73f331211e 100644 (file)
@@ -4,14 +4,14 @@
 @T2 = external constant i32
 @T3 = external constant i32
 
-declare i32 @generic_personality(i32, i64, i8*, i8*)
-declare i32 @__gxx_personality_v0(i32, i64, i8*, i8*)
-declare i32 @__objc_personality_v0(i32, i64, i8*, i8*)
+declare i32 @generic_personality(i32, i64, ptr, ptr)
+declare i32 @__gxx_personality_v0(i32, i64, ptr, ptr)
+declare i32 @__objc_personality_v0(i32, i64, ptr, ptr)
 declare i32 @__C_specific_handler(...)
 
 declare void @bar()
 
-define void @foo_generic() personality i32 (i32, i64, i8*, i8*)* @generic_personality {
+define void @foo_generic() personality ptr @generic_personality {
 ; CHECK-LABEL: @foo_generic(
   invoke void @bar()
     to label %cont.a unwind label %lpad.a
@@ -43,11 +43,11 @@ cont.i:
   ret void
 
 lpad.a:
-  %a = landingpad { i8*, i32 }
-          catch i32* @T1
-          catch i32* @T2
-          catch i32* @T1
-          catch i32* @T2
+  %a = landingpad { ptr, i32 }
+          catch ptr @T1
+          catch ptr @T2
+          catch ptr @T1
+          catch ptr @T2
   unreachable
 ; CHECK: %a = landingpad
 ; CHECK-NEXT: @T1
@@ -55,86 +55,86 @@ lpad.a:
 ; CHECK-NEXT: unreachable
 
 lpad.b:
-  %b = landingpad { i8*, i32 }
-          filter [0 x i32*] zeroinitializer
-          catch i32* @T1
+  %b = landingpad { ptr, i32 }
+          filter [0 x ptr] zeroinitializer
+          catch ptr @T1
   unreachable
 ; CHECK: %b = landingpad
 ; CHECK-NEXT: filter
 ; CHECK-NEXT: unreachable
 
 lpad.c:
-  %c = landingpad { i8*, i32 }
-          catch i32* @T1
-          filter [1 x i32*] [i32* @T1]
-          catch i32* @T2
+  %c = landingpad { ptr, i32 }
+          catch ptr @T1
+          filter [1 x ptr] [ptr @T1]
+          catch ptr @T2
   unreachable
 ; Caught types should not be removed from filters
 ; CHECK: %c = landingpad
-; CHECK-NEXT: catch i32* @T1
-; CHECK-NEXT: filter [1 x i32*] [i32* @T1]
-; CHECK-NEXT: catch i32* @T2 
+; CHECK-NEXT: catch ptr @T1
+; CHECK-NEXT: filter [1 x ptr] [ptr @T1]
+; CHECK-NEXT: catch ptr @T2 
 ; CHECK-NEXT: unreachable
 
 lpad.d:
-  %d = landingpad { i8*, i32 }
-          filter [3 x i32*] zeroinitializer
+  %d = landingpad { ptr, i32 }
+          filter [3 x ptr] zeroinitializer
   unreachable
 ; CHECK: %d = landingpad
-; CHECK-NEXT: filter [1 x i32*] zeroinitializer
+; CHECK-NEXT: filter [1 x ptr] zeroinitializer
 ; CHECK-NEXT: unreachable
 
 lpad.e:
-  %e = landingpad { i8*, i32 }
-          catch i32* @T1
-          filter [3 x i32*] [i32* @T1, i32* @T2, i32* @T2]
+  %e = landingpad { ptr, i32 }
+          catch ptr @T1
+          filter [3 x ptr] [ptr @T1, ptr @T2, ptr @T2]
   unreachable
 ; Caught types should not be removed from filters
 ; CHECK: %e = landingpad
-; CHECK-NEXT: catch i32* @T1
-; CHECK-NEXT: filter [2 x i32*] [i32* @T1, i32* @T2]
+; CHECK-NEXT: catch ptr @T1
+; CHECK-NEXT: filter [2 x ptr] [ptr @T1, ptr @T2]
 ; CHECK-NEXT: unreachable
 
 lpad.f:
-  %f = landingpad { i8*, i32 }
-          filter [2 x i32*] [i32* @T2, i32* @T1]
-          filter [1 x i32*] [i32* @T1]
+  %f = landingpad { ptr, i32 }
+          filter [2 x ptr] [ptr @T2, ptr @T1]
+          filter [1 x ptr] [ptr @T1]
   unreachable
 ; CHECK: %f = landingpad
-; CHECK-NEXT: filter [1 x i32*] [i32* @T1]
+; CHECK-NEXT: filter [1 x ptr] [ptr @T1]
 ; CHECK-NEXT: unreachable
 
 lpad.g:
-  %g = landingpad { i8*, i32 }
-          filter [1 x i32*] [i32* @T1]
-          catch i32* @T3
-          filter [2 x i32*] [i32* @T2, i32* @T1]
+  %g = landingpad { ptr, i32 }
+          filter [1 x ptr] [ptr @T1]
+          catch ptr @T3
+          filter [2 x ptr] [ptr @T2, ptr @T1]
   unreachable
 ; CHECK: %g = landingpad
-; CHECK-NEXT: filter [1 x i32*] [i32* @T1]
-; CHECK-NEXT: catch i32* @T3
+; CHECK-NEXT: filter [1 x ptr] [ptr @T1]
+; CHECK-NEXT: catch ptr @T3
 ; CHECK-NEXT: unreachable
 
 lpad.h:
-  %h = landingpad { i8*, i32 }
-          filter [2 x i32*] [i32* @T1, i32* null]
-          filter [1 x i32*] zeroinitializer
+  %h = landingpad { ptr, i32 }
+          filter [2 x ptr] [ptr @T1, ptr null]
+          filter [1 x ptr] zeroinitializer
   unreachable
 ; CHECK: %h = landingpad
-; CHECK-NEXT: filter [1 x i32*] zeroinitializer
+; CHECK-NEXT: filter [1 x ptr] zeroinitializer
 ; CHECK-NEXT: unreachable
 
 lpad.i:
-  %i = landingpad { i8*, i32 }
+  %i = landingpad { ptr, i32 }
           cleanup
-          filter [0 x i32*] zeroinitializer
+          filter [0 x ptr] zeroinitializer
   unreachable
 ; CHECK: %i = landingpad
 ; CHECK-NEXT: filter
 ; CHECK-NEXT: unreachable
 }
 
-define void @foo_cxx() personality i32 (i32, i64, i8*, i8*)* @__gxx_personality_v0 {
+define void @foo_cxx() personality ptr @__gxx_personality_v0 {
 ; CHECK-LABEL: @foo_cxx(
   invoke void @bar()
     to label %cont.a unwind label %lpad.a
@@ -151,41 +151,41 @@ cont.d:
   ret void
 
 lpad.a:
-  %a = landingpad { i8*, i32 }
-          catch i32* null
-          catch i32* @T1
+  %a = landingpad { ptr, i32 }
+          catch ptr null
+          catch ptr @T1
   unreachable
 ; CHECK: %a = landingpad
 ; CHECK-NEXT: null
 ; CHECK-NEXT: unreachable
 
 lpad.b:
-  %b = landingpad { i8*, i32 }
-          filter [1 x i32*] zeroinitializer
+  %b = landingpad { ptr, i32 }
+          filter [1 x ptr] zeroinitializer
   unreachable
 ; CHECK: %b = landingpad
 ; CHECK-NEXT: cleanup
 ; CHECK-NEXT: unreachable
 
 lpad.c:
-  %c = landingpad { i8*, i32 }
-          filter [2 x i32*] [i32* @T1, i32* null]
+  %c = landingpad { ptr, i32 }
+          filter [2 x ptr] [ptr @T1, ptr null]
   unreachable
 ; CHECK: %c = landingpad
 ; CHECK-NEXT: cleanup
 ; CHECK-NEXT: unreachable
 
 lpad.d:
-  %d = landingpad { i8*, i32 }
+  %d = landingpad { ptr, i32 }
           cleanup
-          catch i32* null
+          catch ptr null
   unreachable
 ; CHECK: %d = landingpad
 ; CHECK-NEXT: null
 ; CHECK-NEXT: unreachable
 }
 
-define void @foo_objc() personality i32 (i32, i64, i8*, i8*)* @__objc_personality_v0 {
+define void @foo_objc() personality ptr @__objc_personality_v0 {
 ; CHECK-LABEL: @foo_objc(
   invoke void @bar()
     to label %cont.a unwind label %lpad.a
@@ -202,41 +202,41 @@ cont.d:
   ret void
 
 lpad.a:
-  %a = landingpad { i8*, i32 }
-          catch i32* null
-          catch i32* @T1
+  %a = landingpad { ptr, i32 }
+          catch ptr null
+          catch ptr @T1
   unreachable
 ; CHECK: %a = landingpad
 ; CHECK-NEXT: null
 ; CHECK-NEXT: unreachable
 
 lpad.b:
-  %b = landingpad { i8*, i32 }
-          filter [1 x i32*] zeroinitializer
+  %b = landingpad { ptr, i32 }
+          filter [1 x ptr] zeroinitializer
   unreachable
 ; CHECK: %b = landingpad
 ; CHECK-NEXT: cleanup
 ; CHECK-NEXT: unreachable
 
 lpad.c:
-  %c = landingpad { i8*, i32 }
-          filter [2 x i32*] [i32* @T1, i32* null]
+  %c = landingpad { ptr, i32 }
+          filter [2 x ptr] [ptr @T1, ptr null]
   unreachable
 ; CHECK: %c = landingpad
 ; CHECK-NEXT: cleanup
 ; CHECK-NEXT: unreachable
 
 lpad.d:
-  %d = landingpad { i8*, i32 }
+  %d = landingpad { ptr, i32 }
           cleanup
-          catch i32* null
+          catch ptr null
   unreachable
 ; CHECK: %d = landingpad
 ; CHECK-NEXT: null
 ; CHECK-NEXT: unreachable
 }
 
-define void @foo_seh() personality i32 (...)* @__C_specific_handler {
+define void @foo_seh() personality ptr @__C_specific_handler {
 ; CHECK-LABEL: @foo_seh(
   invoke void @bar()
     to label %cont.a unwind label %lpad.a
@@ -253,34 +253,34 @@ cont.d:
   ret void
 
 lpad.a:
-  %a = landingpad { i8*, i32 }
-          catch i32* null
-          catch i32* @T1
+  %a = landingpad { ptr, i32 }
+          catch ptr null
+          catch ptr @T1
   unreachable
 ; CHECK: %a = landingpad
 ; CHECK-NEXT: null
 ; CHECK-NEXT: unreachable
 
 lpad.b:
-  %b = landingpad { i8*, i32 }
-          filter [1 x i32*] zeroinitializer
+  %b = landingpad { ptr, i32 }
+          filter [1 x ptr] zeroinitializer
   unreachable
 ; CHECK: %b = landingpad
 ; CHECK-NEXT: cleanup
 ; CHECK-NEXT: unreachable
 
 lpad.c:
-  %c = landingpad { i8*, i32 }
-          filter [2 x i32*] [i32* @T1, i32* null]
+  %c = landingpad { ptr, i32 }
+          filter [2 x ptr] [ptr @T1, ptr null]
   unreachable
 ; CHECK: %c = landingpad
 ; CHECK-NEXT: cleanup
 ; CHECK-NEXT: unreachable
 
 lpad.d:
-  %d = landingpad { i8*, i32 }
+  %d = landingpad { ptr, i32 }
           cleanup
-          catch i32* null
+          catch ptr null
   unreachable
 ; CHECK: %d = landingpad
 ; CHECK-NEXT: null
index 950cc7314f1b5e198d3e3f8ddc00cc5acd556c4d..37df37171705954865e946a3d7d53728a41528ae 100644 (file)
@@ -3,25 +3,25 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 
 ; Check that we can find and remove redundant insertvalues
 ; CHECK-LABEL: foo_simple
-; CHECK-NOT: i8* %x, 0
-define { i8*, i64, i32 } @foo_simple(i8* %x, i8* %y) nounwind {
+; CHECK-NOT: ptr %x, 0
+define { ptr, i64, i32 } @foo_simple(ptr %x, ptr %y) nounwind {
 entry:
-  %0 = insertvalue { i8*, i64, i32 } undef, i8* %x, 0
-  %1 = insertvalue { i8*, i64, i32 } %0, i8* %y, 0
-  ret { i8*, i64, i32 } %1
+  %0 = insertvalue { ptr, i64, i32 } undef, ptr %x, 0
+  %1 = insertvalue { ptr, i64, i32 } %0, ptr %y, 0
+  ret { ptr, i64, i32 } %1
 }
 ; Check that we can find and remove redundant nodes in insertvalues chain
 ; CHECK-LABEL: foo_ovwrt_chain
 ; CHECK-NOT: i64 %y, 1
 ; CHECK-NOT: i32 555, 2
-define { i8*, i64, i32 } @foo_ovwrt_chain(i8* %x, i64 %y, i64 %z) nounwind {
+define { ptr, i64, i32 } @foo_ovwrt_chain(ptr %x, i64 %y, i64 %z) nounwind {
 entry:
-  %0 = insertvalue { i8*, i64, i32 } undef, i8* %x, 0
-  %1 = insertvalue { i8*, i64, i32 } %0, i64 %y, 1
-  %2 = insertvalue { i8*, i64, i32 } %1, i32 555, 2
-  %3 = insertvalue { i8*, i64, i32 } %2, i64 %z, 1
-  %4 = insertvalue { i8*, i64, i32 } %3, i32 777, 2
-  ret { i8*, i64, i32 } %4
+  %0 = insertvalue { ptr, i64, i32 } undef, ptr %x, 0
+  %1 = insertvalue { ptr, i64, i32 } %0, i64 %y, 1
+  %2 = insertvalue { ptr, i64, i32 } %1, i32 555, 2
+  %3 = insertvalue { ptr, i64, i32 } %2, i64 %z, 1
+  %4 = insertvalue { ptr, i64, i32 } %3, i32 777, 2
+  ret { ptr, i64, i32 } %4
 }
 ; Check that we propagate insertvalues only if they are use as the first
 ; operand (as initial value of aggregate)
index 33b3695697de78190db9b8e3a1afa33a403fe314..1e463e396551b9c7cac8a27a0395e9dc91078947 100644 (file)
@@ -5,32 +5,32 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
 ; Function Attrs: readonly uwtable
-define i1 @dot_ref_s(i32** noalias nocapture readonly dereferenceable(8)) {
+define i1 @dot_ref_s(ptr noalias nocapture readonly dereferenceable(8)) {
 ; CHECK-LABEL: @dot_ref_s(
 ; CHECK-NEXT:  entry-block:
 ; CHECK-NEXT:    ret i1 false
 ;
 entry-block:
-  %loadedptr = load i32*, i32** %0, align 8, !nonnull !0
-  %ptrtoint = ptrtoint i32* %loadedptr to i64
-  %inttoptr = inttoptr i64 %ptrtoint to i32*
-  %switchtmp = icmp eq i32* %inttoptr, null
+  %loadedptr = load ptr, ptr %0, align 8, !nonnull !0
+  %ptrtoint = ptrtoint ptr %loadedptr to i64
+  %inttoptr = inttoptr i64 %ptrtoint to ptr
+  %switchtmp = icmp eq ptr %inttoptr, null
   ret i1 %switchtmp
 
 }
 
 ; Function Attrs: readonly uwtable
-define i64* @function(i64* noalias nocapture readonly dereferenceable(8)) {
+define ptr @function(ptr noalias nocapture readonly dereferenceable(8)) {
 ; CHECK-LABEL: @function(
 ; CHECK-NEXT:  entry-block:
-; CHECK-NEXT:    [[LOADED:%.*]] = load i64, i64* [[TMP0:%.*]], align 8, !range [[RNG0:![0-9]+]]
-; CHECK-NEXT:    [[INTTOPTR:%.*]] = inttoptr i64 [[LOADED]] to i64*
-; CHECK-NEXT:    ret i64* [[INTTOPTR]]
+; CHECK-NEXT:    [[LOADED:%.*]] = load i64, ptr [[TMP0:%.*]], align 8, !range [[RNG0:![0-9]+]]
+; CHECK-NEXT:    [[INTTOPTR:%.*]] = inttoptr i64 [[LOADED]] to ptr
+; CHECK-NEXT:    ret ptr [[INTTOPTR]]
 ;
 entry-block:
-  %loaded = load i64, i64* %0, align 8, !range !1
-  %inttoptr = inttoptr i64 %loaded to i64*
-  ret i64* %inttoptr
+  %loaded = load i64, ptr %0, align 8, !range !1
+  %inttoptr = inttoptr i64 %loaded to ptr
+  ret ptr %inttoptr
 }
 
 
index 25812c0751da309a3227bf09401a34050c8518d5..e2ef0261296f48728d57a441fa420cba6bff263a 100644 (file)
@@ -1,25 +1,21 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -instcombine -S < %s | FileCheck %s
 
-define void @PR37526(i32* %pz, i32* %px, i32* %py) {
+define void @PR37526(ptr %pz, ptr %px, ptr %py) {
 ; CHECK-LABEL: @PR37526(
-; CHECK-NEXT:    [[T1:%.*]] = bitcast i32* [[PZ:%.*]] to i64*
-; CHECK-NEXT:    [[T2:%.*]] = load i32, i32* [[PY:%.*]], align 4
-; CHECK-NEXT:    [[T3:%.*]] = load i32, i32* [[PX:%.*]], align 4
+; CHECK-NEXT:    [[T2:%.*]] = load i32, ptr [[PY:%.*]], align 4
+; CHECK-NEXT:    [[T3:%.*]] = load i32, ptr [[PX:%.*]], align 4
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[T2]], [[T3]]
-; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[CMP]], i32* [[PX]], i32* [[PY]]
-; CHECK-NEXT:    [[BC:%.*]] = bitcast i32* [[SELECT]] to i64*
-; CHECK-NEXT:    [[R:%.*]] = load i64, i64* [[BC]], align 4
-; CHECK-NEXT:    store i64 [[R]], i64* [[T1]], align 4
+; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[CMP]], ptr [[PX]], ptr [[PY]]
+; CHECK-NEXT:    [[R:%.*]] = load i64, ptr [[SELECT]], align 4
+; CHECK-NEXT:    store i64 [[R]], ptr [[PZ:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %t1 = bitcast i32* %pz to i64*
-  %t2 = load i32, i32* %py
-  %t3 = load i32, i32* %px
+  %t2 = load i32, ptr %py
+  %t3 = load i32, ptr %px
   %cmp = icmp slt i32 %t2, %t3
-  %select = select i1 %cmp, i32* %px, i32* %py
-  %bc = bitcast i32* %select to i64*
-  %r = load i64, i64* %bc
-  store i64 %r, i64* %t1
+  %select = select i1 %cmp, ptr %px, ptr %py
+  %r = load i64, ptr %select
+  store i64 %r, ptr %pz
   ret void
 }
index 245b87e65af8a3bc3729dc1d144fb71a4f2cae0d..039a844959a29f3a00584cbe1e9e17792633eba7 100644 (file)
@@ -576,11 +576,11 @@ define i8 @nabs_different_constants(i8 %a) {
 
 define i64 @infinite_loop_constant_expression_abs(i64 %arg) {
 ; CHECK-LABEL: @infinite_loop_constant_expression_abs(
-; CHECK-NEXT:    [[T:%.*]] = sub i64 ptrtoint (i64* @g to i64), [[ARG:%.*]]
+; CHECK-NEXT:    [[T:%.*]] = sub i64 ptrtoint (ptr @g to i64), [[ARG:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = call i64 @llvm.abs.i64(i64 [[T]], i1 true)
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
-  %t = sub i64 ptrtoint (i64* @g to i64), %arg
+  %t = sub i64 ptrtoint (ptr @g to i64), %arg
   %t1 = icmp slt i64 %t, 0
   %t2 = sub nsw i64 0, %t
   %t3 = select i1 %t1, i64 %t2, i64 %t
index 92d2750d2bc16d630ca89622a98117cf6dbbea28..ebaf8664c45d7e0347d146c6c05a0894dc509e9e 100644 (file)
@@ -315,15 +315,15 @@ define <3 x i82> @abs_nsw_sext(<3 x i7> %x) {
   ret <3 x i82> %a
 }
 
-define i32 @abs_sext_extra_use(i8 %x, i32* %p) {
+define i32 @abs_sext_extra_use(i8 %x, ptr %p) {
 ; CHECK-LABEL: @abs_sext_extra_use(
 ; CHECK-NEXT:    [[S:%.*]] = sext i8 [[X:%.*]] to i32
-; CHECK-NEXT:    store i32 [[S]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[S]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[A:%.*]] = call i32 @llvm.abs.i32(i32 [[S]], i1 false)
 ; CHECK-NEXT:    ret i32 [[A]]
 ;
   %s = sext i8 %x to i32
-  store i32 %s, i32* %p
+  store i32 %s, ptr %p
   %a = call i32 @llvm.abs.i32(i32 %s, i1 0)
   ret i32 %a
 }
@@ -399,15 +399,15 @@ define i32 @srem_by_2_int_min_is_poison(i32 %x) {
   ret i32 %r
 }
 
-define <3 x i82> @srem_by_2(<3 x i82> %x, <3 x i82>* %p) {
+define <3 x i82> @srem_by_2(<3 x i82> %x, ptr %p) {
 ; CHECK-LABEL: @srem_by_2(
 ; CHECK-NEXT:    [[S:%.*]] = srem <3 x i82> [[X:%.*]], <i82 2, i82 2, i82 2>
-; CHECK-NEXT:    store <3 x i82> [[S]], <3 x i82>* [[P:%.*]], align 32
+; CHECK-NEXT:    store <3 x i82> [[S]], ptr [[P:%.*]], align 32
 ; CHECK-NEXT:    [[R:%.*]] = and <3 x i82> [[X]], <i82 1, i82 1, i82 1>
 ; CHECK-NEXT:    ret <3 x i82> [[R]]
 ;
   %s = srem <3 x i82> %x, <i82 2, i82 2, i82 2>
-  store <3 x i82> %s, <3 x i82>* %p
+  store <3 x i82> %s, ptr %p
   %r = call <3 x i82> @llvm.abs.v3i82(<3 x i82> %s, i1 false)
   ret <3 x i82> %r
 }
index eb855f515340d705a12f6244b932e7d15a9c6cb5..ccb18f9354114ebe0898ad10e9d8b1d5648aa246 100644 (file)
@@ -455,31 +455,31 @@ define i32 @add_nsw_sext_add(i8 %x) {
 
 ; Negative test - extra use of the sext means increase of instructions.
 
-define i32 @add_nsw_sext_add_extra_use_1(i8 %x, i32* %p) {
+define i32 @add_nsw_sext_add_extra_use_1(i8 %x, ptr %p) {
 ; CHECK-LABEL: @add_nsw_sext_add_extra_use_1(
 ; CHECK-NEXT:    [[ADD:%.*]] = add nsw i8 [[X:%.*]], 42
 ; CHECK-NEXT:    [[EXT:%.*]] = sext i8 [[ADD]] to i32
-; CHECK-NEXT:    store i32 [[EXT]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[EXT]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = add nsw i32 [[EXT]], 356
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %add = add nsw i8 %x, 42
   %ext = sext i8 %add to i32
-  store i32 %ext, i32* %p
+  store i32 %ext, ptr %p
   %r = add i32 %ext, 356
   ret i32 %r
 }
 
-define <2 x i32> @add_nsw_sext_add_vec_extra_use_2(<2 x i8> %x, <2 x i8>* %p) {
+define <2 x i32> @add_nsw_sext_add_vec_extra_use_2(<2 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @add_nsw_sext_add_vec_extra_use_2(
 ; CHECK-NEXT:    [[ADD:%.*]] = add nsw <2 x i8> [[X:%.*]], <i8 42, i8 -5>
-; CHECK-NEXT:    store <2 x i8> [[ADD]], <2 x i8>* [[P:%.*]], align 2
+; CHECK-NEXT:    store <2 x i8> [[ADD]], ptr [[P:%.*]], align 2
 ; CHECK-NEXT:    [[TMP1:%.*]] = sext <2 x i8> [[X]] to <2 x i32>
 ; CHECK-NEXT:    [[R:%.*]] = add nsw <2 x i32> [[TMP1]], <i32 398, i32 7>
 ; CHECK-NEXT:    ret <2 x i32> [[R]]
 ;
   %add = add nsw <2 x i8> %x, <i8 42, i8 -5>
-  store <2 x i8> %add, <2 x i8>* %p
+  store <2 x i8> %add, ptr %p
   %ext = sext <2 x i8> %add to <2 x i32>
   %r = add <2 x i32> %ext, <i32 356, i32 12>
   ret <2 x i32> %r
@@ -499,31 +499,31 @@ define <2 x i32> @add_nuw_zext_add_vec(<2 x i16> %x) {
 
 ; Negative test - extra use of the zext means increase of instructions.
 
-define i64 @add_nuw_zext_add_extra_use_1(i8 %x, i64* %p) {
+define i64 @add_nuw_zext_add_extra_use_1(i8 %x, ptr %p) {
 ; CHECK-LABEL: @add_nuw_zext_add_extra_use_1(
 ; CHECK-NEXT:    [[ADD:%.*]] = add nuw i8 [[X:%.*]], 42
 ; CHECK-NEXT:    [[EXT:%.*]] = zext i8 [[ADD]] to i64
-; CHECK-NEXT:    store i64 [[EXT]], i64* [[P:%.*]], align 4
+; CHECK-NEXT:    store i64 [[EXT]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = add nuw nsw i64 [[EXT]], 356
 ; CHECK-NEXT:    ret i64 [[R]]
 ;
   %add = add nuw i8 %x, 42
   %ext = zext i8 %add to i64
-  store i64 %ext, i64* %p
+  store i64 %ext, ptr %p
   %r = add i64 %ext, 356
   ret i64 %r
 }
 
-define i64 @add_nuw_zext_add_extra_use_2(i8 %x, i8* %p) {
+define i64 @add_nuw_zext_add_extra_use_2(i8 %x, ptr %p) {
 ; CHECK-LABEL: @add_nuw_zext_add_extra_use_2(
 ; CHECK-NEXT:    [[ADD:%.*]] = add nuw i8 [[X:%.*]], 42
-; CHECK-NEXT:    store i8 [[ADD]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[ADD]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = zext i8 [[X]] to i64
 ; CHECK-NEXT:    [[R:%.*]] = add nuw nsw i64 [[TMP1]], -314
 ; CHECK-NEXT:    ret i64 [[R]]
 ;
   %add = add nuw i8 %x, 42
-  store i8 %add, i8* %p
+  store i8 %add, ptr %p
   %ext = zext i8 %add to i64
   %r = add i64 %ext, -356
   ret i64 %r
@@ -1206,17 +1206,17 @@ define i32 @and31_add(i1 %x, i1 %y) {
 
 ; Negative test - extra use
 
-define i32 @lshr_add_use(i1 %x, i1 %y, i32* %p) {
+define i32 @lshr_add_use(i1 %x, i1 %y, ptr %p) {
 ; CHECK-LABEL: @lshr_add_use(
 ; CHECK-NEXT:    [[XZ:%.*]] = zext i1 [[X:%.*]] to i32
-; CHECK-NEXT:    store i32 [[XZ]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[XZ]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[YS:%.*]] = sext i1 [[Y:%.*]] to i32
 ; CHECK-NEXT:    [[SUB:%.*]] = add nsw i32 [[XZ]], [[YS]]
 ; CHECK-NEXT:    [[R:%.*]] = lshr i32 [[SUB]], 31
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %xz = zext i1 %x to i32
-  store i32 %xz, i32* %p
+  store i32 %xz, ptr %p
   %ys = sext i1 %y to i32
   %sub = add i32 %xz, %ys
   %r = lshr i32 %sub, 31
@@ -1225,18 +1225,18 @@ define i32 @lshr_add_use(i1 %x, i1 %y, i32* %p) {
 
 ; Negative test - extra use
 
-define i32 @lshr_add_use2(i1 %x, i1 %y, i32* %p) {
+define i32 @lshr_add_use2(i1 %x, i1 %y, ptr %p) {
 ; CHECK-LABEL: @lshr_add_use2(
 ; CHECK-NEXT:    [[XZ:%.*]] = zext i1 [[X:%.*]] to i32
 ; CHECK-NEXT:    [[YS:%.*]] = sext i1 [[Y:%.*]] to i32
-; CHECK-NEXT:    store i32 [[YS]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[YS]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[SUB:%.*]] = add nsw i32 [[XZ]], [[YS]]
 ; CHECK-NEXT:    [[R:%.*]] = lshr i32 [[SUB]], 31
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %xz = zext i1 %x to i32
   %ys = sext i1 %y to i32
-  store i32 %ys, i32* %p
+  store i32 %ys, ptr %p
   %sub = add i32 %xz, %ys
   %r = lshr i32 %sub, 31
   ret i32 %r
@@ -1332,17 +1332,17 @@ define i32 @and31_add_sexts(i1 %x, i1 %y) {
 
 ; Negative test - extra use
 
-define i32 @lshr_add_use_sexts(i1 %x, i1 %y, i32* %p) {
+define i32 @lshr_add_use_sexts(i1 %x, i1 %y, ptr %p) {
 ; CHECK-LABEL: @lshr_add_use_sexts(
 ; CHECK-NEXT:    [[XS:%.*]] = sext i1 [[X:%.*]] to i32
-; CHECK-NEXT:    store i32 [[XS]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[XS]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[YS:%.*]] = sext i1 [[Y:%.*]] to i32
 ; CHECK-NEXT:    [[SUB:%.*]] = add nsw i32 [[XS]], [[YS]]
 ; CHECK-NEXT:    [[R:%.*]] = lshr i32 [[SUB]], 31
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %xs = sext i1 %x to i32
-  store i32 %xs, i32* %p
+  store i32 %xs, ptr %p
   %ys = sext i1 %y to i32
   %sub = add i32 %xs, %ys
   %r = lshr i32 %sub, 31
@@ -1351,18 +1351,18 @@ define i32 @lshr_add_use_sexts(i1 %x, i1 %y, i32* %p) {
 
 ; Negative test - extra use
 
-define i32 @lshr_add_use2_sexts(i1 %x, i1 %y, i32* %p) {
+define i32 @lshr_add_use2_sexts(i1 %x, i1 %y, ptr %p) {
 ; CHECK-LABEL: @lshr_add_use2_sexts(
 ; CHECK-NEXT:    [[XS:%.*]] = sext i1 [[X:%.*]] to i32
 ; CHECK-NEXT:    [[YS:%.*]] = sext i1 [[Y:%.*]] to i32
-; CHECK-NEXT:    store i32 [[YS]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[YS]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[SUB:%.*]] = add nsw i32 [[XS]], [[YS]]
 ; CHECK-NEXT:    [[R:%.*]] = lshr i32 [[SUB]], 31
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %xs = sext i1 %x to i32
   %ys = sext i1 %y to i32
-  store i32 %ys, i32* %p
+  store i32 %ys, ptr %p
   %sub = add i32 %xs, %ys
   %r = lshr i32 %sub, 31
   ret i32 %r
index 5395dfa1b9bc8916a0ab253ddd5ce89d55b007ef..7580a1ba003c76213ea0eb68b18c460d0957dda2 100644 (file)
@@ -8,12 +8,12 @@ target triple = "i686-apple-darwin8"
 define void @test2(i32 %.val24) {
 EntryBlock:
         add i32 %.val24, -12
-        inttoptr i32 %0 to i32*
-        store i32 1, i32* %1
+        inttoptr i32 %0 to ptr
+        store i32 1, ptr %1
         add i32 %.val24, -16
-        inttoptr i32 %2 to i32*
-        getelementptr i32, i32* %3, i32 1
-        load i32, i32* %4
+        inttoptr i32 %2 to ptr
+        getelementptr i32, ptr %3, i32 1
+        load i32, ptr %4
         tail call i32 @callee( i32 %5 )
         ret void
 }
index cd2ae85b300ac0dbc89e619cbf93cf7dbe84868f..a2606fba2bf83baedbf9392a8b6f0a083a57a167 100644 (file)
@@ -21,12 +21,10 @@ define void @foo() nounwind  {
 ; CHECK-NEXT:    br label [[BB1:%.*]]
 ; CHECK:       bb1:
 ; CHECK-NEXT:    [[J:%.*]] = phi i64 [ 0, [[BB7_OUTER]] ], [ [[INDVAR_NEXT:%.*]], [[BB1]] ]
-; CHECK-NEXT:    [[T4:%.*]] = getelementptr [1001 x [20000 x double]], [1001 x [20000 x double]]* @Nice, i64 0, i64 [[I]], i64 [[J]]
-; CHECK-NEXT:    [[Q:%.*]] = bitcast double* [[T4]] to <2 x double>*
-; CHECK-NEXT:    store <2 x double> zeroinitializer, <2 x double>* [[Q]], align 16
-; CHECK-NEXT:    [[S4:%.*]] = getelementptr [1001 x [20001 x double]], [1001 x [20001 x double]]* @Awkward, i64 0, i64 [[I]], i64 [[J]]
-; CHECK-NEXT:    [[R:%.*]] = bitcast double* [[S4]] to <2 x double>*
-; CHECK-NEXT:    store <2 x double> zeroinitializer, <2 x double>* [[R]], align 8
+; CHECK-NEXT:    [[T4:%.*]] = getelementptr [1001 x [20000 x double]], ptr @Nice, i64 0, i64 [[I]], i64 [[J]]
+; CHECK-NEXT:    store <2 x double> zeroinitializer, ptr [[T4]], align 16
+; CHECK-NEXT:    [[S4:%.*]] = getelementptr [1001 x [20001 x double]], ptr @Awkward, i64 0, i64 [[I]], i64 [[J]]
+; CHECK-NEXT:    store <2 x double> zeroinitializer, ptr [[S4]], align 8
 ; CHECK-NEXT:    [[INDVAR_NEXT]] = add i64 [[J]], 2
 ; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i64 [[INDVAR_NEXT]], 556
 ; CHECK-NEXT:    br i1 [[EXITCOND]], label [[BB11]], label [[BB1]]
@@ -47,13 +45,11 @@ bb7.outer:
 bb1:
   %j = phi i64 [ 0, %bb7.outer ], [ %indvar.next, %bb1 ]
 
-  %t4 = getelementptr [1001 x [20000 x double]], [1001 x [20000 x double]]* @Nice, i64 0, i64 %i, i64 %j
-  %q = bitcast double* %t4 to <2 x double>*
-  store <2 x double><double 0.0, double 0.0>, <2 x double>* %q, align 8
+  %t4 = getelementptr [1001 x [20000 x double]], ptr @Nice, i64 0, i64 %i, i64 %j
+  store <2 x double><double 0.0, double 0.0>, ptr %t4, align 8
 
-  %s4 = getelementptr [1001 x [20001 x double]], [1001 x [20001 x double]]* @Awkward, i64 0, i64 %i, i64 %j
-  %r = bitcast double* %s4 to <2 x double>*
-  store <2 x double><double 0.0, double 0.0>, <2 x double>* %r, align 8
+  %s4 = getelementptr [1001 x [20001 x double]], ptr @Awkward, i64 0, i64 %i, i64 %j
+  store <2 x double><double 0.0, double 0.0>, ptr %s4, align 8
 
   %indvar.next = add i64 %j, 2
   %exitcond = icmp eq i64 %indvar.next, 556
index abc52f2adc3b8f04faaf479afae493c264aa0542..a53da0bc5a20a79f81480d580b0277fd18c46473 100644 (file)
@@ -5,12 +5,12 @@ target datalayout = "E-p:64:64:64-p1:32:32:32-a0:0:8-f32:32:32-f64:64:64-i1:8:8-
 ; Instcombine should be able to prove vector alignment in the
 ; presence of a few mild address computation tricks.
 
-define void @test0(i8* %b, i64 %n, i64 %u, i64 %y) nounwind  {
+define void @test0(ptr %b, i64 %n, i64 %u, i64 %y) nounwind  {
 ; CHECK-LABEL: @test0(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[C:%.*]] = ptrtoint i8* [[B:%.*]] to i64
+; CHECK-NEXT:    [[C:%.*]] = ptrtoint ptr [[B:%.*]] to i64
 ; CHECK-NEXT:    [[D:%.*]] = and i64 [[C]], -16
-; CHECK-NEXT:    [[E:%.*]] = inttoptr i64 [[D]] to double*
+; CHECK-NEXT:    [[E:%.*]] = inttoptr i64 [[D]] to ptr
 ; CHECK-NEXT:    [[V:%.*]] = shl i64 [[U:%.*]], 1
 ; CHECK-NEXT:    [[Z:%.*]] = and i64 [[Y:%.*]], -2
 ; CHECK-NEXT:    [[T1421:%.*]] = icmp eq i64 [[N:%.*]], 0
@@ -19,9 +19,8 @@ define void @test0(i8* %b, i64 %n, i64 %u, i64 %y) nounwind  {
 ; CHECK-NEXT:    [[I:%.*]] = phi i64 [ [[INDVAR_NEXT:%.*]], [[BB]] ], [ 20, [[ENTRY:%.*]] ]
 ; CHECK-NEXT:    [[J:%.*]] = mul i64 [[I]], [[V]]
 ; CHECK-NEXT:    [[H:%.*]] = add i64 [[J]], [[Z]]
-; CHECK-NEXT:    [[T8:%.*]] = getelementptr double, double* [[E]], i64 [[H]]
-; CHECK-NEXT:    [[P:%.*]] = bitcast double* [[T8]] to <2 x double>*
-; CHECK-NEXT:    store <2 x double> zeroinitializer, <2 x double>* [[P]], align 16
+; CHECK-NEXT:    [[T8:%.*]] = getelementptr double, ptr [[E]], i64 [[H]]
+; CHECK-NEXT:    store <2 x double> zeroinitializer, ptr [[T8]], align 16
 ; CHECK-NEXT:    [[INDVAR_NEXT]] = add i64 [[I]], 1
 ; CHECK-NEXT:    [[EXITCOND:%.*]] = icmp eq i64 [[INDVAR_NEXT]], [[N]]
 ; CHECK-NEXT:    br i1 [[EXITCOND]], label [[RETURN]], label [[BB]]
@@ -29,9 +28,9 @@ define void @test0(i8* %b, i64 %n, i64 %u, i64 %y) nounwind  {
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %c = ptrtoint i8* %b to i64
+  %c = ptrtoint ptr %b to i64
   %d = and i64 %c, -16
-  %e = inttoptr i64 %d to double*
+  %e = inttoptr i64 %d to ptr
   %v = mul i64 %u, 2
   %z = and i64 %y, -2
   %t1421 = icmp eq i64 %n, 0
@@ -41,9 +40,8 @@ bb:
   %i = phi i64 [ %indvar.next, %bb ], [ 20, %entry ]
   %j = mul i64 %i, %v
   %h = add i64 %j, %z
-  %t8 = getelementptr double, double* %e, i64 %h
-  %p = bitcast double* %t8 to <2 x double>*
-  store <2 x double><double 0.0, double 0.0>, <2 x double>* %p, align 8
+  %t8 = getelementptr double, ptr %e, i64 %h
+  store <2 x double><double 0.0, double 0.0>, ptr %t8, align 8
   %indvar.next = add i64 %i, 1
   %exitcond = icmp eq i64 %indvar.next, %n
   br i1 %exitcond, label %return, label %bb
@@ -60,11 +58,11 @@ return:
 define <16 x i8> @test1(<2 x i64> %x) {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP:%.*]] = load <16 x i8>, <16 x i8>* bitcast ([4 x i32]* @GLOBAL to <16 x i8>*), align 16
+; CHECK-NEXT:    [[TMP:%.*]] = load <16 x i8>, ptr @GLOBAL, align 16
 ; CHECK-NEXT:    ret <16 x i8> [[TMP]]
 ;
 entry:
-  %tmp = load <16 x i8>, <16 x i8>* bitcast ([4 x i32]* @GLOBAL to <16 x i8>*), align 1
+  %tmp = load <16 x i8>, ptr @GLOBAL, align 1
   ret <16 x i8> %tmp
 }
 
@@ -72,10 +70,10 @@ entry:
 
 define <16 x i8> @test1_as1(<2 x i64> %x) {
 ; CHECK-LABEL: @test1_as1(
-; CHECK-NEXT:    [[TMP:%.*]] = load <16 x i8>, <16 x i8> addrspace(1)* bitcast ([4 x i32] addrspace(1)* @GLOBAL_as1 to <16 x i8> addrspace(1)*), align 16
+; CHECK-NEXT:    [[TMP:%.*]] = load <16 x i8>, ptr addrspace(1) @GLOBAL_as1, align 16
 ; CHECK-NEXT:    ret <16 x i8> [[TMP]]
 ;
-  %tmp = load <16 x i8>, <16 x i8> addrspace(1)* bitcast ([4 x i32] addrspace(1)* @GLOBAL_as1 to <16 x i8> addrspace(1)*), align 1
+  %tmp = load <16 x i8>, ptr addrspace(1) @GLOBAL_as1, align 1
   ret <16 x i8> %tmp
 }
 
@@ -83,43 +81,41 @@ define <16 x i8> @test1_as1(<2 x i64> %x) {
 
 define <16 x i8> @test1_as1_gep(<2 x i64> %x) {
 ; CHECK-LABEL: @test1_as1_gep(
-; CHECK-NEXT:    [[TMP:%.*]] = load <16 x i8>, <16 x i8> addrspace(1)* bitcast (i32 addrspace(1)* getelementptr inbounds ([8 x i32], [8 x i32] addrspace(1)* @GLOBAL_as1_gep, i32 0, i32 4) to <16 x i8> addrspace(1)*), align 16
+; CHECK-NEXT:    [[TMP:%.*]] = load <16 x i8>, ptr addrspace(1) getelementptr inbounds ([8 x i32], ptr addrspace(1) @GLOBAL_as1_gep, i32 0, i32 4), align 16
 ; CHECK-NEXT:    ret <16 x i8> [[TMP]]
 ;
-  %tmp = load <16 x i8>, <16 x i8> addrspace(1)* bitcast (i32 addrspace(1)* getelementptr ([8 x i32], [8 x i32] addrspace(1)* @GLOBAL_as1_gep, i16 0, i16 4) to <16 x i8> addrspace(1)*), align 1
+  %tmp = load <16 x i8>, ptr addrspace(1) getelementptr ([8 x i32], ptr addrspace(1) @GLOBAL_as1_gep, i16 0, i16 4), align 1
   ret <16 x i8> %tmp
 }
 
 
 ; When a load or store lacks an explicit alignment, add one.
 
-define double @test2(double* %p, double %n) nounwind {
+define double @test2(ptr %p, double %n) nounwind {
 ; CHECK-LABEL: @test2(
-; CHECK-NEXT:    [[T:%.*]] = load double, double* [[P:%.*]], align 8
-; CHECK-NEXT:    store double [[N:%.*]], double* [[P]], align 8
+; CHECK-NEXT:    [[T:%.*]] = load double, ptr [[P:%.*]], align 8
+; CHECK-NEXT:    store double [[N:%.*]], ptr [[P]], align 8
 ; CHECK-NEXT:    ret double [[T]]
 ;
-  %t = load double, double* %p
-  store double %n, double* %p
+  %t = load double, ptr %p
+  store double %n, ptr %p
   ret double %t
 }
 
-declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1) nounwind
+declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind
 
-declare void @use(i8*)
+declare void @use(ptr)
 
 %struct.s = type { i32, i32, i32, i32 }
 
-define void @test3(%struct.s* sret(%struct.s) %a4) {
+define void @test3(ptr sret(%struct.s) %a4) {
 ; Check that the alignment is bumped up the alignment of the sret type.
 ; CHECK-LABEL: @test3(
-; CHECK-NEXT:    [[A4_CAST:%.*]] = bitcast %struct.s* [[A4:%.*]] to i8*
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(16) [[A4_CAST]], i8 0, i64 16, i1 false)
-; CHECK-NEXT:    call void @use(i8* [[A4_CAST]])
+; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(16) [[A4:%.*]], i8 0, i64 16, i1 false)
+; CHECK-NEXT:    call void @use(ptr [[A4:%.*]])
 ; CHECK-NEXT:    ret void
 ;
-  %a4.cast = bitcast %struct.s* %a4 to i8*
-  call void @llvm.memset.p0i8.i64(i8* %a4.cast, i8 0, i64 16, i1 false)
-  call void @use(i8* %a4.cast)
+  call void @llvm.memset.p0.i64(ptr %a4, i8 0, i64 16, i1 false)
+  call void @use(ptr %a4)
   ret void
 }
index 1e8f580ce6275d303d4815b51a9a3061d390e0fe..687aa604a4438d84db60cee17f7eb2d5a589a9f4 100644 (file)
@@ -4,31 +4,31 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
 ; Function Attrs: nounwind uwtable
-define i32 @foo1(i32* align 32 %a) #0 {
+define i32 @foo1(ptr align 32 %a) #0 {
 ; CHECK-LABEL: @foo1(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* [[A:%.*]], align 32
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A:%.*]], align 32
 ; CHECK-NEXT:    ret i32 [[TMP0]]
 ;
 entry:
-  %0 = load i32, i32* %a, align 4
+  %0 = load i32, ptr %a, align 4
   ret i32 %0
 
 }
 
-define i32 @foo2(i32* align 32 %a) #0 {
+define i32 @foo2(ptr align 32 %a) #0 {
 ; CHECK-LABEL: @foo2(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[V:%.*]] = call i32* @func1(i32* [[A:%.*]])
-; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* [[A]], align 32
+; CHECK-NEXT:    [[V:%.*]] = call ptr @func1(ptr [[A:%.*]])
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A]], align 32
 ; CHECK-NEXT:    ret i32 [[TMP0]]
 ;
 entry:
-  %v = call i32* @func1(i32* %a)
-  %0 = load i32, i32* %v, align 4
+  %v = call ptr @func1(ptr %a)
+  %0 = load i32, ptr %v, align 4
   ret i32 %0
 
 }
 
-declare i32* @func1(i32* returned) nounwind
+declare ptr @func1(ptr returned) nounwind
 
index 0e83e3692e249dfb0d62f004ef663253d73a6bd0..68853cbd6e1c4540a5f02e0a87c881447da9bb29 100644 (file)
@@ -12,7 +12,7 @@ target datalayout = "i32:8:32"
 ; CHECK: @C = available_externally global <4 x i32> zeroinitializer, align 4
 
 define i64 @foo(i64 %a) {
-  %t = ptrtoint i32* @A to i64
+  %t = ptrtoint ptr @A to i64
   %s = shl i64 %a, 3
   %r = or i64 %t, %s
   %q = add i64 %r, 1
@@ -21,12 +21,12 @@ define i64 @foo(i64 %a) {
 
 ; CHECK-LABEL: define i64 @foo(i64 %a)
 ; CHECK: %s = shl i64 %a, 3
-; CHECK: %r = or i64 %s, ptrtoint (i32* @A to i64)
+; CHECK: %r = or i64 %s, ptrtoint (ptr @A to i64)
 ; CHECK: %q = add i64 %r, 1
 ; CHECK: ret i64 %q
 
 define i32 @bar() {
-  %r = load i32, i32* @B, align 1
+  %r = load i32, ptr @B, align 1
   ret i32 %r
 }
 
@@ -34,8 +34,8 @@ define i32 @bar() {
 ; CHECK: align 1
 
 define void @vec_store() {
-  store <4 x i32> <i32 0, i32 1, i32 2, i32 3>, <4 x i32>* @C, align 4
+  store <4 x i32> <i32 0, i32 1, i32 2, i32 3>, ptr @C, align 4
   ret void
 }
 ; CHECK: define void @vec_store()
-; CHECK: store <4 x i32> <i32 0, i32 1, i32 2, i32 3>, <4 x i32>* @C, align 4
+; CHECK: store <4 x i32> <i32 0, i32 1, i32 2, i32 3>, ptr @C, align 4
index 83ad7c039dc3ee46807063059bcd787410c1a66b..77a3500d397f2a5a6f0534b0b09616c3d8c519c6 100644 (file)
@@ -4,7 +4,7 @@ target datalayout = "E-m:e-i64:64-n32:64"
 target triple = "powerpc64-unknown-linux-gnu"
 
 @d = global i32 15, align 4
-@b = global i32* @d, align 8
+@b = global ptr @d, align 8
 @a = common global i32 0, align 4
 
 ; Check that both InstCombine and InstSimplify can use computeKnownBits to
@@ -14,29 +14,29 @@ target triple = "powerpc64-unknown-linux-gnu"
 define signext i32 @main() #1 {
 ; CHECK-LABEL: @main(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = load i32*, i32** @b, align 8
-; CHECK-NEXT:    [[TMP1:%.*]] = load i32, i32* [[TMP0]], align 4
+; CHECK-NEXT:    [[TMP0:%.*]] = load ptr, ptr @b, align 8
+; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[TMP0]], align 4
 ; CHECK-NEXT:    ret i32 [[TMP1]]
 ;
 entry:
-  %0 = load i32*, i32** @b, align 8
-  %1 = load i32, i32* @a, align 4
+  %0 = load ptr, ptr @b, align 8
+  %1 = load i32, ptr @a, align 4
   %lnot = icmp eq i32 %1, 0
   %lnot.ext = zext i1 %lnot to i32
   %shr.i = lshr i32 2072, %lnot.ext
   %call.lobit = lshr i32 %shr.i, 7
   %2 = and i32 %call.lobit, 1
-  %3 = load i32, i32* %0, align 4
+  %3 = load i32, ptr %0, align 4
   %or = or i32 %2, %3
-  store i32 %or, i32* %0, align 4
-  %4 = load i32, i32* @a, align 4
+  store i32 %or, ptr %0, align 4
+  %4 = load i32, ptr @a, align 4
   %lnot.1 = icmp eq i32 %4, 0
   %lnot.ext.1 = zext i1 %lnot.1 to i32
   %shr.i.1 = lshr i32 2072, %lnot.ext.1
   %call.lobit.1 = lshr i32 %shr.i.1, 7
   %5 = and i32 %call.lobit.1, 1
   %or.1 = or i32 %5, %or
-  store i32 %or.1, i32* %0, align 4
+  store i32 %or.1, ptr %0, align 4
   ret i32 %or.1
 
 }
index 2031a2934925f9879572c2111fa3e4b0e479db2a..8b5bc7e034d33dbee892fb960cfa3c1ee04dd7af 100644 (file)
@@ -5,15 +5,15 @@ define dso_local void @test() local_unnamed_addr #0 {
 ; CHECK-LABEL: @test(
 ; CHECK-NEXT:    ret void
 ;
-  %1 = tail call noalias align 16 dereferenceable_or_null(4) i8* @malloc(i64 4) #4
-  %2 = tail call align 16 dereferenceable_or_null(6) i8* @realloc(i8* %1, i64 6) #4
-  tail call void @free(i8* %2) #4
+  %1 = tail call noalias align 16 dereferenceable_or_null(4) ptr @malloc(i64 4) #4
+  %2 = tail call align 16 dereferenceable_or_null(6) ptr @realloc(ptr %1, i64 6) #4
+  tail call void @free(ptr %2) #4
   ret void
 }
 
-declare dso_local noalias noundef i8* @malloc(i64 noundef) local_unnamed_addr #1
-declare dso_local noalias noundef i8* @realloc(i8* nocapture allocptr, i64 noundef) local_unnamed_addr #2
-declare dso_local void @free(i8* nocapture allocptr noundef) local_unnamed_addr #3
+declare dso_local noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #1
+declare dso_local noalias noundef ptr @realloc(ptr nocapture allocptr, i64 noundef) local_unnamed_addr #2
+declare dso_local void @free(ptr nocapture allocptr noundef) local_unnamed_addr #3
 declare void @llvm.dbg.value(metadata, metadata, metadata) #3
 
 attributes #0 = { mustprogress nounwind uwtable willreturn }
index 27e76e752fcee47be7ee680770969eefadfea7ff..6925f1ba988dc1ea2909e1f9a6e87398f19f19cd 100644 (file)
@@ -2,15 +2,13 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
 ; OSS-Fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5223
-define void @test_bigalloc(i8** %dst) {
+define void @test_bigalloc(ptr %dst) {
 ; CHECK-LABEL: @test_bigalloc(
 ; CHECK-NEXT:    [[TMP1:%.*]] = alloca [18446744069414584320 x i8], align 1
-; CHECK-NEXT:    [[DOTSUB:%.*]] = getelementptr inbounds [18446744069414584320 x i8], [18446744069414584320 x i8]* [[TMP1]], i64 0, i64 0
-; CHECK-NEXT:    store i8* [[DOTSUB]], i8** [[DST:%.*]], align 8
+; CHECK-NEXT:    store ptr [[TMP1]], ptr [[DST:%.*]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %1 = alloca i8, i864 -4294967296
-  %2 = getelementptr i8, i8* %1, i1 0
-  store i8* %2, i8** %dst
+  store ptr %1, ptr %dst
   ret void
 }
index 5b96a9b2d73bdf96f11a216d7249eb6cb62f1917..589561dfbc4a580144b7c7f2215eaa6569d5685d 100644 (file)
@@ -6,24 +6,24 @@
 
 target datalayout="e-p:32:32:32"
 
-declare i8* @my_malloc(i8*, i64) allocsize(1)
+declare ptr @my_malloc(ptr, i64) allocsize(1)
 
-define void @test_malloc(i8** %p, i32* %r) {
-  %1 = call i8* @my_malloc(i8* null, i64 100)
-  store i8* %1, i8** %p, align 8 ; To ensure objectsize isn't killed
+define void @test_malloc(ptr %p, ptr %r) {
+  %1 = call ptr @my_malloc(ptr null, i64 100)
+  store ptr %1, ptr %p, align 8 ; To ensure objectsize isn't killed
 
-  %2 = call i32 @llvm.objectsize.i32.p0i8(i8* %1, i1 false)
+  %2 = call i32 @llvm.objectsize.i32.p0(ptr %1, i1 false)
   ; CHECK: store i32 100
-  store i32 %2, i32* %r, align 8
+  store i32 %2, ptr %r, align 8
 
   ; Big number is 5 billion.
-  %3 = call i8* @my_malloc(i8* null, i64 5000000000)
-  store i8* %3, i8** %p, align 8 ; To ensure objectsize isn't killed
+  %3 = call ptr @my_malloc(ptr null, i64 5000000000)
+  store ptr %3, ptr %p, align 8 ; To ensure objectsize isn't killed
 
   ; CHECK: call i32 @llvm.objectsize
-  %4 = call i32 @llvm.objectsize.i32.p0i8(i8* %3, i1 false)
-  store i32 %4, i32* %r, align 8
+  %4 = call i32 @llvm.objectsize.i32.p0(ptr %3, i1 false)
+  store i32 %4, ptr %r, align 8
   ret void
 }
 
-declare i32 @llvm.objectsize.i32.p0i8(i8*, i1)
+declare i32 @llvm.objectsize.i32.p0(ptr, i1)
index 060da7c7ea0570de2566ccc2d17e4b48e487244a..ea7c28c5f4ea75416ff4e663e4793f8c14a308ab 100644 (file)
 ; args, and to prove that arbitrary unfoldable values don't interfere with
 ; allocsize if they're not used by allocsize.
 
-declare i8* @my_malloc(i8*, i32) allocsize(1)
-declare i8* @my_calloc(i8*, i8*, i32, i32) allocsize(2, 3)
+declare ptr @my_malloc(ptr, i32) allocsize(1)
+declare ptr @my_calloc(ptr, ptr, i32, i32) allocsize(2, 3)
 
 ; CHECK-LABEL: define void @test_malloc
-define void @test_malloc(i8** %p, i64* %r) {
-  %1 = call i8* @my_malloc(i8* null, i32 100)
-  store i8* %1, i8** %p, align 8 ; To ensure objectsize isn't killed
+define void @test_malloc(ptr %p, ptr %r) {
+  %1 = call ptr @my_malloc(ptr null, i32 100)
+  store ptr %1, ptr %p, align 8 ; To ensure objectsize isn't killed
 
-  %2 = call i64 @llvm.objectsize.i64.p0i8(i8* %1, i1 false)
+  %2 = call i64 @llvm.objectsize.i64.p0(ptr %1, i1 false)
   ; CHECK: store i64 100
-  store i64 %2, i64* %r, align 8
+  store i64 %2, ptr %r, align 8
   ret void
 }
 
 ; CHECK-LABEL: define void @test_calloc
-define void @test_calloc(i8** %p, i64* %r) {
-  %1 = call i8* @my_calloc(i8* null, i8* null, i32 100, i32 5)
-  store i8* %1, i8** %p, align 8 ; To ensure objectsize isn't killed
+define void @test_calloc(ptr %p, ptr %r) {
+  %1 = call ptr @my_calloc(ptr null, ptr null, i32 100, i32 5)
+  store ptr %1, ptr %p, align 8 ; To ensure objectsize isn't killed
 
-  %2 = call i64 @llvm.objectsize.i64.p0i8(i8* %1, i1 false)
+  %2 = call i64 @llvm.objectsize.i64.p0(ptr %1, i1 false)
   ; CHECK: store i64 500
-  store i64 %2, i64* %r, align 8
+  store i64 %2, ptr %r, align 8
   ret void
 }
 
 ; Failure cases with non-constant values...
 ; CHECK-LABEL: define void @test_malloc_fails
-define void @test_malloc_fails(i8** %p, i64* %r, i32 %n) {
-  %1 = call i8* @my_malloc(i8* null, i32 %n)
-  store i8* %1, i8** %p, align 8 ; To ensure objectsize isn't killed
+define void @test_malloc_fails(ptr %p, ptr %r, i32 %n) {
+  %1 = call ptr @my_malloc(ptr null, i32 %n)
+  store ptr %1, ptr %p, align 8 ; To ensure objectsize isn't killed
 
-  ; CHECK: @llvm.objectsize.i64.p0i8
-  %2 = call i64 @llvm.objectsize.i64.p0i8(i8* %1, i1 false)
-  store i64 %2, i64* %r, align 8
+  ; CHECK: @llvm.objectsize.i64.p0
+  %2 = call i64 @llvm.objectsize.i64.p0(ptr %1, i1 false)
+  store i64 %2, ptr %r, align 8
   ret void
 }
 
 ; CHECK-LABEL: define void @test_calloc_fails
-define void @test_calloc_fails(i8** %p, i64* %r, i32 %n) {
-  %1 = call i8* @my_calloc(i8* null, i8* null, i32 %n, i32 5)
-  store i8* %1, i8** %p, align 8 ; To ensure objectsize isn't killed
+define void @test_calloc_fails(ptr %p, ptr %r, i32 %n) {
+  %1 = call ptr @my_calloc(ptr null, ptr null, i32 %n, i32 5)
+  store ptr %1, ptr %p, align 8 ; To ensure objectsize isn't killed
 
-  ; CHECK: @llvm.objectsize.i64.p0i8
-  %2 = call i64 @llvm.objectsize.i64.p0i8(i8* %1, i1 false)
-  store i64 %2, i64* %r, align 8
+  ; CHECK: @llvm.objectsize.i64.p0
+  %2 = call i64 @llvm.objectsize.i64.p0(ptr %1, i1 false)
+  store i64 %2, ptr %r, align 8
 
 
-  %3 = call i8* @my_calloc(i8* null, i8* null, i32 100, i32 %n)
-  store i8* %3, i8** %p, align 8 ; To ensure objectsize isn't killed
+  %3 = call ptr @my_calloc(ptr null, ptr null, i32 100, i32 %n)
+  store ptr %3, ptr %p, align 8 ; To ensure objectsize isn't killed
 
-  ; CHECK: @llvm.objectsize.i64.p0i8
-  %4 = call i64 @llvm.objectsize.i64.p0i8(i8* %3, i1 false)
-  store i64 %4, i64* %r, align 8
+  ; CHECK: @llvm.objectsize.i64.p0
+  %4 = call i64 @llvm.objectsize.i64.p0(ptr %3, i1 false)
+  store i64 %4, ptr %r, align 8
   ret void
 }
 
-declare i8* @my_malloc_outofline(i8*, i32) #0
-declare i8* @my_calloc_outofline(i8*, i8*, i32, i32) #1
+declare ptr @my_malloc_outofline(ptr, i32) #0
+declare ptr @my_calloc_outofline(ptr, ptr, i32, i32) #1
 
 ; Verifying that out of line allocsize is parsed correctly
 ; CHECK-LABEL: define void @test_outofline
-define void @test_outofline(i8** %p, i64* %r) {
-  %1 = call i8* @my_malloc_outofline(i8* null, i32 100)
-  store i8* %1, i8** %p, align 8 ; To ensure objectsize isn't killed
+define void @test_outofline(ptr %p, ptr %r) {
+  %1 = call ptr @my_malloc_outofline(ptr null, i32 100)
+  store ptr %1, ptr %p, align 8 ; To ensure objectsize isn't killed
 
-  %2 = call i64 @llvm.objectsize.i64.p0i8(i8* %1, i1 false)
+  %2 = call i64 @llvm.objectsize.i64.p0(ptr %1, i1 false)
   ; CHECK: store i64 100
-  store i64 %2, i64* %r, align 8
+  store i64 %2, ptr %r, align 8
 
 
-  %3 = call i8* @my_calloc_outofline(i8* null, i8* null, i32 100, i32 5)
-  store i8* %3, i8** %p, align 8 ; To ensure objectsize isn't killed
+  %3 = call ptr @my_calloc_outofline(ptr null, ptr null, i32 100, i32 5)
+  store ptr %3, ptr %p, align 8 ; To ensure objectsize isn't killed
 
-  %4 = call i64 @llvm.objectsize.i64.p0i8(i8* %3, i1 false)
+  %4 = call i64 @llvm.objectsize.i64.p0(ptr %3, i1 false)
   ; CHECK: store i64 500
-  store i64 %4, i64* %r, align 8
+  store i64 %4, ptr %r, align 8
   ret void
 }
 
-declare i8* @my_malloc_i64(i8*, i64) #0
-declare i8* @my_tiny_calloc(i8*, i8*, i8, i8) #1
-declare i8* @my_varied_calloc(i8*, i8*, i32, i8) #1
+declare ptr @my_malloc_i64(ptr, i64) #0
+declare ptr @my_tiny_calloc(ptr, ptr, i8, i8) #1
+declare ptr @my_varied_calloc(ptr, ptr, i32, i8) #1
 
 ; CHECK-LABEL: define void @test_overflow
-define void @test_overflow(i8** %p, i32* %r) {
-  %r64 = bitcast i32* %r to i64*
+define void @test_overflow(ptr %p, ptr %r) {
 
   ; (2**31 + 1) * 2 > 2**31. So overflow. Yay.
-  %big_malloc = call i8* @my_calloc(i8* null, i8* null, i32 2147483649, i32 2)
-  store i8* %big_malloc, i8** %p, align 8
+  %big_malloc = call ptr @my_calloc(ptr null, ptr null, i32 2147483649, i32 2)
+  store ptr %big_malloc, ptr %p, align 8
 
   ; CHECK: @llvm.objectsize
-  %1 = call i32 @llvm.objectsize.i32.p0i8(i8* %big_malloc, i1 false)
-  store i32 %1, i32* %r, align 4
+  %1 = call i32 @llvm.objectsize.i32.p0(ptr %big_malloc, i1 false)
+  store i32 %1, ptr %r, align 4
 
 
-  %big_little_malloc = call i8* @my_tiny_calloc(i8* null, i8* null, i8 127, i8 4)
-  store i8* %big_little_malloc, i8** %p, align 8
+  %big_little_malloc = call ptr @my_tiny_calloc(ptr null, ptr null, i8 127, i8 4)
+  store ptr %big_little_malloc, ptr %p, align 8
 
   ; CHECK: store i32 508
-  %2 = call i32 @llvm.objectsize.i32.p0i8(i8* %big_little_malloc, i1 false)
-  store i32 %2, i32* %r, align 4
+  %2 = call i32 @llvm.objectsize.i32.p0(ptr %big_little_malloc, i1 false)
+  store i32 %2, ptr %r, align 4
 
 
   ; malloc(2**33)
-  %big_malloc_i64 = call i8* @my_malloc_i64(i8* null, i64 8589934592)
-  store i8* %big_malloc_i64, i8** %p, align 8
+  %big_malloc_i64 = call ptr @my_malloc_i64(ptr null, i64 8589934592)
+  store ptr %big_malloc_i64, ptr %p, align 8
 
   ; CHECK: @llvm.objectsize
-  %3 = call i32 @llvm.objectsize.i32.p0i8(i8* %big_malloc_i64, i1 false)
-  store i32 %3, i32* %r, align 4
+  %3 = call i32 @llvm.objectsize.i32.p0(ptr %big_malloc_i64, i1 false)
+  store i32 %3, ptr %r, align 4
 
 
-  %4 = call i64 @llvm.objectsize.i64.p0i8(i8* %big_malloc_i64, i1 false)
+  %4 = call i64 @llvm.objectsize.i64.p0(ptr %big_malloc_i64, i1 false)
   ; CHECK: store i64 8589934592
-  store i64 %4, i64* %r64, align 8
+  store i64 %4, ptr %r, align 8
 
 
   ; Just intended to ensure that we properly handle args of different types...
-  %varied_calloc = call i8* @my_varied_calloc(i8* null, i8* null, i32 1000, i8 5)
-  store i8* %varied_calloc, i8** %p, align 8
+  %varied_calloc = call ptr @my_varied_calloc(ptr null, ptr null, i32 1000, i8 5)
+  store ptr %varied_calloc, ptr %p, align 8
 
   ; CHECK: store i32 5000
-  %5 = call i32 @llvm.objectsize.i32.p0i8(i8* %varied_calloc, i1 false)
-  store i32 %5, i32* %r, align 4
+  %5 = call i32 @llvm.objectsize.i32.p0(ptr %varied_calloc, i1 false)
+  store i32 %5, ptr %r, align 4
 
   ret void
 }
@@ -137,18 +136,18 @@ define void @test_overflow(i8** %p, i32* %r) {
 ; CHECK-LABEL: define void @test_nobuiltin
 ; We had a bug where `nobuiltin` would cause `allocsize` to be ignored in
 ; @llvm.objectsize calculations.
-define void @test_nobuiltin(i8** %p, i64* %r) {
-  %1 = call i8* @my_malloc(i8* null, i32 100) nobuiltin
-  store i8* %1, i8** %p, align 8
+define void @test_nobuiltin(ptr %p, ptr %r) {
+  %1 = call ptr @my_malloc(ptr null, i32 100) nobuiltin
+  store ptr %1, ptr %p, align 8
 
-  %2 = call i64 @llvm.objectsize.i64.p0i8(i8* %1, i1 false)
+  %2 = call i64 @llvm.objectsize.i64.p0(ptr %1, i1 false)
   ; CHECK: store i64 100
-  store i64 %2, i64* %r, align 8
+  store i64 %2, ptr %r, align 8
   ret void
 }
 
 attributes #0 = { allocsize(1) }
 attributes #1 = { allocsize(2, 3) }
 
-declare i32 @llvm.objectsize.i32.p0i8(i8*, i1)
-declare i64 @llvm.objectsize.i64.p0i8(i8*, i1)
+declare i32 @llvm.objectsize.i32.p0(ptr, i1)
+declare i64 @llvm.objectsize.i64.p0(ptr, i1)
index a72a6daa1e7e090c90c3b87ecc2c942bf7de9a92..f181ba8a6fe4b6d2c6a43839330701942a355a42 100644 (file)
 ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-define i1 @ugt_and_min(i8* %x, i8* %y)  {
+define i1 @ugt_and_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_and_min(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %cmp = icmp ugt i8* %x, %y
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp ugt ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = and i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @ugt_and_min_logical(i8* %x, i8* %y)  {
+define i1 @ugt_and_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_and_min_logical(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %cmp = icmp ugt i8* %x, %y
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp ugt ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = select i1 %cmp, i1 %cmpeq, i1 false
   ret i1 %r
 }
 
-define i1 @ugt_and_min_commute(<2 x i8>* %x, <2 x i8>* %y)  {
+define i1 @ugt_and_min_commute(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_and_min_commute(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %cmp = icmp ugt <2 x i8>* %x, %y
-  %cmpeq = icmp eq <2 x i8>* %x, null
+  %cmp = icmp ugt ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = and i1 %cmpeq, %cmp
   ret i1 %r
 }
 
-define i1 @ugt_and_min_commute_logical(<2 x i8>* %x, <2 x i8>* %y)  {
+define i1 @ugt_and_min_commute_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_and_min_commute_logical(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %cmp = icmp ugt <2 x i8>* %x, %y
-  %cmpeq = icmp eq <2 x i8>* %x, null
+  %cmp = icmp ugt ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = select i1 %cmpeq, i1 %cmp, i1 false
   ret i1 %r
 }
 
-define i1 @ugt_swap_and_min(i8* %x, i8* %y)  {
+define i1 @ugt_swap_and_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_swap_and_min(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %cmp = icmp ult i8* %y, %x
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp ult ptr %y, %x
+  %cmpeq = icmp eq ptr %x, null
   %r = and i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @ugt_swap_and_min_logical(i8* %x, i8* %y)  {
+define i1 @ugt_swap_and_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_swap_and_min_logical(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %cmp = icmp ult i8* %y, %x
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp ult ptr %y, %x
+  %cmpeq = icmp eq ptr %x, null
   %r = select i1 %cmp, i1 %cmpeq, i1 false
   ret i1 %r
 }
 
-define i1 @ugt_swap_and_min_commute(i8* %x, i8* %y)  {
+define i1 @ugt_swap_and_min_commute(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_swap_and_min_commute(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %cmp = icmp ult i8* %y, %x
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp ult ptr %y, %x
+  %cmpeq = icmp eq ptr %x, null
   %r = and i1 %cmpeq, %cmp
   ret i1 %r
 }
 
-define i1 @ugt_swap_and_min_commute_logical(i8* %x, i8* %y)  {
+define i1 @ugt_swap_and_min_commute_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_swap_and_min_commute_logical(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %cmp = icmp ult i8* %y, %x
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp ult ptr %y, %x
+  %cmpeq = icmp eq ptr %x, null
   %r = select i1 %cmpeq, i1 %cmp, i1 false
   ret i1 %r
 }
@@ -102,82 +102,82 @@ define i1 @ugt_swap_and_min_commute_logical(i8* %x, i8* %y)  {
 ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-define i1 @ule_or_not_min(i427* %x, i427* %y)  {
+define i1 @ule_or_not_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_or_not_min(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %cmp = icmp ule i427* %x, %y
-  %cmpeq = icmp ne i427* %x, null
+  %cmp = icmp ule ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = or i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @ule_or_not_min_logical(i427* %x, i427* %y)  {
+define i1 @ule_or_not_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_or_not_min_logical(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %cmp = icmp ule i427* %x, %y
-  %cmpeq = icmp ne i427* %x, null
+  %cmp = icmp ule ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmp, i1 true, i1 %cmpeq
   ret i1 %r
 }
 
-define i1 @ule_or_not_min_commute(<3 x i9>* %x, <3 x i9>* %y)  {
+define i1 @ule_or_not_min_commute(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_or_not_min_commute(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %cmp = icmp ule <3 x i9>* %x, %y
-  %cmpeq = icmp ne <3 x i9>* %x, null
+  %cmp = icmp ule ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = or i1 %cmpeq, %cmp
   ret i1 %r
 }
 
-define i1 @ule_or_not_min_commute_logical(<3 x i9>* %x, <3 x i9>* %y)  {
+define i1 @ule_or_not_min_commute_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_or_not_min_commute_logical(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %cmp = icmp ule <3 x i9>* %x, %y
-  %cmpeq = icmp ne <3 x i9>* %x, null
+  %cmp = icmp ule ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmpeq, i1 true, i1 %cmp
   ret i1 %r
 }
 
-define i1 @ule_swap_or_not_min(i8* %x, i8* %y)  {
+define i1 @ule_swap_or_not_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_swap_or_not_min(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %cmp = icmp uge i8* %y, %x
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp uge ptr %y, %x
+  %cmpeq = icmp ne ptr %x, null
   %r = or i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @ule_swap_or_not_min_logical(i8* %x, i8* %y)  {
+define i1 @ule_swap_or_not_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_swap_or_not_min_logical(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %cmp = icmp uge i8* %y, %x
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp uge ptr %y, %x
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmp, i1 true, i1 %cmpeq
   ret i1 %r
 }
 
-define i1 @ule_swap_or_not_min_commute(i8* %x, i8* %y)  {
+define i1 @ule_swap_or_not_min_commute(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_swap_or_not_min_commute(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %cmp = icmp uge i8* %y, %x
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp uge ptr %y, %x
+  %cmpeq = icmp ne ptr %x, null
   %r = or i1 %cmpeq, %cmp
   ret i1 %r
 }
 
-define i1 @ule_swap_or_not_min_commute_logical(i8* %x, i8* %y)  {
+define i1 @ule_swap_or_not_min_commute_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_swap_or_not_min_commute_logical(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %cmp = icmp uge i8* %y, %x
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp uge ptr %y, %x
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmpeq, i1 true, i1 %cmp
   ret i1 %r
 }
@@ -188,90 +188,90 @@ define i1 @ule_swap_or_not_min_commute_logical(i8* %x, i8* %y)  {
 ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-define i1 @ule_and_min(i8* %x, i8* %y)  {
+define i1 @ule_and_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_and_min(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp ule i8* %x, %y
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp ule ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = and i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @ule_and_min_logical(i8* %x, i8* %y)  {
+define i1 @ule_and_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_and_min_logical(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp ule i8* %x, %y
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp ule ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = select i1 %cmp, i1 %cmpeq, i1 false
   ret i1 %r
 }
 
-define i1 @ule_and_min_commute(i8* %x, i8* %y)  {
+define i1 @ule_and_min_commute(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_and_min_commute(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp ule i8* %x, %y
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp ule ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = and i1 %cmpeq, %cmp
   ret i1 %r
 }
 
-define i1 @ule_and_min_commute_logical(i8* %x, i8* %y)  {
+define i1 @ule_and_min_commute_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_and_min_commute_logical(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp ule i8* %x, %y
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp ule ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = select i1 %cmpeq, i1 %cmp, i1 false
   ret i1 %r
 }
 
-define i1 @ule_swap_and_min(i8* %x, i8* %y)  {
+define i1 @ule_swap_and_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_swap_and_min(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp uge i8* %y, %x
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp uge ptr %y, %x
+  %cmpeq = icmp eq ptr %x, null
   %r = and i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @ule_swap_and_min_logical(i8* %x, i8* %y)  {
+define i1 @ule_swap_and_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_swap_and_min_logical(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp uge i8* %y, %x
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp uge ptr %y, %x
+  %cmpeq = icmp eq ptr %x, null
   %r = select i1 %cmp, i1 %cmpeq, i1 false
   ret i1 %r
 }
 
-define i1 @ule_swap_and_min_commute(i8* %x, i8* %y)  {
+define i1 @ule_swap_and_min_commute(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_swap_and_min_commute(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp uge i8* %y, %x
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp uge ptr %y, %x
+  %cmpeq = icmp eq ptr %x, null
   %r = and i1 %cmpeq, %cmp
   ret i1 %r
 }
 
-define i1 @ule_swap_and_min_commute_logical(i8* %x, i8* %y)  {
+define i1 @ule_swap_and_min_commute_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_swap_and_min_commute_logical(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp uge i8* %y, %x
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp uge ptr %y, %x
+  %cmpeq = icmp eq ptr %x, null
   %r = select i1 %cmpeq, i1 %cmp, i1 false
   ret i1 %r
 }
@@ -282,94 +282,94 @@ define i1 @ule_swap_and_min_commute_logical(i8* %x, i8* %y)  {
 ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-define i1 @ule_or_min(i8* %x, i8* %y)  {
+define i1 @ule_or_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_or_min(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ule i8* [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ule ptr [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %cmp = icmp ule i8* %x, %y
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp ule ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = or i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @ule_or_min_logical(i8* %x, i8* %y)  {
+define i1 @ule_or_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_or_min_logical(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ule i8* [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ule ptr [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %cmp = icmp ule i8* %x, %y
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp ule ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = select i1 %cmp, i1 true, i1 %cmpeq
   ret i1 %r
 }
 
-define i1 @ule_or_min_commute(i8* %x, i8* %y)  {
+define i1 @ule_or_min_commute(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_or_min_commute(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ule i8* [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ule ptr [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %cmp = icmp ule i8* %x, %y
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp ule ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = or i1 %cmpeq, %cmp
   ret i1 %r
 }
 
-define i1 @ule_or_min_commute_logical(i8* %x, i8* %y)  {
+define i1 @ule_or_min_commute_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_or_min_commute_logical(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ule i8* [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8* [[X]], null
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ule ptr [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[X]], null
 ; CHECK-NEXT:    [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %cmp = icmp ule i8* %x, %y
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp ule ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = select i1 %cmpeq, i1 true, i1 %cmp
   ret i1 %r
 }
 
-define i1 @ule_swap_or_min(i8* %x, i8* %y)  {
+define i1 @ule_swap_or_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_swap_or_min(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp uge i8* [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp uge ptr [[Y:%.*]], [[X:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %cmp = icmp uge i8* %y, %x
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp uge ptr %y, %x
+  %cmpeq = icmp eq ptr %x, null
   %r = or i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @ule_swap_or_min_logical(i8* %x, i8* %y)  {
+define i1 @ule_swap_or_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_swap_or_min_logical(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp uge i8* [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp uge ptr [[Y:%.*]], [[X:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %cmp = icmp uge i8* %y, %x
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp uge ptr %y, %x
+  %cmpeq = icmp eq ptr %x, null
   %r = select i1 %cmp, i1 true, i1 %cmpeq
   ret i1 %r
 }
 
-define i1 @ule_swap_or_min_commute(i8* %x, i8* %y)  {
+define i1 @ule_swap_or_min_commute(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_swap_or_min_commute(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp uge i8* [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp uge ptr [[Y:%.*]], [[X:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %cmp = icmp uge i8* %y, %x
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp uge ptr %y, %x
+  %cmpeq = icmp eq ptr %x, null
   %r = or i1 %cmpeq, %cmp
   ret i1 %r
 }
 
-define i1 @ule_swap_or_min_commute_logical(i8* %x, i8* %y)  {
+define i1 @ule_swap_or_min_commute_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ule_swap_or_min_commute_logical(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp uge i8* [[Y:%.*]], [[X:%.*]]
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8* [[X]], null
+; CHECK-NEXT:    [[CMP:%.*]] = icmp uge ptr [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[X]], null
 ; CHECK-NEXT:    [[R:%.*]] = select i1 [[CMPEQ]], i1 true, i1 [[CMP]]
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %cmp = icmp uge i8* %y, %x
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp uge ptr %y, %x
+  %cmpeq = icmp eq ptr %x, null
   %r = select i1 %cmpeq, i1 true, i1 %cmp
   ret i1 %r
 }
@@ -380,94 +380,94 @@ define i1 @ule_swap_or_min_commute_logical(i8* %x, i8* %y)  {
 ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-define i1 @ugt_and_not_min(i8* %x, i8* %y)  {
+define i1 @ugt_and_not_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_and_not_min(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i8* [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt ptr [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %cmp = icmp ugt i8* %x, %y
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp ugt ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = and i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @ugt_and_not_min_logical(i8* %x, i8* %y)  {
+define i1 @ugt_and_not_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_and_not_min_logical(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i8* [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt ptr [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %cmp = icmp ugt i8* %x, %y
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp ugt ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmp, i1 %cmpeq, i1 false
   ret i1 %r
 }
 
-define i1 @ugt_and_not_min_commute(i8* %x, i8* %y)  {
+define i1 @ugt_and_not_min_commute(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_and_not_min_commute(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i8* [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt ptr [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %cmp = icmp ugt i8* %x, %y
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp ugt ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = and i1 %cmpeq, %cmp
   ret i1 %r
 }
 
-define i1 @ugt_and_not_min_commute_logical(i8* %x, i8* %y)  {
+define i1 @ugt_and_not_min_commute_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_and_not_min_commute_logical(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i8* [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8* [[X]], null
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt ptr [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X]], null
 ; CHECK-NEXT:    [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %cmp = icmp ugt i8* %x, %y
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp ugt ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmpeq, i1 %cmp, i1 false
   ret i1 %r
 }
 
-define i1 @ugt_swap_and_not_min(i8* %x, i8* %y)  {
+define i1 @ugt_swap_and_not_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_swap_and_not_min(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8* [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[Y:%.*]], [[X:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %cmp = icmp ult i8* %y, %x
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp ult ptr %y, %x
+  %cmpeq = icmp ne ptr %x, null
   %r = and i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @ugt_swap_and_not_min_logical(i8* %x, i8* %y)  {
+define i1 @ugt_swap_and_not_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_swap_and_not_min_logical(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8* [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[Y:%.*]], [[X:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %cmp = icmp ult i8* %y, %x
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp ult ptr %y, %x
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmp, i1 %cmpeq, i1 false
   ret i1 %r
 }
 
-define i1 @ugt_swap_and_not_min_commute(i8* %x, i8* %y)  {
+define i1 @ugt_swap_and_not_min_commute(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_swap_and_not_min_commute(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8* [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[Y:%.*]], [[X:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %cmp = icmp ult i8* %y, %x
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp ult ptr %y, %x
+  %cmpeq = icmp ne ptr %x, null
   %r = and i1 %cmpeq, %cmp
   ret i1 %r
 }
 
-define i1 @ugt_swap_and_not_min_commute_logical(i8* %x, i8* %y)  {
+define i1 @ugt_swap_and_not_min_commute_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_swap_and_not_min_commute_logical(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8* [[Y:%.*]], [[X:%.*]]
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8* [[X]], null
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[Y:%.*]], [[X:%.*]]
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X]], null
 ; CHECK-NEXT:    [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %cmp = icmp ult i8* %y, %x
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp ult ptr %y, %x
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmpeq, i1 %cmp, i1 false
   ret i1 %r
 }
@@ -478,246 +478,246 @@ define i1 @ugt_swap_and_not_min_commute_logical(i8* %x, i8* %y)  {
 ;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-define i1 @ugt_or_not_min(i8* %x, i8* %y)  {
+define i1 @ugt_or_not_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_or_not_min(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp ugt i8* %x, %y
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp ugt ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = or i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @ugt_or_not_min_logical(i8* %x, i8* %y)  {
+define i1 @ugt_or_not_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_or_not_min_logical(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp ugt i8* %x, %y
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp ugt ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmp, i1 true, i1 %cmpeq
   ret i1 %r
 }
 
-define i1 @ugt_or_not_min_commute(i8* %x, i8* %y)  {
+define i1 @ugt_or_not_min_commute(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_or_not_min_commute(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp ugt i8* %x, %y
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp ugt ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = or i1 %cmpeq, %cmp
   ret i1 %r
 }
 
-define i1 @ugt_or_not_min_commute_logical(i8* %x, i8* %y)  {
+define i1 @ugt_or_not_min_commute_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_or_not_min_commute_logical(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp ugt i8* %x, %y
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp ugt ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmpeq, i1 true, i1 %cmp
   ret i1 %r
 }
 
-define i1 @ugt_swap_or_not_min(i8* %x, i8* %y)  {
+define i1 @ugt_swap_or_not_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_swap_or_not_min(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp ult i8* %y, %x
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp ult ptr %y, %x
+  %cmpeq = icmp ne ptr %x, null
   %r = or i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @ugt_swap_or_not_min_logical(i8* %x, i8* %y)  {
+define i1 @ugt_swap_or_not_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_swap_or_not_min_logical(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp ult i8* %y, %x
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp ult ptr %y, %x
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmp, i1 true, i1 %cmpeq
   ret i1 %r
 }
 
-define i1 @ugt_swap_or_not_min_commute(i823* %x, i823* %y)  {
+define i1 @ugt_swap_or_not_min_commute(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_swap_or_not_min_commute(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i823* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp ult i823* %y, %x
-  %cmpeq = icmp ne i823* %x, null
+  %cmp = icmp ult ptr %y, %x
+  %cmpeq = icmp ne ptr %x, null
   %r = or i1 %cmpeq, %cmp
   ret i1 %r
 }
 
-define i1 @ugt_swap_or_not_min_commute_logical(i823* %x, i823* %y)  {
+define i1 @ugt_swap_or_not_min_commute_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @ugt_swap_or_not_min_commute_logical(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i823* [[X:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CMPEQ]]
 ;
-  %cmp = icmp ult i823* %y, %x
-  %cmpeq = icmp ne i823* %x, null
+  %cmp = icmp ult ptr %y, %x
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmpeq, i1 true, i1 %cmp
   ret i1 %r
 }
 
-define i1 @sgt_and_min(i9* %x, i9* %y)  {
+define i1 @sgt_and_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @sgt_and_min(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i9* [[X:%.*]], null
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt i9* [[Y:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[X:%.*]], null
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt ptr [[Y:%.*]], null
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i1 [[CMPEQ]], [[TMP1]]
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
-  %cmp = icmp sgt i9* %x, %y
-  %cmpeq = icmp eq i9* %x, null
+  %cmp = icmp sgt ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = and i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @sgt_and_min_logical(i9* %x, i9* %y)  {
+define i1 @sgt_and_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @sgt_and_min_logical(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i9* [[X:%.*]], null
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt i9* [[Y:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[X:%.*]], null
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt ptr [[Y:%.*]], null
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i1 [[CMPEQ]], [[TMP1]]
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
-  %cmp = icmp sgt i9* %x, %y
-  %cmpeq = icmp eq i9* %x, null
+  %cmp = icmp sgt ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = select i1 %cmp, i1 %cmpeq, i1 false
   ret i1 %r
 }
 
-define i1 @sle_or_not_min(i427* %x, i427* %y)  {
+define i1 @sle_or_not_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @sle_or_not_min(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i427* [[X:%.*]], null
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp sge i427* [[Y:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X:%.*]], null
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp sge ptr [[Y:%.*]], null
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i1 [[CMPEQ]], [[TMP1]]
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
-  %cmp = icmp sle i427* %x, %y
-  %cmpeq = icmp ne i427* %x, null
+  %cmp = icmp sle ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = or i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @sle_or_not_min_logical(i427* %x, i427* %y)  {
+define i1 @sle_or_not_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @sle_or_not_min_logical(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i427* [[X:%.*]], null
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp sge i427* [[Y:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X:%.*]], null
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp sge ptr [[Y:%.*]], null
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i1 [[CMPEQ]], [[TMP1]]
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
-  %cmp = icmp sle i427* %x, %y
-  %cmpeq = icmp ne i427* %x, null
+  %cmp = icmp sle ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmp, i1 true, i1 %cmpeq
   ret i1 %r
 }
 
-define i1 @sle_and_min(i8* %x, i8* %y)  {
+define i1 @sle_and_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @sle_and_min(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8* [[X:%.*]], null
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp sge i8* [[Y:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[X:%.*]], null
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp sge ptr [[Y:%.*]], null
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i1 [[CMPEQ]], [[TMP1]]
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
-  %cmp = icmp sle i8* %x, %y
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp sle ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = and i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @sle_and_min_logical(i8* %x, i8* %y)  {
+define i1 @sle_and_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @sle_and_min_logical(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8* [[X:%.*]], null
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp sge i8* [[Y:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[X:%.*]], null
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp sge ptr [[Y:%.*]], null
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i1 [[CMPEQ]], [[TMP1]]
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
-  %cmp = icmp sle i8* %x, %y
-  %cmpeq = icmp eq i8* %x, null
+  %cmp = icmp sle ptr %x, %y
+  %cmpeq = icmp eq ptr %x, null
   %r = select i1 %cmp, i1 %cmpeq, i1 false
   ret i1 %r
 }
 
-define i1 @sgt_and_not_min(i8* %x, i8* %y)  {
+define i1 @sgt_and_not_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @sgt_and_not_min(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8* [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8* [[X]], null
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt ptr [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X]], null
 ; CHECK-NEXT:    [[R:%.*]] = and i1 [[CMP]], [[CMPEQ]]
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %cmp = icmp sgt i8* %x, %y
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp sgt ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = and i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @sgt_and_not_min_logical(i8* %x, i8* %y)  {
+define i1 @sgt_and_not_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @sgt_and_not_min_logical(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8* [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8* [[X]], null
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt ptr [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X]], null
 ; CHECK-NEXT:    [[R:%.*]] = and i1 [[CMP]], [[CMPEQ]]
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %cmp = icmp sgt i8* %x, %y
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp sgt ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmp, i1 %cmpeq, i1 false
   ret i1 %r
 }
 
-define i1 @sgt_or_not_min(i8* %x, i8* %y)  {
+define i1 @sgt_or_not_min(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @sgt_or_not_min(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8* [[X:%.*]], null
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt i8* [[Y:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X:%.*]], null
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt ptr [[Y:%.*]], null
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i1 [[CMPEQ]], [[TMP1]]
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
-  %cmp = icmp sgt i8* %x, %y
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp sgt ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = or i1 %cmp, %cmpeq
   ret i1 %r
 }
 
-define i1 @sgt_or_not_min_logical(i8* %x, i8* %y)  {
+define i1 @sgt_or_not_min_logical(ptr %x, ptr %y)  {
 ; CHECK-LABEL: @sgt_or_not_min_logical(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8* [[X:%.*]], null
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt i8* [[Y:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne ptr [[X:%.*]], null
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt ptr [[Y:%.*]], null
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i1 [[CMPEQ]], [[TMP1]]
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
-  %cmp = icmp sgt i8* %x, %y
-  %cmpeq = icmp ne i8* %x, null
+  %cmp = icmp sgt ptr %x, %y
+  %cmpeq = icmp ne ptr %x, null
   %r = select i1 %cmp, i1 true, i1 %cmpeq
   ret i1 %r
 }
 
-define i1 @slt_and_min(i8* %a, i8* %b) {
+define i1 @slt_and_min(ptr %a, ptr %b) {
 ; CHECK-LABEL: @slt_and_min(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8* [[A:%.*]], null
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp sgt i8* [[B:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[A:%.*]], null
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp sgt ptr [[B:%.*]], null
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i1 [[CMPEQ]], [[TMP1]]
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
-  %cmpeq = icmp eq i8* %a, null
-  %cmp = icmp slt i8* %a, %b
+  %cmpeq = icmp eq ptr %a, null
+  %cmp = icmp slt ptr %a, %b
   %r = and i1 %cmpeq, %cmp
   ret i1 %r
 }
 
-define i1 @slt_and_min_logical(i8* %a, i8* %b) {
+define i1 @slt_and_min_logical(ptr %a, ptr %b) {
 ; CHECK-LABEL: @slt_and_min_logical(
-; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8* [[A:%.*]], null
-; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8* [[B:%.*]], null
+; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq ptr [[A:%.*]], null
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt ptr [[B:%.*]], null
 ; CHECK-NEXT:    [[R:%.*]] = select i1 [[CMPEQ]], i1 [[CMP]], i1 false
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %cmpeq = icmp eq i8* %a, null
-  %cmp = icmp slt i8* %a, %b
+  %cmpeq = icmp eq ptr %a, null
+  %cmp = icmp slt ptr %a, %b
   %r = select i1 %cmpeq, i1 %cmp, i1 false
   ret i1 %r
 }
index 3dc35b82a7eb2127cae5a15eeda3d28593e4eb98..7079922f3d9fabf37f61fbc121bedb4aac89876a 100644 (file)
@@ -365,7 +365,7 @@ define <2 x i1> @and_ne_with_diff_one_splatvec(<2 x i32> %x) {
 define void @simplify_before_foldAndOfICmps() {
 ; CHECK-LABEL: @simplify_before_foldAndOfICmps(
 ; CHECK-NEXT:    [[A8:%.*]] = alloca i16, align 2
-; CHECK-NEXT:    [[L7:%.*]] = load i16, i16* [[A8]], align 2
+; CHECK-NEXT:    [[L7:%.*]] = load i16, ptr [[A8]], align 2
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i16 [[L7]], -1
 ; CHECK-NEXT:    [[B11:%.*]] = zext i1 [[TMP1]] to i16
 ; CHECK-NEXT:    [[C10:%.*]] = icmp ugt i16 [[L7]], [[B11]]
@@ -378,21 +378,21 @@ define void @simplify_before_foldAndOfICmps() {
 ; CHECK-NEXT:    [[TMP3:%.*]] = xor i1 [[C10]], true
 ; CHECK-NEXT:    [[C18:%.*]] = or i1 [[C7]], [[TMP3]]
 ; CHECK-NEXT:    [[TMP4:%.*]] = sext i1 [[C3]] to i64
-; CHECK-NEXT:    [[G26:%.*]] = getelementptr i1, i1* null, i64 [[TMP4]]
-; CHECK-NEXT:    store i16 [[L7]], i16* undef, align 2
-; CHECK-NEXT:    store i1 [[C18]], i1* undef, align 1
-; CHECK-NEXT:    store i1* [[G26]], i1** undef, align 8
+; CHECK-NEXT:    [[G26:%.*]] = getelementptr i1, ptr null, i64 [[TMP4]]
+; CHECK-NEXT:    store i16 [[L7]], ptr undef, align 2
+; CHECK-NEXT:    store i1 [[C18]], ptr undef, align 1
+; CHECK-NEXT:    store ptr [[G26]], ptr undef, align 8
 ; CHECK-NEXT:    ret void
 ;
   %A8 = alloca i16
-  %L7 = load i16, i16* %A8
-  %G21 = getelementptr i16, i16* %A8, i8 -1
+  %L7 = load i16, ptr %A8
+  %G21 = getelementptr i16, ptr %A8, i8 -1
   %B11 = udiv i16 %L7, -1
-  %G4 = getelementptr i16, i16* %A8, i16 %B11
-  %L2 = load i16, i16* %G4
-  %L = load i16, i16* %G4
+  %G4 = getelementptr i16, ptr %A8, i16 %B11
+  %L2 = load i16, ptr %G4
+  %L = load i16, ptr %G4
   %B23 = mul i16 %B11, %B11
-  %L4 = load i16, i16* %A8
+  %L4 = load i16, ptr %A8
   %B21 = sdiv i16 %L7, %L4
   %B7 = sub i16 0, %B21
   %B18 = mul i16 %B23, %B7
@@ -409,12 +409,12 @@ define void @simplify_before_foldAndOfICmps() {
   %B33 = or i16 %B29, %L4
   %C13 = icmp uge i1 %C5, %B1
   %C3 = icmp ult i1 %C13, %C6
-  store i16 undef, i16* %G21
+  store i16 undef, ptr %G21
   %C18 = icmp ule i1 %C10, %C7
-  %G26 = getelementptr i1, i1* null, i1 %C3
-  store i16 %B33, i16* undef
-  store i1 %C18, i1* undef
-  store i1* %G26, i1** undef
+  %G26 = getelementptr i1, ptr null, i1 %C3
+  store i16 %B33, ptr undef
+  store i1 %C18, ptr undef
+  store ptr %G26, ptr undef
   ret void
 }
 
index 7da7f6089c3408786dd2c1141a7eb3ffca5b9a89..52721e03c17c0a685570ae01dc436819025e5c98 100644 (file)
@@ -107,16 +107,16 @@ define i32 @and_xor_not_common_op(i32 %a, i32 %b) {
 
 ; a & (a ^ ~b) --> a & b
 
-define i32 @and_xor_not_common_op_extrause(i32 %a, i32 %b, i32* %dst) {
+define i32 @and_xor_not_common_op_extrause(i32 %a, i32 %b, ptr %dst) {
 ; CHECK-LABEL: define {{[^@]+}}@and_xor_not_common_op_extrause
-; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], i32* [[DST:%.*]]) {
+; CHECK-SAME: (i32 [[A:%.*]], i32 [[B:%.*]], ptr [[DST:%.*]]) {
 ; CHECK-NEXT:    [[B2:%.*]] = xor i32 [[B]], -1
-; CHECK-NEXT:    store i32 [[B2]], i32* [[DST]], align 4
+; CHECK-NEXT:    store i32 [[B2]], ptr [[DST]], align 4
 ; CHECK-NEXT:    [[T4:%.*]] = and i32 [[A]], [[B]]
 ; CHECK-NEXT:    ret i32 [[T4]]
 ;
   %b2 = xor i32 %b, -1
-  store i32 %b2, i32* %dst
+  store i32 %b2, ptr %dst
   %t2 = xor i32 %a, %b2
   %t4 = and i32 %t2, %a
   ret i32 %t4
index c5e3b96a79d3951310526b2f9b472c99a1fcdde6..7865d2be5f7a3104d814e8b878d04a0877cf6344 100644 (file)
@@ -132,17 +132,17 @@ define i32 @test10(i32 %A) {
   ret i32 %D
 }
 
-define i32 @test11(i32 %A, i32* %P) {
+define i32 @test11(i32 %A, ptr %P) {
 ; CHECK-LABEL: @test11(
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[A:%.*]], -4
 ; CHECK-NEXT:    [[C:%.*]] = xor i32 [[TMP1]], 15
-; CHECK-NEXT:    store i32 [[C]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[C]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i32 3
 ;
   %B = or i32 %A, 3
   %C = xor i32 %B, 12
   ; additional use of C
-  store i32 %C, i32* %P
+  store i32 %C, ptr %P
   ; %C = and uint %B, 3 --> 3
   %D = and i32 %C, 3
   ret i32 %D
@@ -416,15 +416,15 @@ define i32 @ashr_lowmask_use(i32 %x) {
   ret i32 %r
 }
 
-define <2 x i8> @ashr_lowmask_use_splat(<2 x i8> %x, <2 x i8>* %p) {
+define <2 x i8> @ashr_lowmask_use_splat(<2 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @ashr_lowmask_use_splat(
 ; CHECK-NEXT:    [[A:%.*]] = ashr <2 x i8> [[X:%.*]], <i8 7, i8 7>
-; CHECK-NEXT:    store <2 x i8> [[A]], <2 x i8>* [[P:%.*]], align 2
+; CHECK-NEXT:    store <2 x i8> [[A]], ptr [[P:%.*]], align 2
 ; CHECK-NEXT:    [[R:%.*]] = lshr <2 x i8> [[X]], <i8 7, i8 7>
 ; CHECK-NEXT:    ret <2 x i8> [[R]]
 ;
   %a = ashr <2 x i8> %x, <i8 7, i8 7>
-  store <2 x i8> %a, <2 x i8>* %p
+  store <2 x i8> %a, ptr %p
   %r = and <2 x i8> %a, <i8 1, i8 1>
   ret <2 x i8> %r
 }
@@ -1437,17 +1437,17 @@ define i32 @not_lowmask_sext_in_reg2(i32 %x) {
   ret i32 %and
 }
 
-define <2 x i32> @lowmask_sext_in_reg_splat(<2 x i32> %x, <2 x i32>* %p) {
+define <2 x i32> @lowmask_sext_in_reg_splat(<2 x i32> %x, ptr %p) {
 ; CHECK-LABEL: @lowmask_sext_in_reg_splat(
 ; CHECK-NEXT:    [[L:%.*]] = shl <2 x i32> [[X:%.*]], <i32 20, i32 20>
 ; CHECK-NEXT:    [[R:%.*]] = ashr exact <2 x i32> [[L]], <i32 20, i32 20>
-; CHECK-NEXT:    store <2 x i32> [[R]], <2 x i32>* [[P:%.*]], align 8
+; CHECK-NEXT:    store <2 x i32> [[R]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[AND:%.*]] = and <2 x i32> [[X]], <i32 4095, i32 4095>
 ; CHECK-NEXT:    ret <2 x i32> [[AND]]
 ;
   %l = shl <2 x i32> %x, <i32 20, i32 20>
   %r = ashr <2 x i32> %l, <i32 20, i32 20>
-  store <2 x i32> %r, <2 x i32>* %p
+  store <2 x i32> %r, ptr %p
   %and = and <2 x i32> %r, <i32 4095, i32 4095>
   ret <2 x i32> %and
 }
@@ -1488,15 +1488,15 @@ define i8 @lowmask_add_2_uses(i8 %x) {
   ret i8 %r
 }
 
-define <2 x i8> @lowmask_add_2_splat(<2 x i8> %x, <2 x i8>* %p) {
+define <2 x i8> @lowmask_add_2_splat(<2 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @lowmask_add_2_splat(
 ; CHECK-NEXT:    [[A:%.*]] = add <2 x i8> [[X:%.*]], <i8 -64, i8 -64>
-; CHECK-NEXT:    store <2 x i8> [[A]], <2 x i8>* [[P:%.*]], align 2
+; CHECK-NEXT:    store <2 x i8> [[A]], ptr [[P:%.*]], align 2
 ; CHECK-NEXT:    [[R:%.*]] = and <2 x i8> [[X]], <i8 63, i8 63>
 ; CHECK-NEXT:    ret <2 x i8> [[R]]
 ;
   %a = add <2 x i8> %x, <i8 -64, i8 -64> ; 0xc0
-  store <2 x i8> %a, <2 x i8>* %p
+  store <2 x i8> %a, ptr %p
   %r = and <2 x i8> %a, <i8 63, i8 63> ; 0x3f
   ret <2 x i8> %r
 }
@@ -1531,41 +1531,41 @@ define i8 @not_lowmask_add2(i8 %x) {
   ret i8 %r
 }
 
-define <2 x i8> @lowmask_add_splat(<2 x i8> %x, <2 x i8>* %p) {
+define <2 x i8> @lowmask_add_splat(<2 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @lowmask_add_splat(
 ; CHECK-NEXT:    [[A:%.*]] = add <2 x i8> [[X:%.*]], <i8 -64, i8 -64>
-; CHECK-NEXT:    store <2 x i8> [[A]], <2 x i8>* [[P:%.*]], align 2
+; CHECK-NEXT:    store <2 x i8> [[A]], ptr [[P:%.*]], align 2
 ; CHECK-NEXT:    [[R:%.*]] = and <2 x i8> [[X]], <i8 32, i8 32>
 ; CHECK-NEXT:    ret <2 x i8> [[R]]
 ;
   %a = add <2 x i8> %x, <i8 -64, i8 -64> ; 0xc0
-  store <2 x i8> %a, <2 x i8>* %p
+  store <2 x i8> %a, ptr %p
   %r = and <2 x i8> %a, <i8 32, i8 32> ; 0x20
   ret <2 x i8> %r
 }
 
-define <2 x i8> @lowmask_add_splat_undef(<2 x i8> %x, <2 x i8>* %p) {
+define <2 x i8> @lowmask_add_splat_undef(<2 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @lowmask_add_splat_undef(
 ; CHECK-NEXT:    [[A:%.*]] = add <2 x i8> [[X:%.*]], <i8 -64, i8 undef>
-; CHECK-NEXT:    store <2 x i8> [[A]], <2 x i8>* [[P:%.*]], align 2
+; CHECK-NEXT:    store <2 x i8> [[A]], ptr [[P:%.*]], align 2
 ; CHECK-NEXT:    [[R:%.*]] = and <2 x i8> [[A]], <i8 undef, i8 32>
 ; CHECK-NEXT:    ret <2 x i8> [[R]]
 ;
   %a = add <2 x i8> %x, <i8 -64, i8 undef> ; 0xc0
-  store <2 x i8> %a, <2 x i8>* %p
+  store <2 x i8> %a, ptr %p
   %r = and <2 x i8> %a, <i8 undef, i8 32> ; 0x20
   ret <2 x i8> %r
 }
 
-define <2 x i8> @lowmask_add_vec(<2 x i8> %x, <2 x i8>* %p) {
+define <2 x i8> @lowmask_add_vec(<2 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @lowmask_add_vec(
 ; CHECK-NEXT:    [[A:%.*]] = add <2 x i8> [[X:%.*]], <i8 -96, i8 -64>
-; CHECK-NEXT:    store <2 x i8> [[A]], <2 x i8>* [[P:%.*]], align 2
+; CHECK-NEXT:    store <2 x i8> [[A]], ptr [[P:%.*]], align 2
 ; CHECK-NEXT:    [[R:%.*]] = and <2 x i8> [[A]], <i8 16, i8 32>
 ; CHECK-NEXT:    ret <2 x i8> [[R]]
 ;
   %a = add <2 x i8> %x, <i8 -96, i8 -64> ; 0xe0, 0xc0
-  store <2 x i8> %a, <2 x i8>* %p
+  store <2 x i8> %a, ptr %p
   %r = and <2 x i8> %a, <i8 16, i8 32> ; 0x10, 0x20
   ret <2 x i8> %r
 }
index 88b5860693b6c2843a3fbc550bd16ec3423fd9af..eaa8fb5493de644f52c5089f3994e2e253719d33 100644 (file)
@@ -6,20 +6,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"
 
-declare i32 @llvm.annotation.i32(i32, i8*, i8*, i32) #1
+declare i32 @llvm.annotation.i32(i32, ptr, ptr, i32) #1
 
-define dso_local i32 @annotated(i32* %c) local_unnamed_addr #0 {
+define dso_local i32 @annotated(ptr %c) local_unnamed_addr #0 {
 ; CHECK-LABEL: @annotated(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* [[C:%.*]], align 4
-; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.annotation.i32(i32 [[TMP0]], i8* undef, i8* undef, i32 undef)
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[C:%.*]], align 4
+; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.annotation.i32(i32 [[TMP0]], ptr undef, ptr undef, i32 undef)
 ; CHECK-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP1]], [[TMP0]]
 ; CHECK-NEXT:    ret i32 [[ADD]]
 ;
 entry:
-  %0 = load i32, i32* %c, align 4
-  %1 = call i32 @llvm.annotation.i32(i32 %0, i8* undef, i8* undef, i32 undef)
-  %2 = load i32, i32* %c, align 4
+  %0 = load i32, ptr %c, align 4
+  %1 = call i32 @llvm.annotation.i32(i32 %0, ptr undef, ptr undef, i32 undef)
+  %2 = load i32, ptr %c, align 4
   %add = add nsw i32 %1, %2
   ret i32 %add
 }
index fc2d4777bf72b675236679ecd5d804631a96a6db..a96da3cf48c0ca00cbcdf153284023e912adb953 100644 (file)
@@ -5,28 +5,24 @@
 
 ; Make sure !annotation metadata is added to new instructions, if the source
 ; instruction has !annotation metadata.
-define i1 @fold_to_new_instruction(i8* %a, i8* %b) {
+define i1 @fold_to_new_instruction(ptr %a, ptr %b) {
 ; CHECK-LABEL: define {{.+}} @fold_to_new_instruction({{.+}}
-; CHECK-NEXT:    [[C:%.*]] = icmp uge i8* [[A:%.*]], [[B:%[a-z]*]], !annotation [[ANN:![0-9]+]]
+; CHECK-NEXT:    [[C:%.*]] = icmp uge ptr [[A:%.*]], [[B:%[a-z]*]], !annotation [[ANN:![0-9]+]]
 ; CHECK-NEXT:    ret i1 [[C]]
 ;
-  %a.c = bitcast i8* %a to i32*, !annotation !0
-  %b.c = bitcast i8* %b to i32*, !annotation !0
-  %c = icmp uge i32* %a.c, %b.c, !annotation !0
+  %c = icmp uge ptr %a, %b, !annotation !0
   ret i1 %c
 }
 
 ; Make sure !annotation is not added to new instructions if the source
 ; instruction does not have it (even if some folded operands do have
 ; !annotation).
-define i1 @fold_to_new_instruction2(i8* %a, i8* %b) {
+define i1 @fold_to_new_instruction2(ptr %a, ptr %b) {
 ; CHECK-LABEL: define {{.+}} @fold_to_new_instruction2({{.+}}
-; CHECK-NEXT:    [[C:%.*]] = icmp uge i8* [[A:%.*]], [[B:%[a-z]+]]
+; CHECK-NEXT:    [[C:%.*]] = icmp uge ptr [[A:%.*]], [[B:%[a-z]+]]
 ; CHECK-NEXT:    ret i1 [[C]]
 ;
-  %a.c = bitcast i8* %a to i32*, !annotation !0
-  %b.c = bitcast i8* %b to i32*, !annotation !0
-  %c = icmp uge i32* %a.c, %b.c
+  %c = icmp uge ptr %a, %b
   ret i1 %c
 }
 
@@ -45,108 +41,108 @@ define i32 @do_not_add_annotation_to_existing_instr(i32 %a, i32 %b) {
 ; memcpy can be expanded inline with load/store. Verify that we keep the
 ; !annotation metadata.
 
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i1) nounwind
+declare void @llvm.memcpy.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1) nounwind
 
-define void @copy_1_byte(i8* %d, i8* %s) {
+define void @copy_1_byte(ptr %d, ptr %s) {
 ; CHECK-LABEL: define {{.+}} @copy_1_byte({{.+}}
-; CHECK-NEXT:    [[TMP1:%.*]] = load i8, i8* [[S:%.*]], align 1, !annotation [[ANN]]
-; CHECK-NEXT:    store i8 [[TMP1]], i8* [[D:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[S:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    store i8 [[TMP1]], ptr [[D:%.*]], align 1, !annotation [[ANN]]
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %d, i8* %s, i32 1, i1 false), !annotation !0
+  call void @llvm.memcpy.p0.p0.i32(ptr %d, ptr %s, i32 1, i1 false), !annotation !0
   ret void
 }
 
-declare i8* @memcpy(i8* noalias returned, i8* noalias nocapture readonly, i64) nofree nounwind
+declare ptr @memcpy(ptr noalias returned, ptr noalias nocapture readonly, i64) nofree nounwind
 
-define void @libcallcopy_1_byte(i8* %d, i8* %s) {
+define void @libcallcopy_1_byte(ptr %d, ptr %s) {
 ; CHECK-LABEL: define {{.+}} @libcallcopy_1_byte({{.+}}
-; CHECK-NEXT:    [[TMP1:%.*]] = load i8, i8* [[S:%.*]], align 1, !annotation [[ANN]]
-; CHECK-NEXT:    store i8 [[TMP1]], i8* [[D:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[S:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    store i8 [[TMP1]], ptr [[D:%.*]], align 1, !annotation [[ANN]]
 ; CHECK-NEXT:    ret void
 ;
-  call i8* @memcpy(i8* %d, i8* %s, i64 1), !annotation !0
+  call ptr @memcpy(ptr %d, ptr %s, i64 1), !annotation !0
   ret void
 }
 
-declare i8* @__memcpy_chk(i8*, i8*, i64, i64) nofree nounwind
+declare ptr @__memcpy_chk(ptr, ptr, i64, i64) nofree nounwind
 
-define void @libcallcopy_1_byte_chk(i8* %d, i8* %s) {
+define void @libcallcopy_1_byte_chk(ptr %d, ptr %s) {
 ; CHECK-LABEL: define {{.+}} @libcallcopy_1_byte_chk({{.+}}
-; CHECK-NEXT:    [[TMP1:%.*]] = load i8, i8* [[S:%.*]], align 1, !annotation [[ANN]]
-; CHECK-NEXT:    store i8 [[TMP1]], i8* [[D:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[S:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    store i8 [[TMP1]], ptr [[D:%.*]], align 1, !annotation [[ANN]]
 ; CHECK-NEXT:    ret void
 ;
-  call i8* @__memcpy_chk(i8* %d, i8* %s, i64 1, i64 1), !annotation !0
+  call ptr @__memcpy_chk(ptr %d, ptr %s, i64 1, i64 1), !annotation !0
   ret void
 }
 
-declare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture, i8* nocapture readonly, i32, i1) nounwind
+declare void @llvm.memmove.p0.p0.i32(ptr nocapture, ptr nocapture readonly, i32, i1) nounwind
 
-define void @move_1_byte(i8* %d, i8* %s) {
+define void @move_1_byte(ptr %d, ptr %s) {
 ; CHECK-LABEL: define {{.+}} @move_1_byte({{.+}}
-; CHECK-NEXT:    [[TMP1:%.*]] = load i8, i8* [[S:%.*]], align 1, !annotation [[ANN]]
-; CHECK-NEXT:    store i8 [[TMP1]], i8* [[D:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[S:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    store i8 [[TMP1]], ptr [[D:%.*]], align 1, !annotation [[ANN]]
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.memmove.p0i8.p0i8.i32(i8* %d, i8* %s, i32 1, i1 false), !annotation !0
+  call void @llvm.memmove.p0.p0.i32(ptr %d, ptr %s, i32 1, i1 false), !annotation !0
   ret void
 }
 
-declare i8* @memmove(i8* returned, i8* nocapture readonly, i64) nofree nounwind
+declare ptr @memmove(ptr returned, ptr nocapture readonly, i64) nofree nounwind
 
-define void @libcallmove_1_byte(i8* %d, i8* %s) {
+define void @libcallmove_1_byte(ptr %d, ptr %s) {
 ; CHECK-LABEL: define {{.+}} @libcallmove_1_byte({{.+}}
-; CHECK-NEXT:    [[TMP1:%.*]] = load i8, i8* [[S:%.*]], align 1, !annotation [[ANN]]
-; CHECK-NEXT:    store i8 [[TMP1]], i8* [[D:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[S:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    store i8 [[TMP1]], ptr [[D:%.*]], align 1, !annotation [[ANN]]
 ; CHECK-NEXT:    ret void
 ;
-  call i8* @memmove(i8* %d, i8* %s, i64 1), !annotation !0
+  call ptr @memmove(ptr %d, ptr %s, i64 1), !annotation !0
   ret void
 }
 
-declare i8* @__memmove_chk(i8*, i8*, i64, i64) nofree nounwind
+declare ptr @__memmove_chk(ptr, ptr, i64, i64) nofree nounwind
 
-define void @libcallmove_1_byte_chk(i8* %d, i8* %s) {
+define void @libcallmove_1_byte_chk(ptr %d, ptr %s) {
 ; CHECK-LABEL: define {{.+}} @libcallmove_1_byte_chk({{.+}}
-; CHECK-NEXT:    [[TMP1:%.*]] = load i8, i8* [[S:%.*]], align 1, !annotation [[ANN]]
-; CHECK-NEXT:    store i8 [[TMP1]], i8* [[D:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[S:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    store i8 [[TMP1]], ptr [[D:%.*]], align 1, !annotation [[ANN]]
 ; CHECK-NEXT:    ret void
 ;
-  call i8* @__memmove_chk(i8* %d, i8* %s, i64 1, i64 1), !annotation !0
+  call ptr @__memmove_chk(ptr %d, ptr %s, i64 1, i64 1), !annotation !0
   ret void
 }
 
-declare void @llvm.memset.p0i8.i32(i8* nocapture writeonly, i8, i32, i1) argmemonly nounwind
+declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1) argmemonly nounwind
 
-define void @set_1_byte(i8* %d) {
+define void @set_1_byte(ptr %d) {
 ; CHECK-LABEL: define {{.+}} @set_1_byte({{.+}}
-; CHECK-NEXT:    store i8 1, i8* [[D:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    store i8 1, ptr [[D:%.*]], align 1, !annotation [[ANN]]
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.memset.p0i8.i32(i8* %d, i8 1, i32 1, i1 false), !annotation !0
+  call void @llvm.memset.p0.i32(ptr %d, i8 1, i32 1, i1 false), !annotation !0
   ret void
 }
 
-declare i8* @memset(i8*, i32, i64) nofree
+declare ptr @memset(ptr, i32, i64) nofree
 
-define void @libcall_set_1_byte(i8* %d) {
+define void @libcall_set_1_byte(ptr %d) {
 ; CHECK-LABEL: define {{.+}} @libcall_set_1_byte({{.+}}
-; CHECK-NEXT:    store i8 1, i8* [[D:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    store i8 1, ptr [[D:%.*]], align 1, !annotation [[ANN]]
 ; CHECK-NEXT:    ret void
 ;
-  call i8* @memset(i8* %d, i32 1, i64 1), !annotation !0
+  call ptr @memset(ptr %d, i32 1, i64 1), !annotation !0
   ret void
 }
 
-declare i8* @__memset_chk(i8*, i32, i64, i64) nofree
+declare ptr @__memset_chk(ptr, i32, i64, i64) nofree
 
-define void @libcall_set_1_byte_chk(i8* %d) {
+define void @libcall_set_1_byte_chk(ptr %d) {
 ; CHECK-LABEL: define {{.+}} @libcall_set_1_byte_chk({{.+}}
-; CHECK-NEXT:    store i8 1, i8* [[D:%.*]], align 1, !annotation [[ANN]]
+; CHECK-NEXT:    store i8 1, ptr [[D:%.*]], align 1, !annotation [[ANN]]
 ; CHECK-NEXT:    ret void
 ;
-  call i8* @__memset_chk(i8* %d, i32 1, i64 1, i64 1), !annotation !0
+  call ptr @__memset_chk(ptr %d, i32 1, i64 1, i64 1), !annotation !0
   ret void
 }
 
index 793b25e548280c5336bf4372ce7aeaae8bf8a640..c5f2087ee02fd9b0ed626a660c8ce23e1f8c437e 100644 (file)
@@ -40,16 +40,16 @@ define i1 @test4(i37 %x) {
   ret i1 %B
 }
 
-define i7 @test5(i7 %A, i7* %P) {
+define i7 @test5(i7 %A, ptr %P) {
 ; CHECK-LABEL: @test5(
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i7 [[A:%.*]], -4
 ; CHECK-NEXT:    [[C:%.*]] = xor i7 [[TMP1]], 15
-; CHECK-NEXT:    store i7 [[C]], i7* [[P:%.*]], align 1
+; CHECK-NEXT:    store i7 [[C]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret i7 3
 ;
   %B = or i7 %A, 3
   %C = xor i7 %B, 12
-  store i7 %C, i7* %P
+  store i7 %C, ptr %P
   %r = and i7 %C, 3
   ret i7 %r
 }
@@ -101,16 +101,16 @@ define i1 @test11(i737 %x) {
   ret i1 %B
 }
 
-define i117 @test12(i117 %A, i117* %P) {
+define i117 @test12(i117 %A, ptr %P) {
 ; CHECK-LABEL: @test12(
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i117 [[A:%.*]], -4
 ; CHECK-NEXT:    [[C:%.*]] = xor i117 [[TMP1]], 15
-; CHECK-NEXT:    store i117 [[C]], i117* [[P:%.*]], align 4
+; CHECK-NEXT:    store i117 [[C]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i117 3
 ;
   %B = or i117 %A, 3
   %C = xor i117 %B, 12
-  store i117 %C, i117* %P
+  store i117 %C, ptr %P
   %r = and i117 %C, 3
   ret i117 %r
 }
index 6eaefa04ea7becbfd506224d4ac99778a1b891b4..d4917621335498a3cddb5337fbcf9709a3d31395 100644 (file)
@@ -5,28 +5,28 @@ target datalayout = "e-p:32:32"
 target triple = "i686-pc-linux-gnu"
 
 declare i32 @main2()
-declare i7* @ctime2(i999*)
+declare ptr @ctime2(ptr)
 
-define i7* @ctime(i999*) {
+define ptr @ctime(ptr) {
 ; CHECK-LABEL: @ctime(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[I0:%.*]] = call i32 @main2()
-; CHECK-NEXT:    [[TMP1:%.*]] = inttoptr i32 [[I0]] to i7*
-; CHECK-NEXT:    ret i7* [[TMP1]]
+; CHECK-NEXT:    [[TMP1:%.*]] = inttoptr i32 [[I0]] to ptr
+; CHECK-NEXT:    ret ptr [[TMP1]]
 ;
 entry:
-  %i0 = call i7* bitcast (i32 ()* @main2 to i7* ()*)( )
-  ret i7* %i0
+  %i0 = call ptr @main2( )
+  ret ptr %i0
 }
 
 define i32 @main() {
 ; CHECK-LABEL: @main(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[I1:%.*]] = call i7* @ctime2(i999* null)
-; CHECK-NEXT:    [[TMP0:%.*]] = ptrtoint i7* [[I1]] to i32
+; CHECK-NEXT:    [[I1:%.*]] = call ptr @ctime2(ptr null)
+; CHECK-NEXT:    [[TMP0:%.*]] = ptrtoint ptr [[I1]] to i32
 ; CHECK-NEXT:    ret i32 [[TMP0]]
 ;
 entry:
-  %i1 = call i32 bitcast (i7* (i999*)* @ctime2 to i32 (i99*)*)( i99* null )
+  %i1 = call i32 @ctime2( ptr null )
   ret i32 %i1
 }
index 98948a64dd6f27e7b2b7eb86399392b8cb88a943..6b5a1c8eb8fe097588aa197fb2dde31a7991266c 100644 (file)
@@ -565,7 +565,7 @@ define i40 @test26(i40 %A) {
 define i177 @ossfuzz_9880(i177 %X) {
 ; CHECK-LABEL: @ossfuzz_9880(
 ; CHECK-NEXT:    [[A:%.*]] = alloca i177, align 8
-; CHECK-NEXT:    [[L1:%.*]] = load i177, i177* [[A]], align 8
+; CHECK-NEXT:    [[L1:%.*]] = load i177, ptr [[A]], align 8
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i177 [[L1]], -1
 ; CHECK-NEXT:    [[B5_NEG:%.*]] = sext i1 [[TMP1]] to i177
 ; CHECK-NEXT:    [[B14:%.*]] = add i177 [[L1]], [[B5_NEG]]
@@ -574,7 +574,7 @@ define i177 @ossfuzz_9880(i177 %X) {
 ; CHECK-NEXT:    ret i177 [[B1]]
 ;
   %A = alloca i177
-  %L1 = load i177, i177* %A
+  %L1 = load i177, ptr %A
   %B = or i177 0, -1
   %B5 = udiv i177 %L1, %B
   %B4 = add i177 %B5, %B
index d14258fa04829652b961832a27b7314afb4640fd..870847921f02539aa79adc1e3f1721692946241a 100644 (file)
@@ -474,15 +474,15 @@ define i32 @lshr_sub(i32 %x, i32 %y) {
 
 ; negative test - one-use
 
-define i32 @lshr_sub_nsw_extra_use(i32 %x, i32 %y, i32* %p) {
+define i32 @lshr_sub_nsw_extra_use(i32 %x, i32 %y, ptr %p) {
 ; CHECK-LABEL: @lshr_sub_nsw_extra_use(
 ; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    store i32 [[SUB]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[SUB]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[SHR:%.*]] = lshr i32 [[SUB]], 31
 ; CHECK-NEXT:    ret i32 [[SHR]]
 ;
   %sub = sub nsw i32 %x, %y
-  store i32 %sub, i32* %p
+  store i32 %sub, ptr %p
   %shr = lshr i32 %sub, 31
   ret i32 %shr
 }
@@ -548,15 +548,15 @@ define i32 @ashr_sub(i32 %x, i32 %y) {
 
 ; negative test - one-use
 
-define i32 @ashr_sub_nsw_extra_use(i32 %x, i32 %y, i32* %p) {
+define i32 @ashr_sub_nsw_extra_use(i32 %x, i32 %y, ptr %p) {
 ; CHECK-LABEL: @ashr_sub_nsw_extra_use(
 ; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    store i32 [[SUB]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[SUB]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[SHR:%.*]] = ashr i32 [[SUB]], 31
 ; CHECK-NEXT:    ret i32 [[SHR]]
 ;
   %sub = sub nsw i32 %x, %y
-  store i32 %sub, i32* %p
+  store i32 %sub, ptr %p
   %shr = ashr i32 %sub, 31
   ret i32 %shr
 }
index b6e66c23ee03c1104a4c2b1b1e7e27558571ceff..80da69b2da3ed8a99315c9932d19e4893e698772 100644 (file)
@@ -3,43 +3,41 @@
 
 declare void @llvm.assume(i1 noundef)
 
-define void @f1(i8* %a) {
+define void @f1(ptr %a) {
 ; CHECK-LABEL: @f1(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds i8, i8* [[A:%.*]], i64 4
-; CHECK-NEXT:    [[TMP0:%.*]] = ptrtoint i8* [[PTR]] to i64
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds i8, ptr [[A:%.*]], i64 4
+; CHECK-NEXT:    [[TMP0:%.*]] = ptrtoint ptr [[PTR]] to i64
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i64 [[TMP0]], 3
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i64 [[TMP1]], 0
 ; CHECK-NEXT:    br i1 [[TMP2]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
 ; CHECK:       if.then:
-; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(i8* [[PTR]], i64 4) ]
-; CHECK-NEXT:    [[TMP3:%.*]] = bitcast i8* [[PTR]] to i32*
-; CHECK-NEXT:    store i32 4, i32* [[TMP3]], align 4
+; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[PTR]], i64 4) ]
+; CHECK-NEXT:    store i32 4, ptr [[PTR]], align 4
 ; CHECK-NEXT:    br label [[IF_END]]
 ; CHECK:       if.end:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %ptr = getelementptr inbounds i8, i8* %a, i64 4
-  %0 = ptrtoint i8* %ptr to i64
+  %ptr = getelementptr inbounds i8, ptr %a, i64 4
+  %0 = ptrtoint ptr %ptr to i64
   %1 = and i64 %0, 3
   %2 = icmp eq i64 %1, 0
   br i1 %2, label %if.then, label %if.end
 
 if.then:                                          ; preds = %entry
-  call void @llvm.assume(i1 true) [ "align"(i8* %ptr, i64 4) ]
-  %3 = ptrtoint i8* %ptr to i64
+  call void @llvm.assume(i1 true) [ "align"(ptr %ptr, i64 4) ]
+  %3 = ptrtoint ptr %ptr to i64
   %4 = and i64 %3, 3
   %5 = icmp eq i64 %4, 0
   br i1 %5, label %if.then1, label %if.else1
 
 if.then1:                                         ; preds = %if.then
-  %6 = bitcast i8* %ptr to i32*
-  store i32 4, i32* %6, align 4
+  store i32 4, ptr %ptr, align 4
   br label %if.end
 
 if.else1:                                         ; preds = %if.then
-  store i8 1, i8* %ptr, align 1
+  store i8 1, ptr %ptr, align 1
   br label %if.end
 
 if.end:                                           ; preds = %if.then1, %if.else1, %entry
@@ -48,56 +46,54 @@ if.end:                                           ; preds = %if.then1, %if.else1
 
 ; TODO: We could fold away the branch "br i1 %3, ..." by either using a GEP or make getKnowledgeValidInContext aware the alignment bundle offset, and the improvement of value tracking of GEP.
 
-define void @f2(i8* %a) {
+define void @f2(ptr %a) {
 ; CHECK-LABEL: @f2(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(i8* [[A:%.*]], i64 32, i32 24) ]
-; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, i8* [[A]], i64 8
-; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint i8* [[TMP0]] to i64
+; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[A:%.*]], i64 32, i32 24) ]
+; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 8
+; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[TMP0]] to i64
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i64 [[TMP1]], 8
 ; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i64 [[TMP2]], 0
 ; CHECK-NEXT:    br i1 [[TMP3]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
 ; CHECK:       if.then:
-; CHECK-NEXT:    [[TMP4:%.*]] = bitcast i8* [[TMP0]] to i64*
-; CHECK-NEXT:    store i64 16, i64* [[TMP4]], align 8
+; CHECK-NEXT:    store i64 16, ptr [[TMP0]], align 8
 ; CHECK-NEXT:    br label [[IF_END:%.*]]
 ; CHECK:       if.else:
-; CHECK-NEXT:    store i8 1, i8* [[TMP0]], align 8
+; CHECK-NEXT:    store i8 1, ptr [[TMP0]], align 8
 ; CHECK-NEXT:    br label [[IF_END]]
 ; CHECK:       if.end:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  call void @llvm.assume(i1 true) [ "align"(i8* %a, i64 32, i32 24) ]
-  %0 = getelementptr inbounds i8, i8* %a, i64 8
-  %1 = ptrtoint i8* %0 to i64
+  call void @llvm.assume(i1 true) [ "align"(ptr %a, i64 32, i32 24) ]
+  %0 = getelementptr inbounds i8, ptr %a, i64 8
+  %1 = ptrtoint ptr %0 to i64
   %2 = and i64 %1, 15
   %3 = icmp eq i64 %2, 0
   br i1 %3, label %if.then, label %if.else
 
 if.then:                                          ; preds = %entry
-  %4 = bitcast i8* %0 to i64*
-  store i64 16, i64* %4, align 4
+  store i64 16, ptr %0, align 4
   br label %if.end
 
 if.else:                                          ; preds = %entry
-  store i8 1, i8* %0, align 1
+  store i8 1, ptr %0, align 1
   br label %if.end
 
 if.end:                                           ; preds = %if.else, %if.then
   ret void
 }
 
-define void @f3(i64 %a, i8* %b) {
+define void @f3(i64 %a, ptr %b) {
 ; CHECK-LABEL: @f3(
-; CHECK-NEXT:    [[C:%.*]] = ptrtoint i8* [[B:%.*]] to i64
-; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(i8* [[B]], i64 4294967296) ]
+; CHECK-NEXT:    [[C:%.*]] = ptrtoint ptr [[B:%.*]] to i64
+; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[B]], i64 4294967296) ]
 ; CHECK-NEXT:    [[D:%.*]] = add i64 [[C]], [[A:%.*]]
 ; CHECK-NEXT:    call void @g(i64 [[D]])
 ; CHECK-NEXT:    ret void
 ;
-  %c = ptrtoint i8* %b to i64
-  call void @llvm.assume(i1 true) [ "align"(i8* %b, i64 4294967296) ]
+  %c = ptrtoint ptr %b to i64
+  call void @llvm.assume(i1 true) [ "align"(ptr %b, i64 4294967296) ]
   %d = add i64 %a, %c
   call void @g(i64 %d)
   ret void
@@ -105,24 +101,24 @@ define void @f3(i64 %a, i8* %b) {
 
 declare void @g(i64)
 
-define i8 @assume_align_zero(i8* %p) {
+define i8 @assume_align_zero(ptr %p) {
 ; CHECK-LABEL: @assume_align_zero(
-; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(i8* [[P:%.*]], i64 0) ]
-; CHECK-NEXT:    [[V:%.*]] = load i8, i8* [[P]], align 1
+; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[P:%.*]], i64 0) ]
+; CHECK-NEXT:    [[V:%.*]] = load i8, ptr [[P]], align 1
 ; CHECK-NEXT:    ret i8 [[V]]
 ;
-  call void @llvm.assume(i1 true) [ "align"(i8* %p, i64 0) ]
-  %v = load i8, i8* %p
+  call void @llvm.assume(i1 true) [ "align"(ptr %p, i64 0) ]
+  %v = load i8, ptr %p
   ret i8 %v
 }
 
-define i8 @assume_align_non_pow2(i8* %p) {
+define i8 @assume_align_non_pow2(ptr %p) {
 ; CHECK-LABEL: @assume_align_non_pow2(
-; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(i8* [[P:%.*]], i64 123) ]
-; CHECK-NEXT:    [[V:%.*]] = load i8, i8* [[P]], align 1
+; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[P:%.*]], i64 123) ]
+; CHECK-NEXT:    [[V:%.*]] = load i8, ptr [[P]], align 1
 ; CHECK-NEXT:    ret i8 [[V]]
 ;
-  call void @llvm.assume(i1 true) [ "align"(i8* %p, i64 123) ]
-  %v = load i8, i8* %p
+  call void @llvm.assume(i1 true) [ "align"(ptr %p, i64 123) ]
+  %v = load i8, ptr %p
   ret i8 %v
 }
index de6563802b73b92447b37b2fbfe82fb3ecd61008..65d2ee65a88749e228496329d16924d0275236b6 100644 (file)
@@ -3,49 +3,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-unknown-linux-gnu"
 
-define i8* @example(i8* dereferenceable(24) %x) {
+define ptr @example(ptr dereferenceable(24) %x) {
 ; CHECK-LABEL: @example(
-; CHECK-NEXT:    [[X2:%.*]] = bitcast i8* [[X:%.*]] to {}**
-; CHECK-NEXT:    [[Y:%.*]] = load {}*, {}** [[X2]], align 8
-; CHECK-NEXT:    [[Y_IS_NULL:%.*]] = icmp ne {}* [[Y]], null
+; CHECK-NEXT:    [[Y:%.*]] = load ptr, ptr [[X:%.*]], align 8
+; CHECK-NEXT:    [[Y_IS_NULL:%.*]] = icmp ne ptr [[Y]], null
 ; CHECK-NEXT:    call void @llvm.assume(i1 [[Y_IS_NULL]])
-; CHECK-NEXT:    ret i8* [[X]]
+; CHECK-NEXT:    ret ptr [[X]]
 ;
-  %x2 = bitcast i8* %x to {}**
-  %y = load {}*, {}** %x2, align 8
-  %y_is_null = icmp eq {}* %y, null
+  %y = load ptr, ptr %x, align 8
+  %y_is_null = icmp eq ptr %y, null
 
-  %x0 = getelementptr inbounds i8, i8* %x, i64 0
-  %res = select i1 %y_is_null, i8* null, i8* %x0
+  %res = select i1 %y_is_null, ptr null, ptr %x
 
-  %nonnull = icmp ne i8* %res, null
+  %nonnull = icmp ne ptr %res, null
   call void @llvm.assume(i1 %nonnull)
 
-  ret i8* %res
+  ret ptr %res
 }
 
-; TODO: this should be folded to `ret i8* %x` as well.
-define i8* @example2(i8* %x) {
+; TODO: this should be folded to `ret ptr %x` as well.
+define ptr @example2(ptr %x) {
 ; CHECK-LABEL: @example2(
-; CHECK-NEXT:    [[X2:%.*]] = bitcast i8* [[X:%.*]] to {}**
-; CHECK-NEXT:    [[Y:%.*]] = load {}*, {}** [[X2]], align 8
-; CHECK-NEXT:    [[Y_IS_NULL:%.*]] = icmp eq {}* [[Y]], null
-; CHECK-NEXT:    [[RES:%.*]] = select i1 [[Y_IS_NULL]], i8* null, i8* [[X]]
-; CHECK-NEXT:    [[NONNULL:%.*]] = icmp ne i8* [[RES]], null
+; CHECK-NEXT:    [[Y:%.*]] = load ptr, ptr [[X:%.*]], align 8
+; CHECK-NEXT:    [[Y_IS_NULL:%.*]] = icmp eq ptr [[Y]], null
+; CHECK-NEXT:    [[RES:%.*]] = select i1 [[Y_IS_NULL]], ptr null, ptr [[X]]
+; CHECK-NEXT:    [[NONNULL:%.*]] = icmp ne ptr [[RES]], null
 ; CHECK-NEXT:    call void @llvm.assume(i1 [[NONNULL]])
-; CHECK-NEXT:    ret i8* [[RES]]
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %x2 = bitcast i8* %x to {}**
-  %y = load {}*, {}** %x2, align 8
-  %y_is_null = icmp eq {}* %y, null
+  %y = load ptr, ptr %x, align 8
+  %y_is_null = icmp eq ptr %y, null
 
-  %x0 = getelementptr inbounds i8, i8* %x, i64 0
-  %res = select i1 %y_is_null, i8* null, i8* %x0
+  %res = select i1 %y_is_null, ptr null, ptr %x
 
-  %nonnull = icmp ne i8* %res, null
+  %nonnull = icmp ne ptr %res, null
   call void @llvm.assume(i1 %nonnull)
 
-  ret i8* %res
+  ret ptr %res
 }
 
 declare void @llvm.assume(i1)
index 55b17ad56fa17624059f98705e71d7f7c0592191..f55ae0d32a0a9cd4084e4bc1a9ecb412ab04ec80 100644 (file)
@@ -7,25 +7,25 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
 ; Function Attrs: nounwind uwtable
-define void @foo(i32* %a, i32* %b) #0 {
+define void @foo(ptr %a, ptr %b) #0 {
 ; CHECK-LABEL: @foo(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[PTRINT:%.*]] = ptrtoint i32* [[A:%.*]] to i64
+; CHECK-NEXT:    [[PTRINT:%.*]] = ptrtoint ptr [[A:%.*]] to i64
 ; CHECK-NEXT:    [[MASKEDPTR:%.*]] = and i64 [[PTRINT]], 63
 ; CHECK-NEXT:    [[MASKCOND:%.*]] = icmp eq i64 [[MASKEDPTR]], 0
 ; CHECK-NEXT:    tail call void @llvm.assume(i1 [[MASKCOND]])
-; CHECK-NEXT:    [[PTRINT1:%.*]] = ptrtoint i32* [[B:%.*]] to i64
+; CHECK-NEXT:    [[PTRINT1:%.*]] = ptrtoint ptr [[B:%.*]] to i64
 ; CHECK-NEXT:    [[MASKEDPTR2:%.*]] = and i64 [[PTRINT1]], 63
 ; CHECK-NEXT:    [[MASKCOND3:%.*]] = icmp eq i64 [[MASKEDPTR2]], 0
 ; CHECK-NEXT:    tail call void @llvm.assume(i1 [[MASKCOND3]])
 ; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
 ; CHECK:       for.body:
 ; CHECK-NEXT:    [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT:%.*]], [[FOR_BODY]] ]
-; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[B]], i64 [[INDVARS_IV]]
-; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 64
+; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[B]], i64 [[INDVARS_IV]]
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 64
 ; CHECK-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP0]], 1
-; CHECK-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds i32, i32* [[A]], i64 [[INDVARS_IV]]
-; CHECK-NEXT:    store i32 [[ADD]], i32* [[ARRAYIDX5]], align 64
+; CHECK-NEXT:    [[ARRAYIDX5:%.*]] = getelementptr inbounds i32, ptr [[A]], i64 [[INDVARS_IV]]
+; CHECK-NEXT:    store i32 [[ADD]], ptr [[ARRAYIDX5]], align 64
 ; CHECK-NEXT:    [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 16
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i64 [[INDVARS_IV_NEXT]] to i32
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[TMP1]], 1648
@@ -34,11 +34,11 @@ define void @foo(i32* %a, i32* %b) #0 {
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %ptrint = ptrtoint i32* %a to i64
+  %ptrint = ptrtoint ptr %a to i64
   %maskedptr = and i64 %ptrint, 63
   %maskcond = icmp eq i64 %maskedptr, 0
   tail call void @llvm.assume(i1 %maskcond)
-  %ptrint1 = ptrtoint i32* %b to i64
+  %ptrint1 = ptrtoint ptr %b to i64
   %maskedptr2 = and i64 %ptrint1, 63
   %maskcond3 = icmp eq i64 %maskedptr2, 0
   tail call void @llvm.assume(i1 %maskcond3)
@@ -47,11 +47,11 @@ entry:
 
 for.body:                                         ; preds = %entry, %for.body
   %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
-  %arrayidx = getelementptr inbounds i32, i32* %b, i64 %indvars.iv
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %b, i64 %indvars.iv
+  %0 = load i32, ptr %arrayidx, align 4
   %add = add nsw i32 %0, 1
-  %arrayidx5 = getelementptr inbounds i32, i32* %a, i64 %indvars.iv
-  store i32 %add, i32* %arrayidx5, align 4
+  %arrayidx5 = getelementptr inbounds i32, ptr %a, i64 %indvars.iv
+  store i32 %add, ptr %arrayidx5, align 4
   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 16
   %1 = trunc i64 %indvars.iv.next to i32
   %cmp = icmp slt i32 %1, 1648
index 4bdbcc8d086aa400f3da13c15b453f41763db1fe..869f06a05bd392c2afd58065db6f1b2d56764df2 100644 (file)
@@ -5,19 +5,18 @@
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
-%struct.s = type { double* }
+%struct.s = type { ptr }
 
 ; Function Attrs: nounwind uwtable
-define void @_Z3fooR1s(%struct.s* nocapture readonly dereferenceable(8) %x) #0 {
+define void @_Z3fooR1s(ptr nocapture readonly dereferenceable(8) %x) #0 {
 
 ; CHECK-LABEL: @_Z3fooR1s
 ; CHECK: call void @llvm.assume
 ; CHECK-NOT: call void @llvm.assume
 
 entry:
-  %a = getelementptr inbounds %struct.s, %struct.s* %x, i64 0, i32 0
-  %0 = load double*, double** %a, align 8
-  %ptrint = ptrtoint double* %0 to i64
+  %0 = load ptr, ptr %x, align 8
+  %ptrint = ptrtoint ptr %0 to i64
   %maskedptr = and i64 %ptrint, 31
   %maskcond = icmp eq i64 %maskedptr, 0
   br label %for.body
@@ -25,20 +24,20 @@ entry:
 for.body:                                         ; preds = %for.body, %entry
   %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next.1, %for.body ]
   tail call void @llvm.assume(i1 %maskcond)
-  %arrayidx = getelementptr inbounds double, double* %0, i64 %indvars.iv
-  %1 = load double, double* %arrayidx, align 16
+  %arrayidx = getelementptr inbounds double, ptr %0, i64 %indvars.iv
+  %1 = load double, ptr %arrayidx, align 16
   %add = fadd double %1, 1.000000e+00
   tail call void @llvm.assume(i1 %maskcond)
   %mul = fmul double %add, 2.000000e+00
-  store double %mul, double* %arrayidx, align 16
+  store double %mul, ptr %arrayidx, align 16
   %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
   tail call void @llvm.assume(i1 %maskcond)
-  %arrayidx.1 = getelementptr inbounds double, double* %0, i64 %indvars.iv.next
-  %2 = load double, double* %arrayidx.1, align 8
+  %arrayidx.1 = getelementptr inbounds double, ptr %0, i64 %indvars.iv.next
+  %2 = load double, ptr %arrayidx.1, align 8
   %add.1 = fadd double %2, 1.000000e+00
   tail call void @llvm.assume(i1 %maskcond)
   %mul.1 = fmul double %add.1, 2.000000e+00
-  store double %mul.1, double* %arrayidx.1, align 8
+  store double %mul.1, ptr %arrayidx.1, align 8
   %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv.next, 1
   %exitcond.1 = icmp eq i64 %indvars.iv.next, 1599
   br i1 %exitcond.1, label %for.end, label %for.body
@@ -47,14 +46,14 @@ for.end:                                          ; preds = %for.body
   ret void
 }
 
-declare align 8 i8* @get()
+declare align 8 ptr @get()
 
 ; Check that redundant align assume is removed
 ; CHECK-LABEL: @test
 ; CHECK-NOT: call void @llvm.assume
 define void @test1() {
-  %p = call align 8 i8* @get()
-  %ptrint = ptrtoint i8* %p to i64
+  %p = call align 8 ptr @get()
+  %ptrint = ptrtoint ptr %p to i64
   %maskedptr = and i64 %ptrint, 7
   %maskcond = icmp eq i64 %maskedptr, 0
   call void @llvm.assume(i1 %maskcond)
@@ -66,7 +65,7 @@ define void @test1() {
 ; CHECK-NOT: call void @llvm.assume
 define void @test3() {
   %p = alloca i8, align 8
-  %ptrint = ptrtoint i8* %p to i64
+  %ptrint = ptrtoint ptr %p to i64
   %maskedptr = and i64 %ptrint, 7
   %maskcond = icmp eq i64 %maskedptr, 0
   call void @llvm.assume(i1 %maskcond)
index c3ae342efca792886c244416dab4e0e575572fc6..d6490dbd2d365c6ef9c66f41ce4aa8a8fad0ed4f 100644 (file)
@@ -10,22 +10,22 @@ declare void @llvm.assume(i1) #1
 ; Check that the alignment has been upgraded and that the assume has not
 ; been removed:
 
-define i32 @foo1(i32* %a) #0 {
+define i32 @foo1(ptr %a) #0 {
 ; DEFAULT-LABEL: @foo1(
-; DEFAULT-NEXT:    [[T0:%.*]] = load i32, i32* [[A:%.*]], align 32
-; DEFAULT-NEXT:    [[PTRINT:%.*]] = ptrtoint i32* [[A]] to i64
+; DEFAULT-NEXT:    [[T0:%.*]] = load i32, ptr [[A:%.*]], align 32
+; DEFAULT-NEXT:    [[PTRINT:%.*]] = ptrtoint ptr [[A]] to i64
 ; DEFAULT-NEXT:    [[MASKEDPTR:%.*]] = and i64 [[PTRINT]], 31
 ; DEFAULT-NEXT:    [[MASKCOND:%.*]] = icmp eq i64 [[MASKEDPTR]], 0
 ; DEFAULT-NEXT:    tail call void @llvm.assume(i1 [[MASKCOND]])
 ; DEFAULT-NEXT:    ret i32 [[T0]]
 ;
 ; BUNDLES-LABEL: @foo1(
-; BUNDLES-NEXT:    [[T0:%.*]] = load i32, i32* [[A:%.*]], align 32
-; BUNDLES-NEXT:    call void @llvm.assume(i1 true) [ "align"(i32* [[A]], i64 32) ]
+; BUNDLES-NEXT:    [[T0:%.*]] = load i32, ptr [[A:%.*]], align 32
+; BUNDLES-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[A]], i64 32) ]
 ; BUNDLES-NEXT:    ret i32 [[T0]]
 ;
-  %t0 = load i32, i32* %a, align 4
-  %ptrint = ptrtoint i32* %a to i64
+  %t0 = load i32, ptr %a, align 4
+  %ptrint = ptrtoint ptr %a to i64
   %maskedptr = and i64 %ptrint, 31
   %maskcond = icmp eq i64 %maskedptr, 0
   tail call void @llvm.assume(i1 %maskcond)
@@ -34,25 +34,25 @@ define i32 @foo1(i32* %a) #0 {
 
 ; Same check as in @foo1, but make sure it works if the assume is first too.
 
-define i32 @foo2(i32* %a) #0 {
+define i32 @foo2(ptr %a) #0 {
 ; DEFAULT-LABEL: @foo2(
-; DEFAULT-NEXT:    [[PTRINT:%.*]] = ptrtoint i32* [[A:%.*]] to i64
+; DEFAULT-NEXT:    [[PTRINT:%.*]] = ptrtoint ptr [[A:%.*]] to i64
 ; DEFAULT-NEXT:    [[MASKEDPTR:%.*]] = and i64 [[PTRINT]], 31
 ; DEFAULT-NEXT:    [[MASKCOND:%.*]] = icmp eq i64 [[MASKEDPTR]], 0
 ; DEFAULT-NEXT:    tail call void @llvm.assume(i1 [[MASKCOND]])
-; DEFAULT-NEXT:    [[T0:%.*]] = load i32, i32* [[A]], align 32
+; DEFAULT-NEXT:    [[T0:%.*]] = load i32, ptr [[A]], align 32
 ; DEFAULT-NEXT:    ret i32 [[T0]]
 ;
 ; BUNDLES-LABEL: @foo2(
-; BUNDLES-NEXT:    call void @llvm.assume(i1 true) [ "align"(i32* [[A:%.*]], i64 32) ]
-; BUNDLES-NEXT:    [[T0:%.*]] = load i32, i32* [[A]], align 32
+; BUNDLES-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[A:%.*]], i64 32) ]
+; BUNDLES-NEXT:    [[T0:%.*]] = load i32, ptr [[A]], align 32
 ; BUNDLES-NEXT:    ret i32 [[T0]]
 ;
-  %ptrint = ptrtoint i32* %a to i64
+  %ptrint = ptrtoint ptr %a to i64
   %maskedptr = and i64 %ptrint, 31
   %maskcond = icmp eq i64 %maskedptr, 0
   tail call void @llvm.assume(i1 %maskcond)
-  %t0 = load i32, i32* %a, align 4
+  %t0 = load i32, ptr %a, align 4
   ret i32 %t0
 }
 
@@ -238,56 +238,56 @@ define i1 @assume_not(i1 %cond) {
   ret i1 %cond
 }
 
-declare void @escape(i32* %a)
+declare void @escape(ptr %a)
 
 ; Canonicalize a nonnull assumption on a load into metadata form.
 
-define i32 @bundle1(i32* %P) {
+define i32 @bundle1(ptr %P) {
 ; CHECK-LABEL: @bundle1(
-; CHECK-NEXT:    tail call void @llvm.assume(i1 true) [ "nonnull"(i32* [[P:%.*]]) ]
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32, i32* [[P]], align 4
+; CHECK-NEXT:    tail call void @llvm.assume(i1 true) [ "nonnull"(ptr [[P:%.*]]) ]
+; CHECK-NEXT:    [[LOAD:%.*]] = load i32, ptr [[P]], align 4
 ; CHECK-NEXT:    ret i32 [[LOAD]]
 ;
-  tail call void @llvm.assume(i1 true) ["nonnull"(i32* %P)]
-  %load = load i32, i32* %P
+  tail call void @llvm.assume(i1 true) ["nonnull"(ptr %P)]
+  %load = load i32, ptr %P
   ret i32 %load
 }
 
-define i32 @bundle2(i32* %P) {
+define i32 @bundle2(ptr %P) {
 ; CHECK-LABEL: @bundle2(
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT:    [[LOAD:%.*]] = load i32, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i32 [[LOAD]]
 ;
-  tail call void @llvm.assume(i1 true) ["ignore"(i32* undef)]
-  %load = load i32, i32* %P
+  tail call void @llvm.assume(i1 true) ["ignore"(ptr undef)]
+  %load = load i32, ptr %P
   ret i32 %load
 }
 
-define i1 @nonnull1(i32** %a) {
+define i1 @nonnull1(ptr %a) {
 ; CHECK-LABEL: @nonnull1(
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32*, i32** [[A:%.*]], align 8, !nonnull !6
-; CHECK-NEXT:    tail call void @escape(i32* nonnull [[LOAD]])
+; CHECK-NEXT:    [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8, !nonnull !6
+; CHECK-NEXT:    tail call void @escape(ptr nonnull [[LOAD]])
 ; CHECK-NEXT:    ret i1 false
 ;
-  %load = load i32*, i32** %a
-  %cmp = icmp ne i32* %load, null
+  %load = load ptr, ptr %a
+  %cmp = icmp ne ptr %load, null
   tail call void @llvm.assume(i1 %cmp)
-  tail call void @escape(i32* %load)
-  %rval = icmp eq i32* %load, null
+  tail call void @escape(ptr %load)
+  %rval = icmp eq ptr %load, null
   ret i1 %rval
 }
 
 ; Make sure the above canonicalization applies only
 ; to pointer types.  Doing otherwise would be illegal.
 
-define i1 @nonnull2(i32* %a) {
+define i1 @nonnull2(ptr %a) {
 ; CHECK-LABEL: @nonnull2(
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32, i32* [[A:%.*]], align 4
+; CHECK-NEXT:    [[LOAD:%.*]] = load i32, ptr [[A:%.*]], align 4
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i32 [[LOAD]], 0
 ; CHECK-NEXT:    tail call void @llvm.assume(i1 [[CMP]])
 ; CHECK-NEXT:    ret i1 false
 ;
-  %load = load i32, i32* %a
+  %load = load i32, ptr %a
   %cmp = icmp ne i32 %load, 0
   tail call void @llvm.assume(i1 %cmp)
   %rval = icmp eq i32 %load, 0
@@ -297,18 +297,18 @@ define i1 @nonnull2(i32* %a) {
 ; Make sure the above canonicalization does not trigger
 ; if the assume is control dependent on something else
 
-define i1 @nonnull3(i32** %a, i1 %control) {
+define i1 @nonnull3(ptr %a, i1 %control) {
 ; FIXME: in the BUNDLES version we could duplicate the load and keep the assume nonnull.
 ; DEFAULT-LABEL: @nonnull3(
 ; DEFAULT-NEXT:  entry:
-; DEFAULT-NEXT:    [[LOAD:%.*]] = load i32*, i32** [[A:%.*]], align 8
-; DEFAULT-NEXT:    [[CMP:%.*]] = icmp ne i32* [[LOAD]], null
+; DEFAULT-NEXT:    [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
+; DEFAULT-NEXT:    [[CMP:%.*]] = icmp ne ptr [[LOAD]], null
 ; DEFAULT-NEXT:    br i1 [[CONTROL:%.*]], label [[TAKEN:%.*]], label [[NOT_TAKEN:%.*]]
 ; DEFAULT:       taken:
 ; DEFAULT-NEXT:    tail call void @llvm.assume(i1 [[CMP]])
 ; DEFAULT-NEXT:    ret i1 false
 ; DEFAULT:       not_taken:
-; DEFAULT-NEXT:    [[RVAL_2:%.*]] = icmp sgt i32* [[LOAD]], null
+; DEFAULT-NEXT:    [[RVAL_2:%.*]] = icmp sgt ptr [[LOAD]], null
 ; DEFAULT-NEXT:    ret i1 [[RVAL_2]]
 ;
 ; BUNDLES-LABEL: @nonnull3(
@@ -317,20 +317,20 @@ define i1 @nonnull3(i32** %a, i1 %control) {
 ; BUNDLES:       taken:
 ; BUNDLES-NEXT:    ret i1 false
 ; BUNDLES:       not_taken:
-; BUNDLES-NEXT:    [[LOAD:%.*]] = load i32*, i32** [[A:%.*]], align 8
-; BUNDLES-NEXT:    [[RVAL_2:%.*]] = icmp sgt i32* [[LOAD]], null
+; BUNDLES-NEXT:    [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
+; BUNDLES-NEXT:    [[RVAL_2:%.*]] = icmp sgt ptr [[LOAD]], null
 ; BUNDLES-NEXT:    ret i1 [[RVAL_2]]
 ;
 entry:
-  %load = load i32*, i32** %a
-  %cmp = icmp ne i32* %load, null
+  %load = load ptr, ptr %a
+  %cmp = icmp ne ptr %load, null
   br i1 %control, label %taken, label %not_taken
 taken:
   tail call void @llvm.assume(i1 %cmp)
-  %rval = icmp eq i32* %load, null
+  %rval = icmp eq ptr %load, null
   ret i1 %rval
 not_taken:
-  %rval.2 = icmp sgt i32* %load, null
+  %rval.2 = icmp sgt ptr %load, null
   ret i1 %rval.2
 }
 
@@ -338,43 +338,43 @@ not_taken:
 ; if the path from the load to the assume is potentially
 ; interrupted by an exception being thrown
 
-define i1 @nonnull4(i32** %a) {
+define i1 @nonnull4(ptr %a) {
 ; DEFAULT-LABEL: @nonnull4(
-; DEFAULT-NEXT:    [[LOAD:%.*]] = load i32*, i32** [[A:%.*]], align 8
-; DEFAULT-NEXT:    tail call void @escape(i32* [[LOAD]])
-; DEFAULT-NEXT:    [[CMP:%.*]] = icmp ne i32* [[LOAD]], null
+; DEFAULT-NEXT:    [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
+; DEFAULT-NEXT:    tail call void @escape(ptr [[LOAD]])
+; DEFAULT-NEXT:    [[CMP:%.*]] = icmp ne ptr [[LOAD]], null
 ; DEFAULT-NEXT:    tail call void @llvm.assume(i1 [[CMP]])
 ; DEFAULT-NEXT:    ret i1 false
 ;
 ; BUNDLES-LABEL: @nonnull4(
-; BUNDLES-NEXT:    [[LOAD:%.*]] = load i32*, i32** [[A:%.*]], align 8
-; BUNDLES-NEXT:    tail call void @escape(i32* [[LOAD]])
-; BUNDLES-NEXT:    call void @llvm.assume(i1 true) [ "nonnull"(i32* [[LOAD]]) ]
+; BUNDLES-NEXT:    [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
+; BUNDLES-NEXT:    tail call void @escape(ptr [[LOAD]])
+; BUNDLES-NEXT:    call void @llvm.assume(i1 true) [ "nonnull"(ptr [[LOAD]]) ]
 ; BUNDLES-NEXT:    ret i1 false
 ;
-  %load = load i32*, i32** %a
+  %load = load ptr, ptr %a
   ;; This call may throw!
-  tail call void @escape(i32* %load)
-  %cmp = icmp ne i32* %load, null
+  tail call void @escape(ptr %load)
+  %cmp = icmp ne ptr %load, null
   tail call void @llvm.assume(i1 %cmp)
-  %rval = icmp eq i32* %load, null
+  %rval = icmp eq ptr %load, null
   ret i1 %rval
 }
-define i1 @nonnull5(i32** %a) {
+define i1 @nonnull5(ptr %a) {
 ; CHECK-LABEL: @nonnull5(
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32*, i32** [[A:%.*]], align 8
-; CHECK-NEXT:    tail call void @escape(i32* [[LOAD]])
-; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32* [[LOAD]], null
+; CHECK-NEXT:    [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
+; CHECK-NEXT:    tail call void @escape(ptr [[LOAD]])
+; CHECK-NEXT:    [[CMP:%.*]] = icmp slt ptr [[LOAD]], null
 ; CHECK-NEXT:    tail call void @llvm.assume(i1 [[CMP]])
 ; CHECK-NEXT:    ret i1 false
 ;
-  %load = load i32*, i32** %a
+  %load = load ptr, ptr %a
   ;; This call may throw!
-  tail call void @escape(i32* %load)
-  %integral = ptrtoint i32* %load to i64
+  tail call void @escape(ptr %load)
+  %integral = ptrtoint ptr %load to i64
   %cmp = icmp slt i64 %integral, 0
   tail call void @llvm.assume(i1 %cmp) ; %load has at least highest bit set
-  %rval = icmp eq i32* %load, null
+  %rval = icmp eq ptr %load, null
   ret i1 %rval
 }
 
@@ -443,17 +443,17 @@ define i32 @PR40940(<4 x i8> %x) {
   ret i32 %t2
 }
 
-define i1 @nonnull3A(i32** %a, i1 %control) {
+define i1 @nonnull3A(ptr %a, i1 %control) {
 ; DEFAULT-LABEL: @nonnull3A(
 ; DEFAULT-NEXT:  entry:
-; DEFAULT-NEXT:    [[LOAD:%.*]] = load i32*, i32** [[A:%.*]], align 8
+; DEFAULT-NEXT:    [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
 ; DEFAULT-NEXT:    br i1 [[CONTROL:%.*]], label [[TAKEN:%.*]], label [[NOT_TAKEN:%.*]]
 ; DEFAULT:       taken:
-; DEFAULT-NEXT:    [[CMP:%.*]] = icmp ne i32* [[LOAD]], null
+; DEFAULT-NEXT:    [[CMP:%.*]] = icmp ne ptr [[LOAD]], null
 ; DEFAULT-NEXT:    call void @llvm.assume(i1 [[CMP]])
 ; DEFAULT-NEXT:    ret i1 true
 ; DEFAULT:       not_taken:
-; DEFAULT-NEXT:    [[RVAL_2:%.*]] = icmp sgt i32* [[LOAD]], null
+; DEFAULT-NEXT:    [[RVAL_2:%.*]] = icmp sgt ptr [[LOAD]], null
 ; DEFAULT-NEXT:    ret i1 [[RVAL_2]]
 ;
 ; BUNDLES-LABEL: @nonnull3A(
@@ -462,56 +462,56 @@ define i1 @nonnull3A(i32** %a, i1 %control) {
 ; BUNDLES:       taken:
 ; BUNDLES-NEXT:    ret i1 true
 ; BUNDLES:       not_taken:
-; BUNDLES-NEXT:    [[LOAD:%.*]] = load i32*, i32** [[A:%.*]], align 8
-; BUNDLES-NEXT:    [[RVAL_2:%.*]] = icmp sgt i32* [[LOAD]], null
+; BUNDLES-NEXT:    [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
+; BUNDLES-NEXT:    [[RVAL_2:%.*]] = icmp sgt ptr [[LOAD]], null
 ; BUNDLES-NEXT:    ret i1 [[RVAL_2]]
 ;
 entry:
-  %load = load i32*, i32** %a
-  %cmp = icmp ne i32* %load, null
+  %load = load ptr, ptr %a
+  %cmp = icmp ne ptr %load, null
   br i1 %control, label %taken, label %not_taken
 taken:
   call void @llvm.assume(i1 %cmp)
   ret i1 %cmp
 not_taken:
   call void @llvm.assume(i1 %cmp)
-  %rval.2 = icmp sgt i32* %load, null
+  %rval.2 = icmp sgt ptr %load, null
   ret i1 %rval.2
 }
 
-define i1 @nonnull3B(i32** %a, i1 %control) {
+define i1 @nonnull3B(ptr %a, i1 %control) {
 ; CHECK-LABEL: @nonnull3B(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[CONTROL:%.*]], label [[TAKEN:%.*]], label [[NOT_TAKEN:%.*]]
 ; CHECK:       taken:
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32*, i32** [[A:%.*]], align 8
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i32* [[LOAD]], null
-; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]]) [ "nonnull"(i32* [[LOAD]]) ]
+; CHECK-NEXT:    [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ne ptr [[LOAD]], null
+; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]]) [ "nonnull"(ptr [[LOAD]]) ]
 ; CHECK-NEXT:    ret i1 true
 ; CHECK:       not_taken:
 ; CHECK-NEXT:    ret i1 [[CONTROL]]
 ;
 entry:
-  %load = load i32*, i32** %a
-  %cmp = icmp ne i32* %load, null
+  %load = load ptr, ptr %a
+  %cmp = icmp ne ptr %load, null
   br i1 %control, label %taken, label %not_taken
 taken:
-  call void @llvm.assume(i1 %cmp) ["nonnull"(i32* %load)]
+  call void @llvm.assume(i1 %cmp) ["nonnull"(ptr %load)]
   ret i1 %cmp
 not_taken:
-  call void @llvm.assume(i1 %cmp) ["nonnull"(i32* %load)]
+  call void @llvm.assume(i1 %cmp) ["nonnull"(ptr %load)]
   ret i1 %control
 }
 
 declare i1 @tmp1(i1)
 
-define i1 @nonnull3C(i32** %a, i1 %control) {
+define i1 @nonnull3C(ptr %a, i1 %control) {
 ; CHECK-LABEL: @nonnull3C(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[CONTROL:%.*]], label [[TAKEN:%.*]], label [[NOT_TAKEN:%.*]]
 ; CHECK:       taken:
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32*, i32** [[A:%.*]], align 8
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i32* [[LOAD]], null
+; CHECK-NEXT:    [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ne ptr [[LOAD]], null
 ; CHECK-NEXT:    [[CMP2:%.*]] = call i1 @tmp1(i1 [[CMP]])
 ; CHECK-NEXT:    br label [[EXIT:%.*]]
 ; CHECK:       exit:
@@ -520,28 +520,28 @@ define i1 @nonnull3C(i32** %a, i1 %control) {
 ; CHECK-NEXT:    ret i1 [[CONTROL]]
 ;
 entry:
-  %load = load i32*, i32** %a
-  %cmp = icmp ne i32* %load, null
+  %load = load ptr, ptr %a
+  %cmp = icmp ne ptr %load, null
   br i1 %control, label %taken, label %not_taken
 taken:
   %cmp2 = call i1 @tmp1(i1 %cmp)
   br label %exit
 exit:
   ; FIXME: this shouldn't be dropped because it is still dominated by the new position of %load
-  call void @llvm.assume(i1 %cmp) ["nonnull"(i32* %load)]
+  call void @llvm.assume(i1 %cmp) ["nonnull"(ptr %load)]
   ret i1 %cmp2
 not_taken:
   call void @llvm.assume(i1 %cmp)
   ret i1 %control
 }
 
-define i1 @nonnull3D(i32** %a, i1 %control) {
+define i1 @nonnull3D(ptr %a, i1 %control) {
 ; CHECK-LABEL: @nonnull3D(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[CONTROL:%.*]], label [[TAKEN:%.*]], label [[NOT_TAKEN:%.*]]
 ; CHECK:       taken:
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32*, i32** [[A:%.*]], align 8
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i32* [[LOAD]], null
+; CHECK-NEXT:    [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ne ptr [[LOAD]], null
 ; CHECK-NEXT:    [[CMP2:%.*]] = call i1 @tmp1(i1 [[CMP]])
 ; CHECK-NEXT:    br label [[EXIT:%.*]]
 ; CHECK:       exit:
@@ -550,8 +550,8 @@ define i1 @nonnull3D(i32** %a, i1 %control) {
 ; CHECK-NEXT:    ret i1 [[CONTROL]]
 ;
 entry:
-  %load = load i32*, i32** %a
-  %cmp = icmp ne i32* %load, null
+  %load = load ptr, ptr %a
+  %cmp = icmp ne ptr %load, null
   br i1 %control, label %taken, label %not_taken
 taken:
   %cmp2 = call i1 @tmp1(i1 %cmp)
@@ -559,7 +559,7 @@ taken:
 exit:
   ret i1 %cmp2
 not_taken:
-  call void @llvm.assume(i1 %cmp) ["nonnull"(i32* %load)]
+  call void @llvm.assume(i1 %cmp) ["nonnull"(ptr %load)]
   ret i1 %control
 }
 
@@ -578,12 +578,12 @@ define void @always_true_assumption() {
 define i64 @PR31809() {
 ; CHECK-LABEL: @PR31809(
 ; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    [[T1:%.*]] = ptrtoint i32* [[A]] to i64
+; CHECK-NEXT:    [[T1:%.*]] = ptrtoint ptr [[A]] to i64
 ; CHECK-NEXT:    call void @llvm.assume(i1 false)
 ; CHECK-NEXT:    ret i64 [[T1]]
 ;
   %a = alloca i32
-  %t1 = ptrtoint i32* %a to i64
+  %t1 = ptrtoint ptr %a to i64
   %cond = icmp eq i64 %t1, 3
   call void @llvm.assume(i1 %cond)
   ret i64 %t1
@@ -700,7 +700,7 @@ exit:
   unreachable
 }
 
-define i32 @unreachable_assumes_and_store(i32 %x, i32 %y, i32* %p) {
+define i32 @unreachable_assumes_and_store(i32 %x, i32 %y, ptr %p) {
 ; CHECK-LABEL: @unreachable_assumes_and_store(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[CMP0:%.*]] = icmp sgt i32 [[X:%.*]], 1
@@ -736,11 +736,11 @@ exit:
   tail call void @llvm.assume(i1 %cmp4)
   %cmp5 = icmp ugt i32 %y, 42
   tail call void @llvm.assume(i1 %cmp5)
-  store i32 %x, i32* %p
+  store i32 %x, ptr %p
   unreachable
 }
 
-define i32 @unreachable_assumes_and_store_logical(i32 %x, i32 %y, i32* %p) {
+define i32 @unreachable_assumes_and_store_logical(i32 %x, i32 %y, ptr %p) {
 ; CHECK-LABEL: @unreachable_assumes_and_store_logical(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[CMP0:%.*]] = icmp sgt i32 [[X:%.*]], 1
@@ -776,24 +776,22 @@ exit:
   tail call void @llvm.assume(i1 %cmp4)
   %cmp5 = icmp ugt i32 %y, 42
   tail call void @llvm.assume(i1 %cmp5)
-  store i32 %x, i32* %p
+  store i32 %x, ptr %p
   unreachable
 }
 
-define void @canonicalize_assume(i32* %0) {
+define void @canonicalize_assume(ptr %0) {
 ; DEFAULT-LABEL: @canonicalize_assume(
-; DEFAULT-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, i32* [[TMP0:%.*]], i64 2
-; DEFAULT-NEXT:    [[TMP3:%.*]] = bitcast i32* [[TMP2]] to i8*
-; DEFAULT-NEXT:    call void @llvm.assume(i1 true) [ "align"(i8* [[TMP3]], i64 16) ]
+; DEFAULT-NEXT:    [[TMP2:%.*]] = getelementptr inbounds i32, ptr [[TMP0:%.*]], i64 2
+; DEFAULT-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[TMP2]], i64 16) ]
 ; DEFAULT-NEXT:    ret void
 ;
 ; BUNDLES-LABEL: @canonicalize_assume(
-; BUNDLES-NEXT:    call void @llvm.assume(i1 true) [ "align"(i32* [[TMP0:%.*]], i64 8) ]
+; BUNDLES-NEXT:    call void @llvm.assume(i1 true) [ "align"(ptr [[TMP0:%.*]], i64 8) ]
 ; BUNDLES-NEXT:    ret void
 ;
-  %2 = getelementptr inbounds i32, i32* %0, i64 2
-  %3 = bitcast i32* %2 to i8*
-  call void @llvm.assume(i1 true) [ "align"(i8* %3, i64 16) ]
+  %2 = getelementptr inbounds i32, ptr %0, i64 2
+  call void @llvm.assume(i1 true) [ "align"(ptr %2, i64 16) ]
   ret void
 }
 
index e3afffeb9b4a8976c734911895c5c366508ebc23..7842fdf3d2de501173220a243f9b75e5cde7050d 100644 (file)
@@ -6,27 +6,27 @@ target triple = "x86_64-apple-macosx10.7.0"
 
 ; Check transforms involving atomic operations
 
-define i32 @test1(i32* %p) {
+define i32 @test1(ptr %p) {
 ; CHECK-LABEL: @test1(
-; CHECK-NEXT:    [[X:%.*]] = load atomic i32, i32* [[P:%.*]] seq_cst, align 4
+; CHECK-NEXT:    [[X:%.*]] = load atomic i32, ptr [[P:%.*]] seq_cst, align 4
 ; CHECK-NEXT:    [[Z:%.*]] = shl i32 [[X]], 1
 ; CHECK-NEXT:    ret i32 [[Z]]
 ;
-  %x = load atomic i32, i32* %p seq_cst, align 4
-  %y = load i32, i32* %p, align 4
+  %x = load atomic i32, ptr %p seq_cst, align 4
+  %y = load i32, ptr %p, align 4
   %z = add i32 %x, %y
   ret i32 %z
 }
 
-define i32 @test2(i32* %p) {
+define i32 @test2(ptr %p) {
 ; CHECK-LABEL: @test2(
-; CHECK-NEXT:    [[X:%.*]] = load volatile i32, i32* [[P:%.*]], align 4
-; CHECK-NEXT:    [[Y:%.*]] = load volatile i32, i32* [[P]], align 4
+; CHECK-NEXT:    [[X:%.*]] = load volatile i32, ptr [[P:%.*]], align 4
+; CHECK-NEXT:    [[Y:%.*]] = load volatile i32, ptr [[P]], align 4
 ; CHECK-NEXT:    [[Z:%.*]] = add i32 [[X]], [[Y]]
 ; CHECK-NEXT:    ret i32 [[Z]]
 ;
-  %x = load volatile i32, i32* %p, align 4
-  %y = load volatile i32, i32* %p, align 4
+  %x = load volatile i32, ptr %p, align 4
+  %y = load volatile i32, ptr %p, align 4
   %z = add i32 %x, %y
   ret i32 %z
 }
@@ -34,27 +34,27 @@ define i32 @test2(i32* %p) {
 ; The exact semantics of mixing volatile and non-volatile on the same
 ; memory location are a bit unclear, but conservatively, we know we don't
 ; want to remove the volatile.
-define i32 @test3(i32* %p) {
+define i32 @test3(ptr %p) {
 ; CHECK-LABEL: @test3(
-; CHECK-NEXT:    [[X:%.*]] = load volatile i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT:    [[X:%.*]] = load volatile i32, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[Z:%.*]] = shl i32 [[X]], 1
 ; CHECK-NEXT:    ret i32 [[Z]]
 ;
-  %x = load volatile i32, i32* %p, align 4
-  %y = load i32, i32* %p, align 4
+  %x = load volatile i32, ptr %p, align 4
+  %y = load i32, ptr %p, align 4
   %z = add i32 %x, %y
   ret i32 %z
 }
 
 ; Forwarding from a stronger ordered atomic is fine
-define i32 @test4(i32* %p) {
+define i32 @test4(ptr %p) {
 ; CHECK-LABEL: @test4(
-; CHECK-NEXT:    [[X:%.*]] = load atomic i32, i32* [[P:%.*]] seq_cst, align 4
+; CHECK-NEXT:    [[X:%.*]] = load atomic i32, ptr [[P:%.*]] seq_cst, align 4
 ; CHECK-NEXT:    [[Z:%.*]] = shl i32 [[X]], 1
 ; CHECK-NEXT:    ret i32 [[Z]]
 ;
-  %x = load atomic i32, i32* %p seq_cst, align 4
-  %y = load atomic i32, i32* %p unordered, align 4
+  %x = load atomic i32, ptr %p seq_cst, align 4
+  %y = load atomic i32, ptr %p unordered, align 4
   %z = add i32 %x, %y
   ret i32 %z
 }
@@ -62,55 +62,55 @@ define i32 @test4(i32* %p) {
 ; Forwarding from a non-atomic is not.  (The earlier load
 ; could in priciple be promoted to atomic and then forwarded,
 ; but we can't just  drop the atomic from the load.)
-define i32 @test5(i32* %p) {
+define i32 @test5(ptr %p) {
 ; CHECK-LABEL: @test5(
-; CHECK-NEXT:    [[X:%.*]] = load atomic i32, i32* [[P:%.*]] unordered, align 4
+; CHECK-NEXT:    [[X:%.*]] = load atomic i32, ptr [[P:%.*]] unordered, align 4
 ; CHECK-NEXT:    [[Z:%.*]] = shl i32 [[X]], 1
 ; CHECK-NEXT:    ret i32 [[Z]]
 ;
-  %x = load atomic i32, i32* %p unordered, align 4
-  %y = load i32, i32* %p, align 4
+  %x = load atomic i32, ptr %p unordered, align 4
+  %y = load i32, ptr %p, align 4
   %z = add i32 %x, %y
   ret i32 %z
 }
 
 ; Forwarding atomic to atomic is fine
-define i32 @test6(i32* %p) {
+define i32 @test6(ptr %p) {
 ; CHECK-LABEL: @test6(
-; CHECK-NEXT:    [[X:%.*]] = load atomic i32, i32* [[P:%.*]] unordered, align 4
+; CHECK-NEXT:    [[X:%.*]] = load atomic i32, ptr [[P:%.*]] unordered, align 4
 ; CHECK-NEXT:    [[Z:%.*]] = shl i32 [[X]], 1
 ; CHECK-NEXT:    ret i32 [[Z]]
 ;
-  %x = load atomic i32, i32* %p unordered, align 4
-  %y = load atomic i32, i32* %p unordered, align 4
+  %x = load atomic i32, ptr %p unordered, align 4
+  %y = load atomic i32, ptr %p unordered, align 4
   %z = add i32 %x, %y
   ret i32 %z
 }
 
 ; FIXME: we currently don't do anything for monotonic
-define i32 @test7(i32* %p) {
+define i32 @test7(ptr %p) {
 ; CHECK-LABEL: @test7(
-; CHECK-NEXT:    [[X:%.*]] = load atomic i32, i32* [[P:%.*]] seq_cst, align 4
-; CHECK-NEXT:    [[Y:%.*]] = load atomic i32, i32* [[P]] monotonic, align 4
+; CHECK-NEXT:    [[X:%.*]] = load atomic i32, ptr [[P:%.*]] seq_cst, align 4
+; CHECK-NEXT:    [[Y:%.*]] = load atomic i32, ptr [[P]] monotonic, align 4
 ; CHECK-NEXT:    [[Z:%.*]] = add i32 [[X]], [[Y]]
 ; CHECK-NEXT:    ret i32 [[Z]]
 ;
-  %x = load atomic i32, i32* %p seq_cst, align 4
-  %y = load atomic i32, i32* %p monotonic, align 4
+  %x = load atomic i32, ptr %p seq_cst, align 4
+  %y = load atomic i32, ptr %p monotonic, align 4
   %z = add i32 %x, %y
   ret i32 %z
 }
 
 ; FIXME: We could forward in racy code
-define i32 @test8(i32* %p) {
+define i32 @test8(ptr %p) {
 ; CHECK-LABEL: @test8(
-; CHECK-NEXT:    [[X:%.*]] = load atomic i32, i32* [[P:%.*]] seq_cst, align 4
-; CHECK-NEXT:    [[Y:%.*]] = load atomic i32, i32* [[P]] acquire, align 4
+; CHECK-NEXT:    [[X:%.*]] = load atomic i32, ptr [[P:%.*]] seq_cst, align 4
+; CHECK-NEXT:    [[Y:%.*]] = load atomic i32, ptr [[P]] acquire, align 4
 ; CHECK-NEXT:    [[Z:%.*]] = add i32 [[X]], [[Y]]
 ; CHECK-NEXT:    ret i32 [[Z]]
 ;
-  %x = load atomic i32, i32* %p seq_cst, align 4
-  %y = load atomic i32, i32* %p acquire, align 4
+  %x = load atomic i32, ptr %p seq_cst, align 4
+  %y = load atomic i32, ptr %p acquire, align 4
   %z = add i32 %x, %y
   ret i32 %z
 }
@@ -119,57 +119,57 @@ define i32 @test8(i32* %p) {
 ; ordering imposed.
 define i32 @test9() {
 ; CHECK-LABEL: @test9(
-; CHECK-NEXT:    store i32 poison, i32* null, align 4294967296
+; CHECK-NEXT:    store i32 poison, ptr null, align 4294967296
 ; CHECK-NEXT:    ret i32 poison
 ;
-  %x = load atomic i32, i32* null unordered, align 4
+  %x = load atomic i32, ptr null unordered, align 4
   ret i32 %x
 }
 
 define i32 @test9_no_null_opt() #0 {
 ; CHECK-LABEL: @test9_no_null_opt(
-; CHECK-NEXT:    [[X:%.*]] = load atomic i32, i32* null unordered, align 4294967296
+; CHECK-NEXT:    [[X:%.*]] = load atomic i32, ptr null unordered, align 4294967296
 ; CHECK-NEXT:    ret i32 [[X]]
 ;
-  %x = load atomic i32, i32* null unordered, align 4
+  %x = load atomic i32, ptr null unordered, align 4
   ret i32 %x
 }
 
 ; FIXME: Could also fold
 define i32 @test10() {
 ; CHECK-LABEL: @test10(
-; CHECK-NEXT:    [[X:%.*]] = load atomic i32, i32* null monotonic, align 4294967296
+; CHECK-NEXT:    [[X:%.*]] = load atomic i32, ptr null monotonic, align 4294967296
 ; CHECK-NEXT:    ret i32 [[X]]
 ;
-  %x = load atomic i32, i32* null monotonic, align 4
+  %x = load atomic i32, ptr null monotonic, align 4
   ret i32 %x
 }
 
 define i32 @test10_no_null_opt() #0 {
 ; CHECK-LABEL: @test10_no_null_opt(
-; CHECK-NEXT:    [[X:%.*]] = load atomic i32, i32* null monotonic, align 4294967296
+; CHECK-NEXT:    [[X:%.*]] = load atomic i32, ptr null monotonic, align 4294967296
 ; CHECK-NEXT:    ret i32 [[X]]
 ;
-  %x = load atomic i32, i32* null monotonic, align 4
+  %x = load atomic i32, ptr null monotonic, align 4
   ret i32 %x
 }
 
 ; Would this be legal to fold?  Probably?
 define i32 @test11() {
 ; CHECK-LABEL: @test11(
-; CHECK-NEXT:    [[X:%.*]] = load atomic i32, i32* null seq_cst, align 4294967296
+; CHECK-NEXT:    [[X:%.*]] = load atomic i32, ptr null seq_cst, align 4294967296
 ; CHECK-NEXT:    ret i32 [[X]]
 ;
-  %x = load atomic i32, i32* null seq_cst, align 4
+  %x = load atomic i32, ptr null seq_cst, align 4
   ret i32 %x
 }
 
 define i32 @test11_no_null_opt() #0 {
 ; CHECK-LABEL: @test11_no_null_opt(
-; CHECK-NEXT:    [[X:%.*]] = load atomic i32, i32* null seq_cst, align 4294967296
+; CHECK-NEXT:    [[X:%.*]] = load atomic i32, ptr null seq_cst, align 4294967296
 ; CHECK-NEXT:    ret i32 [[X]]
 ;
-  %x = load atomic i32, i32* null seq_cst, align 4
+  %x = load atomic i32, ptr null seq_cst, align 4
   ret i32 %x
 }
 
@@ -177,57 +177,57 @@ define i32 @test11_no_null_opt() #0 {
 ; ordering imposed.
 define i32 @test12() {
 ; CHECK-LABEL: @test12(
-; CHECK-NEXT:    store atomic i32 poison, i32* null unordered, align 4294967296
+; CHECK-NEXT:    store atomic i32 poison, ptr null unordered, align 4294967296
 ; CHECK-NEXT:    ret i32 0
 ;
-  store atomic i32 0, i32* null unordered, align 4
+  store atomic i32 0, ptr null unordered, align 4
   ret i32 0
 }
 
 define i32 @test12_no_null_opt() #0 {
 ; CHECK-LABEL: @test12_no_null_opt(
-; CHECK-NEXT:    store atomic i32 0, i32* null unordered, align 4294967296
+; CHECK-NEXT:    store atomic i32 0, ptr null unordered, align 4294967296
 ; CHECK-NEXT:    ret i32 0
 ;
-  store atomic i32 0, i32* null unordered, align 4
+  store atomic i32 0, ptr null unordered, align 4
   ret i32 0
 }
 
 ; FIXME: Could also fold
 define i32 @test13() {
 ; CHECK-LABEL: @test13(
-; CHECK-NEXT:    store atomic i32 0, i32* null monotonic, align 4294967296
+; CHECK-NEXT:    store atomic i32 0, ptr null monotonic, align 4294967296
 ; CHECK-NEXT:    ret i32 0
 ;
-  store atomic i32 0, i32* null monotonic, align 4
+  store atomic i32 0, ptr null monotonic, align 4
   ret i32 0
 }
 
 define i32 @test13_no_null_opt() #0 {
 ; CHECK-LABEL: @test13_no_null_opt(
-; CHECK-NEXT:    store atomic i32 0, i32* null monotonic, align 4294967296
+; CHECK-NEXT:    store atomic i32 0, ptr null monotonic, align 4294967296
 ; CHECK-NEXT:    ret i32 0
 ;
-  store atomic i32 0, i32* null monotonic, align 4
+  store atomic i32 0, ptr null monotonic, align 4
   ret i32 0
 }
 
 ; Would this be legal to fold?  Probably?
 define i32 @test14() {
 ; CHECK-LABEL: @test14(
-; CHECK-NEXT:    store atomic i32 0, i32* null seq_cst, align 4294967296
+; CHECK-NEXT:    store atomic i32 0, ptr null seq_cst, align 4294967296
 ; CHECK-NEXT:    ret i32 0
 ;
-  store atomic i32 0, i32* null seq_cst, align 4
+  store atomic i32 0, ptr null seq_cst, align 4
   ret i32 0
 }
 
 define i32 @test14_no_null_opt() #0 {
 ; CHECK-LABEL: @test14_no_null_opt(
-; CHECK-NEXT:    store atomic i32 0, i32* null seq_cst, align 4294967296
+; CHECK-NEXT:    store atomic i32 0, ptr null seq_cst, align 4294967296
 ; CHECK-NEXT:    ret i32 0
 ;
-  store atomic i32 0, i32* null seq_cst, align 4
+  store atomic i32 0, ptr null seq_cst, align 4
   ret i32 0
 }
 
@@ -236,37 +236,37 @@ define i32 @test14_no_null_opt() #0 {
 
 define i32 @test15(i1 %cnd) {
 ; CHECK-LABEL: @test15(
-; CHECK-NEXT:    [[A_VAL:%.*]] = load atomic i32, i32* @a unordered, align 4
-; CHECK-NEXT:    [[B_VAL:%.*]] = load atomic i32, i32* @b unordered, align 4
+; CHECK-NEXT:    [[A_VAL:%.*]] = load atomic i32, ptr @a unordered, align 4
+; CHECK-NEXT:    [[B_VAL:%.*]] = load atomic i32, ptr @b unordered, align 4
 ; CHECK-NEXT:    [[X:%.*]] = select i1 [[CND:%.*]], i32 [[A_VAL]], i32 [[B_VAL]]
 ; CHECK-NEXT:    ret i32 [[X]]
 ;
-  %addr = select i1 %cnd, i32* @a, i32* @b
-  %x = load atomic i32, i32* %addr unordered, align 4
+  %addr = select i1 %cnd, ptr @a, ptr @b
+  %x = load atomic i32, ptr %addr unordered, align 4
   ret i32 %x
 }
 
 ; FIXME: This would be legal to transform
 define i32 @test16(i1 %cnd) {
 ; CHECK-LABEL: @test16(
-; CHECK-NEXT:    [[ADDR:%.*]] = select i1 [[CND:%.*]], i32* @a, i32* @b
-; CHECK-NEXT:    [[X:%.*]] = load atomic i32, i32* [[ADDR]] monotonic, align 4
+; CHECK-NEXT:    [[ADDR:%.*]] = select i1 [[CND:%.*]], ptr @a, ptr @b
+; CHECK-NEXT:    [[X:%.*]] = load atomic i32, ptr [[ADDR]] monotonic, align 4
 ; CHECK-NEXT:    ret i32 [[X]]
 ;
-  %addr = select i1 %cnd, i32* @a, i32* @b
-  %x = load atomic i32, i32* %addr monotonic, align 4
+  %addr = select i1 %cnd, ptr @a, ptr @b
+  %x = load atomic i32, ptr %addr monotonic, align 4
   ret i32 %x
 }
 
 ; FIXME: This would be legal to transform
 define i32 @test17(i1 %cnd) {
 ; CHECK-LABEL: @test17(
-; CHECK-NEXT:    [[ADDR:%.*]] = select i1 [[CND:%.*]], i32* @a, i32* @b
-; CHECK-NEXT:    [[X:%.*]] = load atomic i32, i32* [[ADDR]] seq_cst, align 4
+; CHECK-NEXT:    [[ADDR:%.*]] = select i1 [[CND:%.*]], ptr @a, ptr @b
+; CHECK-NEXT:    [[X:%.*]] = load atomic i32, ptr [[ADDR]] seq_cst, align 4
 ; CHECK-NEXT:    ret i32 [[X]]
 ;
-  %addr = select i1 %cnd, i32* @a, i32* @b
-  %x = load atomic i32, i32* %addr seq_cst, align 4
+  %addr = select i1 %cnd, ptr @a, ptr @b
+  %x = load atomic i32, ptr %addr seq_cst, align 4
   ret i32 %x
 }
 
@@ -279,16 +279,16 @@ define i32 @test22(i1 %cnd) {
 ; CHECK-NEXT:    br label [[MERGE]]
 ; CHECK:       merge:
 ; CHECK-NEXT:    [[STOREMERGE:%.*]] = phi i32 [ 2, [[BLOCK2]] ], [ 1, [[BLOCK1]] ]
-; CHECK-NEXT:    store atomic i32 [[STOREMERGE]], i32* @a unordered, align 4
+; CHECK-NEXT:    store atomic i32 [[STOREMERGE]], ptr @a unordered, align 4
 ; CHECK-NEXT:    ret i32 0
 ;
   br i1 %cnd, label %block1, label %block2
 
 block1:
-  store atomic i32 1, i32* @a unordered, align 4
+  store atomic i32 1, ptr @a unordered, align 4
   br label %merge
 block2:
-  store atomic i32 2, i32* @a unordered, align 4
+  store atomic i32 2, ptr @a unordered, align 4
   br label %merge
 
 merge:
@@ -300,10 +300,10 @@ define i32 @test23(i1 %cnd) {
 ; CHECK-LABEL: @test23(
 ; CHECK-NEXT:    br i1 [[CND:%.*]], label [[BLOCK1:%.*]], label [[BLOCK2:%.*]]
 ; CHECK:       block1:
-; CHECK-NEXT:    store atomic i32 1, i32* @a monotonic, align 4
+; CHECK-NEXT:    store atomic i32 1, ptr @a monotonic, align 4
 ; CHECK-NEXT:    br label [[MERGE:%.*]]
 ; CHECK:       block2:
-; CHECK-NEXT:    store atomic i32 2, i32* @a monotonic, align 4
+; CHECK-NEXT:    store atomic i32 2, ptr @a monotonic, align 4
 ; CHECK-NEXT:    br label [[MERGE]]
 ; CHECK:       merge:
 ; CHECK-NEXT:    ret i32 0
@@ -311,10 +311,10 @@ define i32 @test23(i1 %cnd) {
   br i1 %cnd, label %block1, label %block2
 
 block1:
-  store atomic i32 1, i32* @a monotonic, align 4
+  store atomic i32 1, ptr @a monotonic, align 4
   br label %merge
 block2:
-  store atomic i32 2, i32* @a monotonic, align 4
+  store atomic i32 2, ptr @a monotonic, align 4
   br label %merge
 
 merge:
@@ -323,101 +323,95 @@ merge:
 
 declare void @clobber()
 
-define i32 @test18(float* %p) {
+define i32 @test18(ptr %p) {
 ; CHECK-LABEL: @test18(
-; CHECK-NEXT:    [[X:%.*]] = load atomic float, float* [[P:%.*]] unordered, align 4
+; CHECK-NEXT:    [[X:%.*]] = load atomic float, ptr [[P:%.*]] unordered, align 4
 ; CHECK-NEXT:    call void @clobber()
-; CHECK-NEXT:    store atomic float [[X]], float* [[P]] unordered, align 4
+; CHECK-NEXT:    store atomic float [[X]], ptr [[P]] unordered, align 4
 ; CHECK-NEXT:    ret i32 0
 ;
-  %x = load atomic float, float* %p unordered, align 4
+  %x = load atomic float, ptr %p unordered, align 4
   call void @clobber() ;; keep the load around
-  store atomic float %x, float* %p unordered, align 4
+  store atomic float %x, ptr %p unordered, align 4
   ret i32 0
 }
 
 ; TODO: probably also legal in this case
-define i32 @test19(float* %p) {
+define i32 @test19(ptr %p) {
 ; CHECK-LABEL: @test19(
-; CHECK-NEXT:    [[X:%.*]] = load atomic float, float* [[P:%.*]] seq_cst, align 4
+; CHECK-NEXT:    [[X:%.*]] = load atomic float, ptr [[P:%.*]] seq_cst, align 4
 ; CHECK-NEXT:    call void @clobber()
-; CHECK-NEXT:    store atomic float [[X]], float* [[P]] seq_cst, align 4
+; CHECK-NEXT:    store atomic float [[X]], ptr [[P]] seq_cst, align 4
 ; CHECK-NEXT:    ret i32 0
 ;
-  %x = load atomic float, float* %p seq_cst, align 4
+  %x = load atomic float, ptr %p seq_cst, align 4
   call void @clobber() ;; keep the load around
-  store atomic float %x, float* %p seq_cst, align 4
+  store atomic float %x, ptr %p seq_cst, align 4
   ret i32 0
 }
 
-define i32 @test20(i32** %p, i8* %v) {
+define i32 @test20(ptr %p, ptr %v) {
 ; CHECK-LABEL: @test20(
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i32** [[P:%.*]] to i8**
-; CHECK-NEXT:    store atomic i8* [[V:%.*]], i8** [[TMP1]] unordered, align 4
+; CHECK-NEXT:    store atomic ptr [[V:%.*]], ptr [[P:%.*]] unordered, align 4
 ; CHECK-NEXT:    ret i32 0
 ;
-  %cast = bitcast i8* %v to i32*
-  store atomic i32* %cast, i32** %p unordered, align 4
+  store atomic ptr %v, ptr %p unordered, align 4
   ret i32 0
 }
 
-define i32 @test21(i32** %p, i8* %v) {
+define i32 @test21(ptr %p, ptr %v) {
 ; CHECK-LABEL: @test21(
-; CHECK-NEXT:    [[CAST:%.*]] = bitcast i8* [[V:%.*]] to i32*
-; CHECK-NEXT:    store atomic i32* [[CAST]], i32** [[P:%.*]] monotonic, align 4
+; CHECK-NEXT:    store atomic ptr [[V:%.*]], ptr [[P:%.*]] monotonic, align 4
 ; CHECK-NEXT:    ret i32 0
 ;
-  %cast = bitcast i8* %v to i32*
-  store atomic i32* %cast, i32** %p monotonic, align 4
+  store atomic ptr %v, ptr %p monotonic, align 4
   ret i32 0
 }
 
-define void @pr27490a(i8** %p1, i8** %p2) {
+define void @pr27490a(ptr %p1, ptr %p2) {
 ; CHECK-LABEL: @pr27490a(
-; CHECK-NEXT:    [[L:%.*]] = load i8*, i8** [[P1:%.*]], align 8
-; CHECK-NEXT:    store volatile i8* [[L]], i8** [[P2:%.*]], align 8
+; CHECK-NEXT:    [[L:%.*]] = load ptr, ptr [[P1:%.*]], align 8
+; CHECK-NEXT:    store volatile ptr [[L]], ptr [[P2:%.*]], align 8
 ; CHECK-NEXT:    ret void
 ;
-  %l = load i8*, i8** %p1
-  store volatile i8* %l, i8** %p2
+  %l = load ptr, ptr %p1
+  store volatile ptr %l, ptr %p2
   ret void
 }
 
-define void @pr27490b(i8** %p1, i8** %p2) {
+define void @pr27490b(ptr %p1, ptr %p2) {
 ; CHECK-LABEL: @pr27490b(
-; CHECK-NEXT:    [[L:%.*]] = load i8*, i8** [[P1:%.*]], align 8
-; CHECK-NEXT:    store atomic i8* [[L]], i8** [[P2:%.*]] seq_cst, align 8
+; CHECK-NEXT:    [[L:%.*]] = load ptr, ptr [[P1:%.*]], align 8
+; CHECK-NEXT:    store atomic ptr [[L]], ptr [[P2:%.*]] seq_cst, align 8
 ; CHECK-NEXT:    ret void
 ;
-  %l = load i8*, i8** %p1
-  store atomic i8* %l, i8** %p2 seq_cst, align 8
+  %l = load ptr, ptr %p1
+  store atomic ptr %l, ptr %p2 seq_cst, align 8
   ret void
 }
 
 ;; At the moment, we can't form atomic vectors by folding since these are
 ;; not representable in the IR.  This was pr29121.  The right long term
 ;; solution is to extend the IR to handle this case.
-define <2 x float> @no_atomic_vector_load(i64* %p) {
+define <2 x float> @no_atomic_vector_load(ptr %p) {
 ; CHECK-LABEL: @no_atomic_vector_load(
-; CHECK-NEXT:    [[LOAD:%.*]] = load atomic i64, i64* [[P:%.*]] unordered, align 8
+; CHECK-NEXT:    [[LOAD:%.*]] = load atomic i64, ptr [[P:%.*]] unordered, align 8
 ; CHECK-NEXT:    [[DOTCAST:%.*]] = bitcast i64 [[LOAD]] to <2 x float>
 ; CHECK-NEXT:    ret <2 x float> [[DOTCAST]]
 ;
-  %load = load atomic i64, i64* %p unordered, align 8
+  %load = load atomic i64, ptr %p unordered, align 8
   %.cast = bitcast i64 %load to <2 x float>
   ret <2 x float> %.cast
 }
 
-define void @no_atomic_vector_store(<2 x float> %p, i8* %p2) {
+define void @no_atomic_vector_store(<2 x float> %p, ptr %p2) {
 ; CHECK-LABEL: @no_atomic_vector_store(
 ; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x float> [[P:%.*]] to i64
-; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i8* [[P2:%.*]] to i64*
-; CHECK-NEXT:    store atomic i64 [[TMP1]], i64* [[TMP2]] unordered, align 8
+; CHECK-NEXT:    store atomic i64 [[TMP1]], ptr [[P2:%.*]] unordered, align 8
 ; CHECK-NEXT:    ret void
 ;
   %1 = bitcast <2 x float> %p to i64
-  %2 = bitcast i8* %p2 to i64*
-  store atomic i64 %1, i64* %2 unordered, align 8
+  store atomic i64 %1, ptr %p2 unordered, align 8
   ret void
 }
 
@@ -428,7 +422,7 @@ define i32 @atomic_load_from_constant_global() {
 ; CHECK-LABEL: @atomic_load_from_constant_global(
 ; CHECK-NEXT:    ret i32 42
 ;
-  %v = load atomic i32, i32* @c seq_cst, align 4
+  %v = load atomic i32, ptr @c seq_cst, align 4
   ret i32 %v
 }
 
@@ -436,25 +430,25 @@ define i8 @atomic_load_from_constant_global_bitcast() {
 ; CHECK-LABEL: @atomic_load_from_constant_global_bitcast(
 ; CHECK-NEXT:    ret i8 42
 ;
-  %v = load atomic i8, i8* bitcast (i32* @c to i8*) seq_cst, align 1
+  %v = load atomic i8, ptr @c seq_cst, align 1
   ret i8 %v
 }
 
 define void @atomic_load_from_non_constant_global() {
 ; CHECK-LABEL: @atomic_load_from_non_constant_global(
-; CHECK-NEXT:    [[TMP1:%.*]] = load atomic i32, i32* @g seq_cst, align 4
+; CHECK-NEXT:    [[TMP1:%.*]] = load atomic i32, ptr @g seq_cst, align 4
 ; CHECK-NEXT:    ret void
 ;
-  load atomic i32, i32* @g seq_cst, align 4
+  load atomic i32, ptr @g seq_cst, align 4
   ret void
 }
 
 define void @volatile_load_from_constant_global() {
 ; CHECK-LABEL: @volatile_load_from_constant_global(
-; CHECK-NEXT:    [[TMP1:%.*]] = load volatile i32, i32* @c, align 4
+; CHECK-NEXT:    [[TMP1:%.*]] = load volatile i32, ptr @c, align 4
 ; CHECK-NEXT:    ret void
 ;
-  load volatile i32, i32* @c, align 4
+  load volatile i32, ptr @c, align 4
   ret void
 }
 
index 4b01c814def4dda9705bd10c7914f57f41ac6a79..5b4b5b184b068e29f6d3636de09e55721465f757 100644 (file)
 ; - the ordering of atomicrmw is compatible with a load (i.e., no release semantic)
 
 ; CHECK-LABEL: atomic_add_zero
-; CHECK-NEXT: %res = load atomic i32, i32* %addr monotonic, align 4
+; CHECK-NEXT: %res = load atomic i32, ptr %addr monotonic, align 4
 ; CHECK-NEXT: ret i32 %res
-define i32 @atomic_add_zero(i32* %addr) {
-  %res = atomicrmw add i32* %addr, i32 0 monotonic
+define i32 @atomic_add_zero(ptr %addr) {
+  %res = atomicrmw add ptr %addr, i32 0 monotonic
   ret i32 %res
 }
 
 ; CHECK-LABEL: atomic_or_zero
-; CHECK-NEXT: %res = load atomic i32, i32* %addr monotonic, align 4
+; CHECK-NEXT: %res = load atomic i32, ptr %addr monotonic, align 4
 ; CHECK-NEXT: ret i32 %res
-define i32 @atomic_or_zero(i32* %addr) {
-  %res = atomicrmw add i32* %addr, i32 0 monotonic
+define i32 @atomic_or_zero(ptr %addr) {
+  %res = atomicrmw add ptr %addr, i32 0 monotonic
   ret i32 %res
 }
 
 ; CHECK-LABEL: atomic_sub_zero
-; CHECK-NEXT: %res = load atomic i32, i32* %addr monotonic, align 4
+; CHECK-NEXT: %res = load atomic i32, ptr %addr monotonic, align 4
 ; CHECK-NEXT: ret i32 %res
-define i32 @atomic_sub_zero(i32* %addr) {
-  %res = atomicrmw sub i32* %addr, i32 0 monotonic
+define i32 @atomic_sub_zero(ptr %addr) {
+  %res = atomicrmw sub ptr %addr, i32 0 monotonic
   ret i32 %res
 }
 
 ; CHECK-LABEL: atomic_and_allones
-; CHECK-NEXT: %res = load atomic i32, i32* %addr monotonic, align 4
+; CHECK-NEXT: %res = load atomic i32, ptr %addr monotonic, align 4
 ; CHECK-NEXT: ret i32 %res
-define i32 @atomic_and_allones(i32* %addr) {
-  %res = atomicrmw and i32* %addr, i32 -1 monotonic
+define i32 @atomic_and_allones(ptr %addr) {
+  %res = atomicrmw and ptr %addr, i32 -1 monotonic
   ret i32 %res
 }
 ; CHECK-LABEL: atomic_umin_uint_max
-; CHECK-NEXT: %res = load atomic i32, i32* %addr monotonic, align 4
+; CHECK-NEXT: %res = load atomic i32, ptr %addr monotonic, align 4
 ; CHECK-NEXT: ret i32 %res
-define i32 @atomic_umin_uint_max(i32* %addr) {
-  %res = atomicrmw umin i32* %addr, i32 -1 monotonic
+define i32 @atomic_umin_uint_max(ptr %addr) {
+  %res = atomicrmw umin ptr %addr, i32 -1 monotonic
   ret i32 %res
 }
 
 ; CHECK-LABEL: atomic_umax_zero
-; CHECK-NEXT: %res = load atomic i32, i32* %addr monotonic, align 4
+; CHECK-NEXT: %res = load atomic i32, ptr %addr monotonic, align 4
 ; CHECK-NEXT: ret i32 %res
-define i32 @atomic_umax_zero(i32* %addr) {
-  %res = atomicrmw umax i32* %addr, i32 0 monotonic
+define i32 @atomic_umax_zero(ptr %addr) {
+  %res = atomicrmw umax ptr %addr, i32 0 monotonic
   ret i32 %res
 }
 
 ; CHECK-LABEL: atomic_min_smax_char
-; CHECK-NEXT: %res = load atomic i8, i8* %addr monotonic, align 1
+; CHECK-NEXT: %res = load atomic i8, ptr %addr monotonic, align 1
 ; CHECK-NEXT: ret i8 %res
-define i8 @atomic_min_smax_char(i8* %addr) {
-  %res = atomicrmw min i8* %addr, i8 127 monotonic
+define i8 @atomic_min_smax_char(ptr %addr) {
+  %res = atomicrmw min ptr %addr, i8 127 monotonic
   ret i8 %res
 }
 
 ; CHECK-LABEL: atomic_max_smin_char
-; CHECK-NEXT: %res = load atomic i8, i8* %addr monotonic, align 1
+; CHECK-NEXT: %res = load atomic i8, ptr %addr monotonic, align 1
 ; CHECK-NEXT: ret i8 %res
-define i8 @atomic_max_smin_char(i8* %addr) {
-  %res = atomicrmw max i8* %addr, i8 -128 monotonic
+define i8 @atomic_max_smin_char(ptr %addr) {
+  %res = atomicrmw max ptr %addr, i8 -128 monotonic
   ret i8 %res
 }
 
 ; CHECK-LABEL: atomic_fsub
-; CHECK-NEXT: %res = load atomic float, float* %addr monotonic, align 4
+; CHECK-NEXT: %res = load atomic float, ptr %addr monotonic, align 4
 ; CHECK-NEXT: ret float %res
-define float @atomic_fsub_zero(float* %addr) {
-  %res = atomicrmw fsub float* %addr, float 0.0 monotonic
+define float @atomic_fsub_zero(ptr %addr) {
+  %res = atomicrmw fsub ptr %addr, float 0.0 monotonic
   ret float %res
 }
 
 ; CHECK-LABEL: atomic_fadd
-; CHECK-NEXT: %res = load atomic float, float* %addr monotonic, align 4
+; CHECK-NEXT: %res = load atomic float, ptr %addr monotonic, align 4
 ; CHECK-NEXT: ret float %res
-define float @atomic_fadd_zero(float* %addr) {
-  %res = atomicrmw fadd float* %addr, float -0.0 monotonic
+define float @atomic_fadd_zero(ptr %addr) {
+  %res = atomicrmw fadd ptr %addr, float -0.0 monotonic
   ret float %res
 }
 
 ; CHECK-LABEL: atomic_fsub_canon
-; CHECK-NEXT: %res = atomicrmw fadd float* %addr, float -0.000000e+00 release
+; CHECK-NEXT: %res = atomicrmw fadd ptr %addr, float -0.000000e+00 release
 ; CHECK-NEXT: ret float %res
-define float @atomic_fsub_canon(float* %addr) {
-  %res = atomicrmw fsub float* %addr, float 0.0 release
+define float @atomic_fsub_canon(ptr %addr) {
+  %res = atomicrmw fsub ptr %addr, float 0.0 release
   ret float %res
 }
 ; CHECK-LABEL: atomic_fadd_canon
-; CHECK-NEXT: %res = atomicrmw fadd float* %addr, float -0.000000e+00 release
+; CHECK-NEXT: %res = atomicrmw fadd ptr %addr, float -0.000000e+00 release
 ; CHECK-NEXT: ret float %res
-define float @atomic_fadd_canon(float* %addr) {
-  %res = atomicrmw fadd float* %addr, float -0.0 release
+define float @atomic_fadd_canon(ptr %addr) {
+  %res = atomicrmw fadd ptr %addr, float -0.0 release
   ret float %res
 }
 
 ; Can't replace a volatile w/a load; this would eliminate a volatile store.
 ; CHECK-LABEL: atomic_sub_zero_volatile
-; CHECK-NEXT: %res = atomicrmw volatile sub i64* %addr, i64 0 acquire
+; CHECK-NEXT: %res = atomicrmw volatile sub ptr %addr, i64 0 acquire
 ; CHECK-NEXT: ret i64 %res
-define i64 @atomic_sub_zero_volatile(i64* %addr) {
-  %res = atomicrmw volatile sub i64* %addr, i64 0 acquire
+define i64 @atomic_sub_zero_volatile(ptr %addr) {
+  %res = atomicrmw volatile sub ptr %addr, i64 0 acquire
   ret i64 %res
 }
 
 
 ; Check that the transformation properly preserve the syncscope.
 ; CHECK-LABEL: atomic_syncscope
-; CHECK-NEXT: %res = load atomic i16, i16* %addr syncscope("some_syncscope") acquire, align 2
+; CHECK-NEXT: %res = load atomic i16, ptr %addr syncscope("some_syncscope") acquire, align 2
 ; CHECK-NEXT: ret i16 %res
-define i16 @atomic_syncscope(i16* %addr) {
-  %res = atomicrmw or i16* %addr, i16 0 syncscope("some_syncscope") acquire
+define i16 @atomic_syncscope(ptr %addr) {
+  %res = atomicrmw or ptr %addr, i16 0 syncscope("some_syncscope") acquire
   ret i16 %res
 }
 
 ; By eliminating the store part of the atomicrmw, we would get rid of the
 ; release semantic, which is incorrect.  We can canonicalize the operation.
 ; CHECK-LABEL: atomic_seq_cst
-; CHECK-NEXT: %res = atomicrmw or i16* %addr, i16 0 seq_cst
+; CHECK-NEXT: %res = atomicrmw or ptr %addr, i16 0 seq_cst
 ; CHECK-NEXT: ret i16 %res
-define i16 @atomic_seq_cst(i16* %addr) {
-  %res = atomicrmw add i16* %addr, i16 0 seq_cst
+define i16 @atomic_seq_cst(ptr %addr) {
+  %res = atomicrmw add ptr %addr, i16 0 seq_cst
   ret i16 %res
 }
 
 ; Check that the transformation does not apply when the value is changed by
 ; the atomic operation (non zero constant).
 ; CHECK-LABEL: atomic_add_non_zero
-; CHECK-NEXT: %res = atomicrmw add i16* %addr, i16 2 monotonic
+; CHECK-NEXT: %res = atomicrmw add ptr %addr, i16 2 monotonic
 ; CHECK-NEXT: ret i16 %res
-define i16 @atomic_add_non_zero(i16* %addr) {
-  %res = atomicrmw add i16* %addr, i16 2 monotonic
+define i16 @atomic_add_non_zero(ptr %addr) {
+  %res = atomicrmw add ptr %addr, i16 2 monotonic
   ret i16 %res
 }
 
 ; CHECK-LABEL: atomic_xor_zero
-; CHECK-NEXT: %res = load atomic i16, i16* %addr monotonic, align 2
+; CHECK-NEXT: %res = load atomic i16, ptr %addr monotonic, align 2
 ; CHECK-NEXT: ret i16 %res
-define i16 @atomic_xor_zero(i16* %addr) {
-  %res = atomicrmw xor i16* %addr, i16 0 monotonic
+define i16 @atomic_xor_zero(ptr %addr) {
+  %res = atomicrmw xor ptr %addr, i16 0 monotonic
   ret i16 %res
 }
 
 ; Check that the transformation does not apply when the ordering is
 ; incompatible with a load (release).  Do canonicalize.
 ; CHECK-LABEL: atomic_release
-; CHECK-NEXT: %res = atomicrmw or i16* %addr, i16 0 release
+; CHECK-NEXT: %res = atomicrmw or ptr %addr, i16 0 release
 ; CHECK-NEXT: ret i16 %res
-define i16 @atomic_release(i16* %addr) {
-  %res = atomicrmw sub i16* %addr, i16 0 release
+define i16 @atomic_release(ptr %addr) {
+  %res = atomicrmw sub ptr %addr, i16 0 release
   ret i16 %res
 }
 
 ; Check that the transformation does not apply when the ordering is
 ; incompatible with a load (acquire, release).  Do canonicalize.
 ; CHECK-LABEL: atomic_acq_rel
-; CHECK-NEXT: %res = atomicrmw or i16* %addr, i16 0 acq_rel
+; CHECK-NEXT: %res = atomicrmw or ptr %addr, i16 0 acq_rel
 ; CHECK-NEXT: ret i16 %res
-define i16 @atomic_acq_rel(i16* %addr) {
-  %res = atomicrmw xor i16* %addr, i16 0 acq_rel
+define i16 @atomic_acq_rel(ptr %addr) {
+  %res = atomicrmw xor ptr %addr, i16 0 acq_rel
   ret i16 %res
 }
 
 
 ; CHECK-LABEL: sat_or_allones
-; CHECK-NEXT: %res = atomicrmw xchg i32* %addr, i32 -1 monotonic
+; CHECK-NEXT: %res = atomicrmw xchg ptr %addr, i32 -1 monotonic
 ; CHECK-NEXT: ret i32 %res
-define i32 @sat_or_allones(i32* %addr) {
-  %res = atomicrmw or i32* %addr, i32 -1 monotonic
+define i32 @sat_or_allones(ptr %addr) {
+  %res = atomicrmw or ptr %addr, i32 -1 monotonic
   ret i32 %res
 }
 
 ; CHECK-LABEL: sat_and_zero
-; CHECK-NEXT: %res = atomicrmw xchg i32* %addr, i32 0 monotonic
+; CHECK-NEXT: %res = atomicrmw xchg ptr %addr, i32 0 monotonic
 ; CHECK-NEXT: ret i32 %res
-define i32 @sat_and_zero(i32* %addr) {
-  %res = atomicrmw and i32* %addr, i32 0 monotonic
+define i32 @sat_and_zero(ptr %addr) {
+  %res = atomicrmw and ptr %addr, i32 0 monotonic
   ret i32 %res
 }
 ; CHECK-LABEL: sat_umin_uint_min
-; CHECK-NEXT: %res = atomicrmw xchg i32* %addr, i32 0 monotonic
+; CHECK-NEXT: %res = atomicrmw xchg ptr %addr, i32 0 monotonic
 ; CHECK-NEXT: ret i32 %res
-define i32 @sat_umin_uint_min(i32* %addr) {
-  %res = atomicrmw umin i32* %addr, i32 0 monotonic
+define i32 @sat_umin_uint_min(ptr %addr) {
+  %res = atomicrmw umin ptr %addr, i32 0 monotonic
   ret i32 %res
 }
 
 ; CHECK-LABEL: sat_umax_uint_max
-; CHECK-NEXT: %res = atomicrmw xchg i32* %addr, i32 -1 monotonic
+; CHECK-NEXT: %res = atomicrmw xchg ptr %addr, i32 -1 monotonic
 ; CHECK-NEXT: ret i32 %res
-define i32 @sat_umax_uint_max(i32* %addr) {
-  %res = atomicrmw umax i32* %addr, i32 -1 monotonic
+define i32 @sat_umax_uint_max(ptr %addr) {
+  %res = atomicrmw umax ptr %addr, i32 -1 monotonic
   ret i32 %res
 }
 
 ; CHECK-LABEL: sat_min_smin_char
-; CHECK-NEXT: %res = atomicrmw xchg i8* %addr, i8 -128 monotonic
+; CHECK-NEXT: %res = atomicrmw xchg ptr %addr, i8 -128 monotonic
 ; CHECK-NEXT: ret i8 %res
-define i8 @sat_min_smin_char(i8* %addr) {
-  %res = atomicrmw min i8* %addr, i8 -128 monotonic
+define i8 @sat_min_smin_char(ptr %addr) {
+  %res = atomicrmw min ptr %addr, i8 -128 monotonic
   ret i8 %res
 }
 
 ; CHECK-LABEL: sat_max_smax_char
-; CHECK-NEXT: %res = atomicrmw xchg i8* %addr, i8 127 monotonic
+; CHECK-NEXT: %res = atomicrmw xchg ptr %addr, i8 127 monotonic
 ; CHECK-NEXT: ret i8 %res
-define i8 @sat_max_smax_char(i8* %addr) {
-  %res = atomicrmw max i8* %addr, i8 127 monotonic
+define i8 @sat_max_smax_char(ptr %addr) {
+  %res = atomicrmw max ptr %addr, i8 127 monotonic
   ret i8 %res
 }
 
 ; CHECK-LABEL: sat_fadd_nan
-; CHECK-NEXT: %res = atomicrmw xchg double* %addr, double 0x7FF00000FFFFFFFF release
+; CHECK-NEXT: %res = atomicrmw xchg ptr %addr, double 0x7FF00000FFFFFFFF release
 ; CHECK-NEXT: ret double %res
-define double @sat_fadd_nan(double* %addr) {
-  %res = atomicrmw fadd double* %addr, double 0x7FF00000FFFFFFFF release
+define double @sat_fadd_nan(ptr %addr) {
+  %res = atomicrmw fadd ptr %addr, double 0x7FF00000FFFFFFFF release
   ret double %res
 }
 
 ; CHECK-LABEL: sat_fsub_nan
-; CHECK-NEXT: %res = atomicrmw xchg double* %addr, double 0x7FF00000FFFFFFFF release
+; CHECK-NEXT: %res = atomicrmw xchg ptr %addr, double 0x7FF00000FFFFFFFF release
 ; CHECK-NEXT: ret double %res
-define double @sat_fsub_nan(double* %addr) {
-  %res = atomicrmw fsub double* %addr, double 0x7FF00000FFFFFFFF release
+define double @sat_fsub_nan(ptr %addr) {
+  %res = atomicrmw fsub ptr %addr, double 0x7FF00000FFFFFFFF release
   ret double %res
 }
 
 ; CHECK-LABEL: sat_fsub_nan_unused
-; CHECK-NEXT: store atomic double 0x7FF00000FFFFFFFF, double* %addr monotonic, align 8
+; CHECK-NEXT: store atomic double 0x7FF00000FFFFFFFF, ptr %addr monotonic, align 8
 ; CHECK-NEXT: ret void
-define void @sat_fsub_nan_unused(double* %addr) {
-  atomicrmw fsub double* %addr, double 0x7FF00000FFFFFFFF monotonic
+define void @sat_fsub_nan_unused(ptr %addr) {
+  atomicrmw fsub ptr %addr, double 0x7FF00000FFFFFFFF monotonic
   ret void
 }
 
 ; CHECK-LABEL: xchg_unused_monotonic
-; CHECK-NEXT: store atomic i32 0, i32* %addr monotonic, align 4
+; CHECK-NEXT: store atomic i32 0, ptr %addr monotonic, align 4
 ; CHECK-NEXT: ret void
-define void @xchg_unused_monotonic(i32* %addr) {
-  atomicrmw xchg i32* %addr, i32 0 monotonic
+define void @xchg_unused_monotonic(ptr %addr) {
+  atomicrmw xchg ptr %addr, i32 0 monotonic
   ret void
 }
 
 ; CHECK-LABEL: xchg_unused_release
-; CHECK-NEXT: store atomic i32 -1, i32* %addr release, align 4
+; CHECK-NEXT: store atomic i32 -1, ptr %addr release, align 4
 ; CHECK-NEXT: ret void
-define void @xchg_unused_release(i32* %addr) {
-  atomicrmw xchg i32* %addr, i32 -1 release
+define void @xchg_unused_release(ptr %addr) {
+  atomicrmw xchg ptr %addr, i32 -1 release
   ret void
 }
 
 ; CHECK-LABEL: xchg_unused_seq_cst
-; CHECK-NEXT: atomicrmw xchg i32* %addr, i32 0 seq_cst
+; CHECK-NEXT: atomicrmw xchg ptr %addr, i32 0 seq_cst
 ; CHECK-NEXT: ret void
-define void @xchg_unused_seq_cst(i32* %addr) {
-  atomicrmw xchg i32* %addr, i32 0 seq_cst
+define void @xchg_unused_seq_cst(ptr %addr) {
+  atomicrmw xchg ptr %addr, i32 0 seq_cst
   ret void
 }
 
 ; CHECK-LABEL: xchg_unused_volatile
-; CHECK-NEXT: atomicrmw volatile xchg i32* %addr, i32 0 monotonic
+; CHECK-NEXT: atomicrmw volatile xchg ptr %addr, i32 0 monotonic
 ; CHECK-NEXT: ret void
-define void @xchg_unused_volatile(i32* %addr) {
-  atomicrmw volatile xchg i32* %addr, i32 0 monotonic
+define void @xchg_unused_volatile(ptr %addr) {
+  atomicrmw volatile xchg ptr %addr, i32 0 monotonic
   ret void
 }
 
 ; CHECK-LABEL: sat_or_allones_unused
-; CHECK-NEXT: store atomic i32 -1, i32* %addr monotonic, align 4
+; CHECK-NEXT: store atomic i32 -1, ptr %addr monotonic, align 4
 ; CHECK-NEXT: ret void
-define void @sat_or_allones_unused(i32* %addr) {
-  atomicrmw or i32* %addr, i32 -1 monotonic
+define void @sat_or_allones_unused(ptr %addr) {
+  atomicrmw or ptr %addr, i32 -1 monotonic
   ret void
 }
 
 
 ; CHECK-LABEL: undef_operand_unused
-; CHECK-NEXT: atomicrmw or i32* %addr, i32 undef monotonic
+; CHECK-NEXT: atomicrmw or ptr %addr, i32 undef monotonic
 ; CHECK-NEXT: ret void
-define void @undef_operand_unused(i32* %addr) {
-  atomicrmw or i32* %addr, i32 undef monotonic
+define void @undef_operand_unused(ptr %addr) {
+  atomicrmw or ptr %addr, i32 undef monotonic
   ret void
 }
 
 ; CHECK-LABEL: undef_operand_used
-; CHECK-NEXT: %res = atomicrmw or i32* %addr, i32 undef monotonic
+; CHECK-NEXT: %res = atomicrmw or ptr %addr, i32 undef monotonic
 ; CHECK-NEXT: ret i32 %res
-define i32 @undef_operand_used(i32* %addr) {
-  %res = atomicrmw or i32* %addr, i32 undef monotonic
+define i32 @undef_operand_used(ptr %addr) {
+  %res = atomicrmw or ptr %addr, i32 undef monotonic
   ret i32 %res
 }
 
 ; CHECK-LABEL: sat_fmax_inf
-; CHECK-NEXT: %res = atomicrmw xchg double* %addr, double 0x7FF0000000000000 monotonic
+; CHECK-NEXT: %res = atomicrmw xchg ptr %addr, double 0x7FF0000000000000 monotonic
 ; CHECK-NEXT: ret double %res
-define double @sat_fmax_inf(double* %addr) {
-  %res = atomicrmw fmax double* %addr, double 0x7FF0000000000000 monotonic
+define double @sat_fmax_inf(ptr %addr) {
+  %res = atomicrmw fmax ptr %addr, double 0x7FF0000000000000 monotonic
   ret double %res
 }
 
 ; CHECK-LABEL: no_sat_fmax_inf
-; CHECK-NEXT: %res = atomicrmw fmax double* %addr, double 1.000000e-01 monotonic
+; CHECK-NEXT: %res = atomicrmw fmax ptr %addr, double 1.000000e-01 monotonic
 ; CHECK-NEXT: ret double %res
-define double @no_sat_fmax_inf(double* %addr) {
-  %res = atomicrmw fmax double* %addr, double 1.000000e-01 monotonic
+define double @no_sat_fmax_inf(ptr %addr) {
+  %res = atomicrmw fmax ptr %addr, double 1.000000e-01 monotonic
   ret double %res
 }
 
 ; CHECK-LABEL: sat_fmin_inf
-; CHECK-NEXT: %res = atomicrmw xchg double* %addr, double 0xFFF0000000000000 monotonic
+; CHECK-NEXT: %res = atomicrmw xchg ptr %addr, double 0xFFF0000000000000 monotonic
 ; CHECK-NEXT: ret double %res
-define double @sat_fmin_inf(double* %addr) {
-  %res = atomicrmw fmin double* %addr, double 0xFFF0000000000000 monotonic
+define double @sat_fmin_inf(ptr %addr) {
+  %res = atomicrmw fmin ptr %addr, double 0xFFF0000000000000 monotonic
   ret double %res
 }
 
 ; CHECK-LABEL: no_sat_fmin_inf
-; CHECK-NEXT: %res = atomicrmw fmin double* %addr, double 1.000000e-01 monotonic
+; CHECK-NEXT: %res = atomicrmw fmin ptr %addr, double 1.000000e-01 monotonic
 ; CHECK-NEXT: ret double %res
-define double @no_sat_fmin_inf(double* %addr) {
-  %res = atomicrmw fmin double* %addr, double 1.000000e-01 monotonic
+define double @no_sat_fmin_inf(ptr %addr) {
+  %res = atomicrmw fmin ptr %addr, double 1.000000e-01 monotonic
   ret double %res
 }
index 0c4326741faae901c15e2e332957b4d28d5cff76..1db1d7ee4656a56aab4c7136e2e3c1449bbc403b 100644 (file)
@@ -3,16 +3,16 @@
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
 target triple = "x86_64-apple-darwin10.0"
 
-declare noalias i8* @malloc(i64) nounwind allockind("alloc,uninitialized") "alloc-family"="malloc"
-declare void @free(i8*) allockind("free") "alloc-family"="malloc"
+declare noalias ptr @malloc(i64) nounwind allockind("alloc,uninitialized") "alloc-family"="malloc"
+declare void @free(ptr) allockind("free") "alloc-family"="malloc"
 
 ; PR5130
 define i1 @test1() {
-  %A = call noalias i8* @malloc(i64 4) nounwind
-  %B = icmp eq i8* %A, null
-  store i8 0, i8* %A
+  %A = call noalias ptr @malloc(i64 4) nounwind
+  %B = icmp eq ptr %A, null
+  store i8 0, ptr %A
 
-  call void @free(i8* %A)
+  call void @free(ptr %A)
   ret i1 %B
 
 ; CHECK-LABEL: @test1(
@@ -20,22 +20,22 @@ define i1 @test1() {
 }
 
 ; CHECK-LABEL: @test2(
-define noalias i8* @test2() nounwind {
+define noalias ptr @test2() nounwind {
 entry:
 ; CHECK: @malloc
-  %A = call noalias i8* @malloc(i64 4) nounwind
+  %A = call noalias ptr @malloc(i64 4) nounwind
 ; CHECK: icmp eq
-  %tobool = icmp eq i8* %A, null
+  %tobool = icmp eq ptr %A, null
 ; CHECK: br i1
   br i1 %tobool, label %return, label %if.end
 
 if.end:
 ; CHECK: store
-  store i8 7, i8* %A
+  store i8 7, ptr %A
   br label %return
 
 return:
 ; CHECK: phi
-  %retval.0 = phi i8* [ %A, %if.end ], [ null, %entry ]
-  ret i8* %retval.0
+  %retval.0 = phi ptr [ %A, %if.end ], [ null, %entry ]
+  ret ptr %retval.0
 }
index aafdf2b9232c8121406e34cc44d7b0f5847fa584..87e06c5c4988ff8aeaf55a1de50ae9fd6c6ec306 100644 (file)
@@ -9,40 +9,40 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @hel = constant [4 x i8] c"hel\00"
 @hello_u = constant [8 x i8] c"hello_u\00"
 
-declare i32 @bcmp(i8*, i8*, i32)
+declare i32 @bcmp(ptr, ptr, i32)
 
 ; Check bcmp(mem, mem, size) -> 0.
 
-define i32 @test_simplify1(i8* %mem, i32 %size) {
+define i32 @test_simplify1(ptr %mem, i32 %size) {
 ; CHECK-LABEL: @test_simplify1(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %ret = call i32 @bcmp(i8* %mem, i8* %mem, i32 %size)
+  %ret = call i32 @bcmp(ptr %mem, ptr %mem, i32 %size)
   ret i32 %ret
 }
 
 ; Check bcmp(mem1, mem2, 0) -> 0.
 
-define i32 @test_simplify2(i8* %mem1, i8* %mem2) {
+define i32 @test_simplify2(ptr %mem1, ptr %mem2) {
 ; CHECK-LABEL: @test_simplify2(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %ret = call i32 @bcmp(i8* %mem1, i8* %mem2, i32 0)
+  %ret = call i32 @bcmp(ptr %mem1, ptr %mem2, i32 0)
   ret i32 %ret
 }
 
 ;; Check bcmp(mem1, mem2, 1) -> *(unsigned char*)mem1 - *(unsigned char*)mem2.
 
-define i32 @test_simplify3(i8* %mem1, i8* %mem2) {
+define i32 @test_simplify3(ptr %mem1, ptr %mem2) {
 ; CHECK-LABEL: @test_simplify3(
-; CHECK-NEXT:    [[LHSC:%.*]] = load i8, i8* [[MEM1:%.*]], align 1
+; CHECK-NEXT:    [[LHSC:%.*]] = load i8, ptr [[MEM1:%.*]], align 1
 ; CHECK-NEXT:    [[LHSV:%.*]] = zext i8 [[LHSC]] to i32
-; CHECK-NEXT:    [[RHSC:%.*]] = load i8, i8* [[MEM2:%.*]], align 1
+; CHECK-NEXT:    [[RHSC:%.*]] = load i8, ptr [[MEM2:%.*]], align 1
 ; CHECK-NEXT:    [[RHSV:%.*]] = zext i8 [[RHSC]] to i32
 ; CHECK-NEXT:    [[CHARDIFF:%.*]] = sub nsw i32 [[LHSV]], [[RHSV]]
 ; CHECK-NEXT:    ret i32 [[CHARDIFF]]
 ;
-  %ret = call i32 @bcmp(i8* %mem1, i8* %mem2, i32 1)
+  %ret = call i32 @bcmp(ptr %mem1, ptr %mem2, i32 1)
   ret i32 %ret
 }
 
@@ -52,9 +52,7 @@ define i32 @test_simplify4() {
 ; CHECK-LABEL: @test_simplify4(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %mem1 = getelementptr [4 x i8], [4 x i8]* @hel, i32 0, i32 0
-  %mem2 = getelementptr [8 x i8], [8 x i8]* @hello_u, i32 0, i32 0
-  %ret = call i32 @bcmp(i8* %mem1, i8* %mem2, i32 3)
+  %ret = call i32 @bcmp(ptr @hel, ptr @hello_u, i32 3)
   ret i32 %ret
 }
 
@@ -62,9 +60,7 @@ define i32 @test_simplify5() {
 ; CHECK-LABEL: @test_simplify5(
 ; CHECK-NEXT:    ret i32 1
 ;
-  %mem1 = getelementptr [4 x i8], [4 x i8]* @hel, i32 0, i32 0
-  %mem2 = getelementptr [4 x i8], [4 x i8]* @foo, i32 0, i32 0
-  %ret = call i32 @bcmp(i8* %mem1, i8* %mem2, i32 3)
+  %ret = call i32 @bcmp(ptr @hel, ptr @foo, i32 3)
   ret i32 %ret
 }
 
@@ -72,9 +68,7 @@ define i32 @test_simplify6() {
 ; CHECK-LABEL: @test_simplify6(
 ; CHECK-NEXT:    ret i32 -1
 ;
-  %mem1 = getelementptr [4 x i8], [4 x i8]* @foo, i32 0, i32 0
-  %mem2 = getelementptr [4 x i8], [4 x i8]* @hel, i32 0, i32 0
-  %ret = call i32 @bcmp(i8* %mem1, i8* %mem2, i32 3)
+  %ret = call i32 @bcmp(ptr @foo, ptr @hel, i32 3)
   ret i32 %ret
 }
 
@@ -87,11 +81,9 @@ define i1 @test_simplify7(i64 %x, i64 %y) {
 ;
   %x.addr = alloca i64, align 8
   %y.addr = alloca i64, align 8
-  store i64 %x, i64* %x.addr, align 8
-  store i64 %y, i64* %y.addr, align 8
-  %xptr = bitcast i64* %x.addr to i8*
-  %yptr = bitcast i64* %y.addr to i8*
-  %call = call i32 @bcmp(i8* %xptr, i8* %yptr, i32 8)
+  store i64 %x, ptr %x.addr, align 8
+  store i64 %y, ptr %y.addr, align 8
+  %call = call i32 @bcmp(ptr %x.addr, ptr %y.addr, i32 8)
   %cmp = icmp eq i32 %call, 0
   ret i1 %cmp
 }
@@ -105,11 +97,9 @@ define i1 @test_simplify8(i32 %x, i32 %y) {
 ;
   %x.addr = alloca i32, align 4
   %y.addr = alloca i32, align 4
-  store i32 %x, i32* %x.addr, align 4
-  store i32 %y, i32* %y.addr, align 4
-  %xptr = bitcast i32* %x.addr to i8*
-  %yptr = bitcast i32* %y.addr to i8*
-  %call = call i32 @bcmp(i8* %xptr, i8* %yptr, i32 4)
+  store i32 %x, ptr %x.addr, align 4
+  store i32 %y, ptr %y.addr, align 4
+  %call = call i32 @bcmp(ptr %x.addr, ptr %y.addr, i32 4)
   %cmp = icmp eq i32 %call, 0
   ret i1 %cmp
 }
@@ -123,22 +113,20 @@ define i1 @test_simplify9(i16 %x, i16 %y) {
 ;
   %x.addr = alloca i16, align 2
   %y.addr = alloca i16, align 2
-  store i16 %x, i16* %x.addr, align 2
-  store i16 %y, i16* %y.addr, align 2
-  %xptr = bitcast i16* %x.addr to i8*
-  %yptr = bitcast i16* %y.addr to i8*
-  %call = call i32 @bcmp(i8* %xptr, i8* %yptr, i32 2)
+  store i16 %x, ptr %x.addr, align 2
+  store i16 %y, ptr %y.addr, align 2
+  %call = call i32 @bcmp(ptr %x.addr, ptr %y.addr, i32 2)
   %cmp = icmp eq i32 %call, 0
   ret i1 %cmp
 }
 
-define i1 @test_simplify10(i8* %mem1, i8* %mem2, i32 %size) {
+define i1 @test_simplify10(ptr %mem1, ptr %mem2, i32 %size) {
 ; CHECK-LABEL: @test_simplify10(
-; CHECK-NEXT:    [[CALL:%.*]] = call i32 @bcmp(i8* [[MEM1:%.*]], i8* [[MEM2:%.*]], i32 [[SIZE:%.*]])
+; CHECK-NEXT:    [[CALL:%.*]] = call i32 @bcmp(ptr [[MEM1:%.*]], ptr [[MEM2:%.*]], i32 [[SIZE:%.*]])
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %call = call i32 @bcmp(i8* %mem1, i8* %mem2, i32 %size)
+  %call = call i32 @bcmp(ptr %mem1, ptr %mem2, i32 %size)
   %cmp = icmp eq i32 %call, 0
   ret i1 %cmp
 }
index b4c4ef5546f541f8b6149457f3393fa83c90ad91..57bfc4abaa7c35b1d1fef20486faa6269ad5f610 100644 (file)
@@ -1,25 +1,23 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -passes=instcombine -data-layout=p:32:32 -S | FileCheck %s
 
-declare void @bcopy(i8* nocapture readonly, i8* nocapture, i32)
+declare void @bcopy(ptr nocapture readonly, ptr nocapture, i32)
 
-define void @bcopy_memmove(i8* nocapture readonly %a, i8* nocapture %b) {
+define void @bcopy_memmove(ptr nocapture readonly %a, ptr nocapture %b) {
 ; CHECK-LABEL: @bcopy_memmove(
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8* [[A:%.*]] to i64*
-; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i8* [[B:%.*]] to i64*
-; CHECK-NEXT:    [[TMP3:%.*]] = load i64, i64* [[TMP1]], align 1
-; CHECK-NEXT:    store i64 [[TMP3]], i64* [[TMP2]], align 1
+; CHECK-NEXT:    [[TMP3:%.*]] = load i64, ptr [[A:%.*]], align 1
+; CHECK-NEXT:    store i64 [[TMP3]], ptr [[B:%.*]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  tail call void @bcopy(i8* %a, i8* %b, i32 8)
+  tail call void @bcopy(ptr %a, ptr %b, i32 8)
   ret void
 }
 
-define void @bcopy_memmove2(i8* nocapture readonly %a, i8* nocapture %b, i32 %len) {
+define void @bcopy_memmove2(ptr nocapture readonly %a, ptr nocapture %b, i32 %len) {
 ; CHECK-LABEL: @bcopy_memmove2(
-; CHECK-NEXT:    call void @llvm.memmove.p0i8.p0i8.i32(i8* align 1 [[B:%.*]], i8* align 1 [[A:%.*]], i32 [[LEN:%.*]], i1 false)
+; CHECK-NEXT:    call void @llvm.memmove.p0.p0.i32(ptr align 1 [[B:%.*]], ptr align 1 [[A:%.*]], i32 [[LEN:%.*]], i1 false)
 ; CHECK-NEXT:    ret void
 ;
-  tail call void @bcopy(i8* %a, i8* %b, i32 %len)
+  tail call void @bcopy(ptr %a, ptr %b, i32 %len)
   ret void
 }
index a661416b6aa3ef4c86fff4af6e359826154e1116..9cc1a418cc572535292e65e7e8133fd690680cc8 100644 (file)
@@ -736,7 +736,7 @@ end:
   ret i8 %r
 }
 
-define { i64, i32 } @ParseRetVal(i1 %b, { i64, i32 } ()* %x) {
+define { i64, i32 } @ParseRetVal(i1 %b, ptr %x) {
 ; CHECK-LABEL: @ParseRetVal(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[B:%.*]], label [[T:%.*]], label [[F:%.*]]
index c987c2885115d0aca76c30c224725953084d5795..e9f3f1960aab088cf71f5e5229726c43bba23932 100644 (file)
@@ -466,14 +466,12 @@ define <2 x i16> @BitcastInsert(i32 %a) {
 }
 
 ; PR17293
-define <2 x i64> @test7(<2 x i8*>* %arg) nounwind {
+define <2 x i64> @test7(ptr %arg) nounwind {
 ; CHECK-LABEL: @test7(
-; CHECK-NEXT:    [[CAST:%.*]] = bitcast <2 x i8*>* [[ARG:%.*]] to <2 x i64>*
-; CHECK-NEXT:    [[LOAD:%.*]] = load <2 x i64>, <2 x i64>* [[CAST]], align 16
+; CHECK-NEXT:    [[LOAD:%.*]] = load <2 x i64>, ptr [[ARG:%.*]], align 16
 ; CHECK-NEXT:    ret <2 x i64> [[LOAD]]
 ;
-  %cast = bitcast <2 x i8*>* %arg to <2 x i64>*
-  %load = load <2 x i64>, <2 x i64>* %cast, align 16
+  %load = load <2 x i64>, ptr %arg, align 16
   ret <2 x i64> %load
 }
 
@@ -489,75 +487,75 @@ define i8 @test8() {
 
 define void @constant_fold_vector_to_double() {
 ; CHECK-LABEL: @constant_fold_vector_to_double(
-; CHECK-NEXT:    store volatile double 1.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 1.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 1.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 1.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0xFFFFFFFFFFFFFFFF, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0x162E000004D2, double* undef, align 8
-; CHECK-NEXT:    store volatile double bitcast (<2 x i32> <i32 1234, i32 ptrtoint (i32* @g to i32)> to double), double* undef, align 8
-; CHECK-NEXT:    store volatile double 0x400000003F800000, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0.000000e+00, double* undef, align 8
+; CHECK-NEXT:    store volatile double 1.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 1.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 1.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 1.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0xFFFFFFFFFFFFFFFF, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0x162E000004D2, ptr undef, align 8
+; CHECK-NEXT:    store volatile double bitcast (<2 x i32> <i32 1234, i32 ptrtoint (ptr @g to i32)> to double), ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0x400000003F800000, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0.000000e+00, ptr undef, align 8
 ; CHECK-NEXT:    ret void
 ;
-  store volatile double bitcast (<1 x i64> <i64 4607182418800017408> to double), double* undef
-  store volatile double bitcast (<2 x i32> <i32 0, i32 1072693248> to double), double* undef
-  store volatile double bitcast (<4 x i16> <i16 0, i16 0, i16 0, i16 16368> to double), double* undef
-  store volatile double bitcast (<8 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 240, i8 63> to double), double* undef
+  store volatile double bitcast (<1 x i64> <i64 4607182418800017408> to double), ptr undef
+  store volatile double bitcast (<2 x i32> <i32 0, i32 1072693248> to double), ptr undef
+  store volatile double bitcast (<4 x i16> <i16 0, i16 0, i16 0, i16 16368> to double), ptr undef
+  store volatile double bitcast (<8 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 240, i8 63> to double), ptr undef
 
-  store volatile double bitcast (<2 x i32> <i32 -1, i32 -1> to double), double* undef
-  store volatile double bitcast (<2 x i32> <i32 1234, i32 5678> to double), double* undef
+  store volatile double bitcast (<2 x i32> <i32 -1, i32 -1> to double), ptr undef
+  store volatile double bitcast (<2 x i32> <i32 1234, i32 5678> to double), ptr undef
 
-  store volatile double bitcast (<2 x i32> <i32 1234, i32 ptrtoint (i32* @g to i32)> to double), double* undef
-  store volatile double bitcast (<2 x float> <float 1.0, float 2.0> to double), double* undef
+  store volatile double bitcast (<2 x i32> <i32 1234, i32 ptrtoint (ptr @g to i32)> to double), ptr undef
+  store volatile double bitcast (<2 x float> <float 1.0, float 2.0> to double), ptr undef
 
-  store volatile double bitcast (<2 x i32> zeroinitializer to double), double* undef
-  store volatile double bitcast (<4 x i16> zeroinitializer to double), double* undef
-  store volatile double bitcast (<8 x i8> zeroinitializer to double), double* undef
-  store volatile double bitcast (<16 x i4> zeroinitializer to double), double* undef
-  store volatile double bitcast (<32 x i2> zeroinitializer to double), double* undef
-  store volatile double bitcast (<64 x i1> zeroinitializer to double), double* undef
+  store volatile double bitcast (<2 x i32> zeroinitializer to double), ptr undef
+  store volatile double bitcast (<4 x i16> zeroinitializer to double), ptr undef
+  store volatile double bitcast (<8 x i8> zeroinitializer to double), ptr undef
+  store volatile double bitcast (<16 x i4> zeroinitializer to double), ptr undef
+  store volatile double bitcast (<32 x i2> zeroinitializer to double), ptr undef
+  store volatile double bitcast (<64 x i1> zeroinitializer to double), ptr undef
   ret void
 }
 
 define void @constant_fold_vector_to_float() {
 ; CHECK-LABEL: @constant_fold_vector_to_float(
-; CHECK-NEXT:    store volatile float 1.000000e+00, float* undef, align 4
-; CHECK-NEXT:    store volatile float 1.000000e+00, float* undef, align 4
-; CHECK-NEXT:    store volatile float 1.000000e+00, float* undef, align 4
-; CHECK-NEXT:    store volatile float 1.000000e+00, float* undef, align 4
+; CHECK-NEXT:    store volatile float 1.000000e+00, ptr undef, align 4
+; CHECK-NEXT:    store volatile float 1.000000e+00, ptr undef, align 4
+; CHECK-NEXT:    store volatile float 1.000000e+00, ptr undef, align 4
+; CHECK-NEXT:    store volatile float 1.000000e+00, ptr undef, align 4
 ; CHECK-NEXT:    ret void
 ;
-  store volatile float bitcast (<1 x i32> <i32 1065353216> to float), float* undef
-  store volatile float bitcast (<2 x i16> <i16 0, i16 16256> to float), float* undef
-  store volatile float bitcast (<4 x i8> <i8 0, i8 0, i8 128, i8 63> to float), float* undef
-  store volatile float bitcast (<32 x i1> <i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 0> to float), float* undef
+  store volatile float bitcast (<1 x i32> <i32 1065353216> to float), ptr undef
+  store volatile float bitcast (<2 x i16> <i16 0, i16 16256> to float), ptr undef
+  store volatile float bitcast (<4 x i8> <i8 0, i8 0, i8 128, i8 63> to float), ptr undef
+  store volatile float bitcast (<32 x i1> <i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 0> to float), ptr undef
 
   ret void
 }
 
 define void @constant_fold_vector_to_half() {
 ; CHECK-LABEL: @constant_fold_vector_to_half(
-; CHECK-NEXT:    store volatile half 0xH4000, half* undef, align 2
-; CHECK-NEXT:    store volatile half 0xH4000, half* undef, align 2
+; CHECK-NEXT:    store volatile half 0xH4000, ptr undef, align 2
+; CHECK-NEXT:    store volatile half 0xH4000, ptr undef, align 2
 ; CHECK-NEXT:    ret void
 ;
-  store volatile half bitcast (<2 x i8> <i8 0, i8 64> to half), half* undef
-  store volatile half bitcast (<4 x i4> <i4 0, i4 0, i4 0, i4 4> to half), half* undef
+  store volatile half bitcast (<2 x i8> <i8 0, i8 64> to half), ptr undef
+  store volatile half bitcast (<4 x i4> <i4 0, i4 0, i4 0, i4 4> to half), ptr undef
   ret void
 }
 
 ; Ensure that we do not crash when looking at such a weird bitcast.
-define i8* @bitcast_from_single_element_pointer_vector_to_pointer(<1 x i8*> %ptrvec) {
+define ptr @bitcast_from_single_element_pointer_vector_to_pointer(<1 x ptr> %ptrvec) {
 ; CHECK-LABEL: @bitcast_from_single_element_pointer_vector_to_pointer(
-; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x i8*> [[PTRVEC:%.*]], i64 0
-; CHECK-NEXT:    ret i8* [[TMP1]]
+; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x ptr> [[PTRVEC:%.*]], i64 0
+; CHECK-NEXT:    ret ptr [[TMP1]]
 ;
-  %ptr = bitcast <1 x i8*> %ptrvec to i8*
-  ret i8* %ptr
+  %ptr = bitcast <1 x ptr> %ptrvec to ptr
+  ret ptr %ptr
 }
index dad76c15b7c36705d64324d3228f3b068cbaad70..bff97777b6e4ea0ee8b6218f0d93f12892509cb7 100644 (file)
@@ -3,29 +3,28 @@
 
 @Q = internal unnamed_addr global double 1.000000e+00, align 8
 
-define double @test(i1 %c, i64* %p) {
+define double @test(i1 %c, ptr %p) {
 ; CHECK-LABEL: @test(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[IF:%.*]], label [[END:%.*]]
 ; CHECK:       if:
-; CHECK-NEXT:    [[LOAD1:%.*]] = load double, double* @Q, align 8
+; CHECK-NEXT:    [[LOAD1:%.*]] = load double, ptr @Q, align 8
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
 ; CHECK-NEXT:    [[TMP0:%.*]] = phi double [ 0.000000e+00, [[ENTRY:%.*]] ], [ [[LOAD1]], [[IF]] ]
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i64* [[P:%.*]] to double*
-; CHECK-NEXT:    store double [[TMP0]], double* [[TMP1]], align 8
+; CHECK-NEXT:    store double [[TMP0]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    ret double [[TMP0]]
 ;
 entry:
   br i1 %c, label %if, label %end
 
 if:
-  %load = load i64, i64* bitcast (double* @Q to i64*), align 8
+  %load = load i64, ptr @Q, align 8
   br label %end
 
 end:
   %phi = phi i64 [ 0, %entry ], [ %load, %if ]
-  store i64 %phi, i64* %p, align 8
+  store i64 %phi, ptr %p, align 8
   %cast = bitcast i64 %phi to double
   ret double %cast
 
index 1346885f698801e56491608b85fcf033efcb8bd5..f27866b5823c1882ac130a6cc298c184b08dfa15 100644 (file)
@@ -592,14 +592,12 @@ define <2 x i16> @BitcastInsert(i32 %a) {
 }
 
 ; PR17293
-define <2 x i64> @test7(<2 x i8*>* %arg) nounwind {
+define <2 x i64> @test7(ptr %arg) nounwind {
 ; CHECK-LABEL: @test7(
-; CHECK-NEXT:    [[CAST:%.*]] = bitcast <2 x i8*>* [[ARG:%.*]] to <2 x i64>*
-; CHECK-NEXT:    [[LOAD:%.*]] = load <2 x i64>, <2 x i64>* [[CAST]], align 16
+; CHECK-NEXT:    [[LOAD:%.*]] = load <2 x i64>, ptr [[ARG:%.*]], align 16
 ; CHECK-NEXT:    ret <2 x i64> [[LOAD]]
 ;
-  %cast = bitcast <2 x i8*>* %arg to <2 x i64>*
-  %load = load <2 x i64>, <2 x i64>* %cast, align 16
+  %load = load <2 x i64>, ptr %arg, align 16
   ret <2 x i64> %load
 }
 
@@ -615,87 +613,86 @@ define i8 @test8() {
 
 define void @constant_fold_vector_to_double() {
 ; CHECK-LABEL: @constant_fold_vector_to_double(
-; CHECK-NEXT:    store volatile double 1.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 1.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 1.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 1.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0xFFFFFFFFFFFFFFFF, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0x162E000004D2, double* undef, align 8
-; CHECK-NEXT:    store volatile double bitcast (<2 x i32> <i32 1234, i32 ptrtoint (i32* @g to i32)> to double), double* undef, align 8
-; CHECK-NEXT:    store volatile double 0x400000003F800000, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0.000000e+00, double* undef, align 8
-; CHECK-NEXT:    store volatile double 0.000000e+00, double* undef, align 8
+; CHECK-NEXT:    store volatile double 1.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 1.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 1.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 1.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0xFFFFFFFFFFFFFFFF, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0x162E000004D2, ptr undef, align 8
+; CHECK-NEXT:    store volatile double bitcast (<2 x i32> <i32 1234, i32 ptrtoint (ptr @g to i32)> to double), ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0x400000003F800000, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0.000000e+00, ptr undef, align 8
+; CHECK-NEXT:    store volatile double 0.000000e+00, ptr undef, align 8
 ; CHECK-NEXT:    ret void
 ;
-  store volatile double bitcast (<1 x i64> <i64 4607182418800017408> to double), double* undef
-  store volatile double bitcast (<2 x i32> <i32 0, i32 1072693248> to double), double* undef
-  store volatile double bitcast (<4 x i16> <i16 0, i16 0, i16 0, i16 16368> to double), double* undef
-  store volatile double bitcast (<8 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 240, i8 63> to double), double* undef
+  store volatile double bitcast (<1 x i64> <i64 4607182418800017408> to double), ptr undef
+  store volatile double bitcast (<2 x i32> <i32 0, i32 1072693248> to double), ptr undef
+  store volatile double bitcast (<4 x i16> <i16 0, i16 0, i16 0, i16 16368> to double), ptr undef
+  store volatile double bitcast (<8 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 240, i8 63> to double), ptr undef
 
-  store volatile double bitcast (<2 x i32> <i32 -1, i32 -1> to double), double* undef
-  store volatile double bitcast (<2 x i32> <i32 1234, i32 5678> to double), double* undef
+  store volatile double bitcast (<2 x i32> <i32 -1, i32 -1> to double), ptr undef
+  store volatile double bitcast (<2 x i32> <i32 1234, i32 5678> to double), ptr undef
 
-  store volatile double bitcast (<2 x i32> <i32 1234, i32 ptrtoint (i32* @g to i32)> to double), double* undef
-  store volatile double bitcast (<2 x float> <float 1.0, float 2.0> to double), double* undef
+  store volatile double bitcast (<2 x i32> <i32 1234, i32 ptrtoint (ptr @g to i32)> to double), ptr undef
+  store volatile double bitcast (<2 x float> <float 1.0, float 2.0> to double), ptr undef
 
-  store volatile double bitcast (<2 x i32> zeroinitializer to double), double* undef
-  store volatile double bitcast (<4 x i16> zeroinitializer to double), double* undef
-  store volatile double bitcast (<8 x i8> zeroinitializer to double), double* undef
-  store volatile double bitcast (<16 x i4> zeroinitializer to double), double* undef
-  store volatile double bitcast (<32 x i2> zeroinitializer to double), double* undef
-  store volatile double bitcast (<64 x i1> zeroinitializer to double), double* undef
+  store volatile double bitcast (<2 x i32> zeroinitializer to double), ptr undef
+  store volatile double bitcast (<4 x i16> zeroinitializer to double), ptr undef
+  store volatile double bitcast (<8 x i8> zeroinitializer to double), ptr undef
+  store volatile double bitcast (<16 x i4> zeroinitializer to double), ptr undef
+  store volatile double bitcast (<32 x i2> zeroinitializer to double), ptr undef
+  store volatile double bitcast (<64 x i1> zeroinitializer to double), ptr undef
   ret void
 }
 
 define void @constant_fold_vector_to_float() {
 ; CHECK-LABEL: @constant_fold_vector_to_float(
-; CHECK-NEXT:    store volatile float 1.000000e+00, float* undef, align 4
-; CHECK-NEXT:    store volatile float 1.000000e+00, float* undef, align 4
-; CHECK-NEXT:    store volatile float 1.000000e+00, float* undef, align 4
-; CHECK-NEXT:    store volatile float 1.000000e+00, float* undef, align 4
+; CHECK-NEXT:    store volatile float 1.000000e+00, ptr undef, align 4
+; CHECK-NEXT:    store volatile float 1.000000e+00, ptr undef, align 4
+; CHECK-NEXT:    store volatile float 1.000000e+00, ptr undef, align 4
+; CHECK-NEXT:    store volatile float 1.000000e+00, ptr undef, align 4
 ; CHECK-NEXT:    ret void
 ;
-  store volatile float bitcast (<1 x i32> <i32 1065353216> to float), float* undef
-  store volatile float bitcast (<2 x i16> <i16 0, i16 16256> to float), float* undef
-  store volatile float bitcast (<4 x i8> <i8 0, i8 0, i8 128, i8 63> to float), float* undef
-  store volatile float bitcast (<32 x i1> <i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 0> to float), float* undef
+  store volatile float bitcast (<1 x i32> <i32 1065353216> to float), ptr undef
+  store volatile float bitcast (<2 x i16> <i16 0, i16 16256> to float), ptr undef
+  store volatile float bitcast (<4 x i8> <i8 0, i8 0, i8 128, i8 63> to float), ptr undef
+  store volatile float bitcast (<32 x i1> <i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 0, i1 0> to float), ptr undef
 
   ret void
 }
 
 define void @constant_fold_vector_to_half() {
 ; CHECK-LABEL: @constant_fold_vector_to_half(
-; CHECK-NEXT:    store volatile half 0xH4000, half* undef, align 2
-; CHECK-NEXT:    store volatile half 0xH4000, half* undef, align 2
+; CHECK-NEXT:    store volatile half 0xH4000, ptr undef, align 2
+; CHECK-NEXT:    store volatile half 0xH4000, ptr undef, align 2
 ; CHECK-NEXT:    ret void
 ;
-  store volatile half bitcast (<2 x i8> <i8 0, i8 64> to half), half* undef
-  store volatile half bitcast (<4 x i4> <i4 0, i4 0, i4 0, i4 4> to half), half* undef
+  store volatile half bitcast (<2 x i8> <i8 0, i8 64> to half), ptr undef
+  store volatile half bitcast (<4 x i4> <i4 0, i4 0, i4 0, i4 4> to half), ptr undef
   ret void
 }
 
 ; Ensure that we do not crash when looking at such a weird bitcast.
-define i8* @bitcast_from_single_element_pointer_vector_to_pointer(<1 x i8*> %ptrvec) {
+define ptr @bitcast_from_single_element_pointer_vector_to_pointer(<1 x ptr> %ptrvec) {
 ; CHECK-LABEL: @bitcast_from_single_element_pointer_vector_to_pointer(
-; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x i8*> [[PTRVEC:%.*]], i64 0
-; CHECK-NEXT:    ret i8* [[TMP1]]
+; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <1 x ptr> [[PTRVEC:%.*]], i64 0
+; CHECK-NEXT:    ret ptr [[TMP1]]
 ;
-  %ptr = bitcast <1 x i8*> %ptrvec to i8*
-  ret i8* %ptr
+  %ptr = bitcast <1 x ptr> %ptrvec to ptr
+  ret ptr %ptr
 }
 
 declare void @f1()
 declare void @f2()
-define i8* @select_bitcast_unsized_pointer(i1 %c) {
+define ptr @select_bitcast_unsized_pointer(i1 %c) {
 ; CHECK-LABEL: @select_bitcast_unsized_pointer(
-; CHECK-NEXT:    [[B:%.*]] = select i1 [[C:%.*]], i8* bitcast (void ()* @f1 to i8*), i8* bitcast (void ()* @f2 to i8*)
-; CHECK-NEXT:    ret i8* [[B]]
+; CHECK-NEXT:    [[B:%.*]] = select i1 [[C:%.*]], ptr @f1, ptr @f2
+; CHECK-NEXT:    ret ptr [[B]]
 ;
-  %s = select i1 %c, void ()* @f1, void ()* @f2
-  %b = bitcast void ()* %s to i8*
-  ret i8* %b
+  %s = select i1 %c, ptr @f1, ptr @f2
+  ret ptr %s
 }
index 0c175759b154f681200aad480b40262a620ea73a..882bb94faa9e120994f05d0a9875da746adfbb37 100644 (file)
@@ -23,7 +23,7 @@
 ; CHECK: define i32 @fn1
 define i32 @fn1() #0 {
 entry:
-  %b.promoted = load i32, i32* @b, align 4, !tbaa !2
+  %b.promoted = load i32, ptr @b, align 4, !tbaa !2
   br label %for.body
 
 for.body:                                         ; preds = %for.body, %entry
@@ -36,7 +36,7 @@ for.body:                                         ; preds = %for.body, %entry
   br i1 %exitcond, label %for.end, label %for.body
 
 for.end:                                          ; preds = %for.body
-  store i32 %or, i32* @b, align 4, !tbaa !2
+  store i32 %or, ptr @b, align 4, !tbaa !2
   ret i32 undef
 }
 
index 5a3ace16ae0a9e5516ddc872993c4b7c3ca2c8f9..d21d96c4fb1d0b6e1c1e4ec8c0c68e0f4a80a1d5 100644 (file)
@@ -264,14 +264,13 @@ define i4 @shuf_4bits(<4 x i1> %x) {
   ret i4 %cast
 }
 
-define i4 @shuf_load_4bits(<4 x i1> * %p) {
+define i4 @shuf_load_4bits(ptr %p) {
 ; CHECK-LABEL: @shuf_load_4bits(
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i1>* [[P:%.*]] to i4*
-; CHECK-NEXT:    [[X1:%.*]] = load i4, i4* [[TMP1]], align 1
+; CHECK-NEXT:    [[X1:%.*]] = load i4, ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[CAST:%.*]] = call i4 @llvm.bitreverse.i4(i4 [[X1]])
 ; CHECK-NEXT:    ret i4 [[CAST]]
 ;
-  %x = load <4 x i1>, <4 x i1>* %p
+  %x = load <4 x i1>, ptr %p
   %bitreverse = shufflevector <4 x i1> %x, <4 x i1> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
   %cast = bitcast <4 x i1> %bitreverse to i4
   ret i4 %cast
index 5b8ec120c30435f16ae92d24085219b309a0adf3..1df6f8a2a08148c2556a7cb6c28c065531e2e75c 100644 (file)
@@ -1,15 +1,15 @@
 ; RUN: opt < %s -instcombine -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S |\
 ; RUN:    not grep "call void @abort"
 
-@b_rec.0 = external global i32          ; <i32*> [#uses=2]
+@b_rec.0 = external global i32          ; <ptr> [#uses=2]
 
-define void @_Z12h000007_testv(i32* %P) {
+define void @_Z12h000007_testv(ptr %P) {
 entry:
-        %tmp.2 = load i32, i32* @b_rec.0             ; <i32> [#uses=1]
+        %tmp.2 = load i32, ptr @b_rec.0             ; <i32> [#uses=1]
         %tmp.9 = or i32 %tmp.2, -989855744              ; <i32> [#uses=2]
         %tmp.16 = and i32 %tmp.9, -805306369            ; <i32> [#uses=2]
         %tmp.17 = and i32 %tmp.9, -973078529            ; <i32> [#uses=1]
-        store i32 %tmp.17, i32* @b_rec.0
+        store i32 %tmp.17, ptr @b_rec.0
         %tmp.17.shrunk = bitcast i32 %tmp.16 to i32             ; <i32> [#uses=1]
         %tmp.22 = and i32 %tmp.17.shrunk, -1073741824           ; <i32> [#uses=1]
         %tmp.23 = icmp eq i32 %tmp.22, -1073741824              ; <i1> [#uses=1]
@@ -22,7 +22,7 @@ then.0:         ; preds = %entry
 endif.0:                ; preds = %entry
         %tmp.17.shrunk2 = bitcast i32 %tmp.16 to i32            ; <i32> [#uses=1]
         %tmp.27.mask = and i32 %tmp.17.shrunk2, 100663295               ; <i32> [#uses=1]
-        store i32 %tmp.27.mask, i32* %P
+        store i32 %tmp.27.mask, ptr %P
         ret void
 }
 
index af87d238c9da0547b8735fcbe6a43c7575e9f900..70a818242ae565debb70f6a3befd2d8d225959f4 100644 (file)
@@ -26,7 +26,7 @@ define i32 @pat(i32 %x) {
 ; CHECK:       patatino:
 ; CHECK-NEXT:    ret i32 [[X:%.*]]
 ;
-  %y = icmp eq i32 27, ptrtoint(i8* @global to i32)
+  %y = icmp eq i32 27, ptrtoint(ptr @global to i32)
   br i1 %y, label %patatino, label %patatino
 patatino:
   ret i32 %x
index 1e1903f18f1e6f76c44fc247a3417c8e439cb796..394cbb0478bdb4cf321c1d59e010079c3042b625 100644 (file)
@@ -71,15 +71,15 @@ define i32 @lshr12_i32(i32 %x) {
 
 ; negative test - uses
 
-define i32 @lshr8_i32_use(i32 %x, i32* %p) {
+define i32 @lshr8_i32_use(i32 %x, ptr %p) {
 ; CHECK-LABEL: @lshr8_i32_use(
 ; CHECK-NEXT:    [[S:%.*]] = lshr i32 [[X:%.*]], 12
-; CHECK-NEXT:    store i32 [[S]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[S]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = call i32 @llvm.bswap.i32(i32 [[S]])
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %s = lshr i32 %x, 12
-  store i32 %s, i32* %p
+  store i32 %s, ptr %p
   %r = call i32 @llvm.bswap.i32(i32 %s)
   ret i32 %r
 }
@@ -133,15 +133,15 @@ define i64 @shl42_i64(i64 %x) {
 
 ; negative test - uses
 
-define i32 @shl8_i32_use(i32 %x, i32* %p) {
+define i32 @shl8_i32_use(i32 %x, ptr %p) {
 ; CHECK-LABEL: @shl8_i32_use(
 ; CHECK-NEXT:    [[S:%.*]] = shl i32 [[X:%.*]], 8
-; CHECK-NEXT:    store i32 [[S]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[S]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = call i32 @llvm.bswap.i32(i32 [[S]])
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %s = shl i32 %x, 8
-  store i32 %s, i32* %p
+  store i32 %s, ptr %p
   %r = call i32 @llvm.bswap.i32(i32 %s)
   ret i32 %r
 }
index 714d6b3d3903a396c7bd2674056bfb617644eee4..fd114d4c065330d157c5aba55166766e09fa8b6c 100644 (file)
@@ -17,14 +17,13 @@ define i32 @shuf_4bytes(<4 x i8> %x) {
   ret i32 %cast
 }
 
-define i32 @shuf_load_4bytes(<4 x i8>* %p) {
+define i32 @shuf_load_4bytes(ptr %p) {
 ; CHECK-LABEL: @shuf_load_4bytes(
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i8>* [[P:%.*]] to i32*
-; CHECK-NEXT:    [[X1:%.*]] = load i32, i32* [[TMP1]], align 4
+; CHECK-NEXT:    [[X1:%.*]] = load i32, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[CAST:%.*]] = call i32 @llvm.bswap.i32(i32 [[X1]])
 ; CHECK-NEXT:    ret i32 [[CAST]]
 ;
-  %x = load <4 x i8>, <4 x i8>* %p
+  %x = load <4 x i8>, ptr %p
   %bswap = shufflevector <4 x i8> %x, <4 x i8> poison, <4 x i32> <i32 3, i32 2, i32 undef, i32 0>
   %cast = bitcast <4 x i8> %bswap to i32
   ret i32 %cast
index 233b0b9cdf3d83bacca7229d642c567029cab461..09dbff00f00551ff2a2b081e23b1554a8017de1f 100644 (file)
@@ -662,14 +662,13 @@ define i32 @shuf_4bytes(<4 x i8> %x) {
   ret i32 %cast
 }
 
-define i32 @shuf_load_4bytes(<4 x i8>* %p) {
+define i32 @shuf_load_4bytes(ptr %p) {
 ; CHECK-LABEL: @shuf_load_4bytes(
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i8>* [[P:%.*]] to i32*
-; CHECK-NEXT:    [[X1:%.*]] = load i32, i32* [[TMP1]], align 4
+; CHECK-NEXT:    [[X1:%.*]] = load i32, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[CAST:%.*]] = call i32 @llvm.bswap.i32(i32 [[X1]])
 ; CHECK-NEXT:    ret i32 [[CAST]]
 ;
-  %x = load <4 x i8>, <4 x i8>* %p
+  %x = load <4 x i8>, ptr %p
   %bswap = shufflevector <4 x i8> %x, <4 x i8> undef, <4 x i32> <i32 3, i32 2, i32 undef, i32 0>
   %cast = bitcast <4 x i8> %bswap to i32
   ret i32 %cast
@@ -773,9 +772,9 @@ define i32 @funnel_and(i32 %abcd) {
 }
 
 ; Don't attempt to collectBitParts from >128 bit integers
-define i16 @trunc_bswap_i160(i160* %a0) {
+define i16 @trunc_bswap_i160(ptr %a0) {
 ; CHECK-LABEL: @trunc_bswap_i160(
-; CHECK-NEXT:    [[LOAD:%.*]] = load i160, i160* [[A0:%.*]], align 4
+; CHECK-NEXT:    [[LOAD:%.*]] = load i160, ptr [[A0:%.*]], align 4
 ; CHECK-NEXT:    [[LSHR1:%.*]] = lshr i160 [[LOAD]], 136
 ; CHECK-NEXT:    [[CAST1:%.*]] = trunc i160 [[LSHR1]] to i16
 ; CHECK-NEXT:    [[AND1:%.*]] = and i16 [[CAST1]], 255
@@ -785,7 +784,7 @@ define i16 @trunc_bswap_i160(i160* %a0) {
 ; CHECK-NEXT:    [[OR:%.*]] = or i16 [[AND1]], [[SHL]]
 ; CHECK-NEXT:    ret i16 [[OR]]
 ;
-  %load = load i160, i160* %a0, align 4
+  %load = load i160, ptr %a0, align 4
   %lshr0 = lshr i160 %load, 128
   %lshr1 = lshr i160 %load, 136
   %cast0 = trunc i160 %lshr0 to i16
index 7960ac93c002888071ab541602ed47bd495a63b2..763645088bde5ccc9aebe616f42ad8c9fe6c3e01 100644 (file)
@@ -6,9 +6,9 @@ target triple = "x86_64-apple-macosx10.14.0"
 ; Function Attrs: nounwind ssp uwtable
 define i64 @weird_identity_but_ok(i64 %sz) {
 entry:
-  %call = tail call i8* @malloc(i64 %sz)
-  %calc_size = tail call i64 @llvm.objectsize.i64.p0i8(i8* %call, i1 false, i1 true, i1 true)
-  tail call void @free(i8* %call)
+  %call = tail call ptr @malloc(i64 %sz)
+  %calc_size = tail call i64 @llvm.objectsize.i64.p0(ptr %call, i1 false, i1 true, i1 true)
+  tail call void @free(ptr %call)
   ret i64 %calc_size
 }
 
@@ -22,16 +22,16 @@ entry:
   br i1 %which, label %first_label, label %second_label
 
 first_label:
-  %first_call = call i8* @malloc(i64 10)
+  %first_call = call ptr @malloc(i64 10)
   br label %join_label
 
 second_label:
-  %second_call = call i8* @malloc(i64 30)
+  %second_call = call ptr @malloc(i64 30)
   br label %join_label
 
 join_label:
-  %joined = phi i8* [ %first_call, %first_label ], [ %second_call, %second_label ]
-  %calc_size = tail call i64 @llvm.objectsize.i64.p0i8(i8* %joined, i1 false, i1 true, i1 true)
+  %joined = phi ptr [ %first_call, %first_label ], [ %second_call, %second_label ]
+  %calc_size = tail call i64 @llvm.objectsize.i64.p0(ptr %joined, i1 false, i1 true, i1 true)
   ret i64 %calc_size
 }
 
@@ -40,9 +40,9 @@ join_label:
 
 define i64 @internal_pointer(i64 %sz) {
 entry:
-  %ptr = call i8* @malloc(i64 %sz)
-  %ptr2 = getelementptr inbounds i8, i8* %ptr, i32 2
-  %calc_size = call i64 @llvm.objectsize.i64.p0i8(i8* %ptr2, i1 false, i1 true, i1 true)
+  %ptr = call ptr @malloc(i64 %sz)
+  %ptr2 = getelementptr inbounds i8, ptr %ptr, i32 2
+  %calc_size = call i64 @llvm.objectsize.i64.p0(ptr %ptr2, i1 false, i1 true, i1 true)
   ret i64 %calc_size
 }
 
@@ -54,16 +54,16 @@ entry:
 
 define i64 @uses_nullptr_no_fold() {
 entry:
-  %res = call i64 @llvm.objectsize.i64.p0i8(i8* null, i1 false, i1 true, i1 true)
+  %res = call i64 @llvm.objectsize.i64.p0(ptr null, i1 false, i1 true, i1 true)
   ret i64 %res
 }
 
-; CHECK: %res = call i64 @llvm.objectsize.i64.p0i8(i8* null, i1 false, i1 true, i1 true)
+; CHECK: %res = call i64 @llvm.objectsize.i64.p0(ptr null, i1 false, i1 true, i1 true)
 
 define i64 @uses_nullptr_fold() {
 entry:
   ; NOTE: the third parameter to this call is false, unlike above.
-  %res = call i64 @llvm.objectsize.i64.p0i8(i8* null, i1 false, i1 false, i1 true)
+  %res = call i64 @llvm.objectsize.i64.p0(ptr null, i1 false, i1 false, i1 true)
   ret i64 %res
 }
 
@@ -75,22 +75,22 @@ entry:
 ; Function Attrs: nounwind
 define void @f() {
 entry:
-  %.pr = load i32, i32* @c, align 4
+  %.pr = load i32, ptr @c, align 4
   %tobool4 = icmp eq i32 %.pr, 0
   br i1 %tobool4, label %for.end, label %for.body
 
 for.body:                                         ; preds = %entry, %for.body
-  %dp.05 = phi i8* [ %add.ptr, %for.body ], [ @d, %entry ]
-  %0 = tail call i64 @llvm.objectsize.i64.p0i8(i8* %dp.05, i1 false, i1 true, i1 true)
+  %dp.05 = phi ptr [ %add.ptr, %for.body ], [ @d, %entry ]
+  %0 = tail call i64 @llvm.objectsize.i64.p0(ptr %dp.05, i1 false, i1 true, i1 true)
   %conv = trunc i64 %0 to i32
   tail call void @bury(i32 %conv) #3
-  %1 = load i32, i32* @c, align 4
+  %1 = load i32, ptr @c, align 4
   %idx.ext = sext i32 %1 to i64
   %add.ptr.offs = add i64 %idx.ext, 0
   %2 = add i64 undef, %add.ptr.offs
-  %add.ptr = getelementptr inbounds i8, i8* %dp.05, i64 %idx.ext
+  %add.ptr = getelementptr inbounds i8, ptr %dp.05, i64 %idx.ext
   %add = shl nsw i32 %1, 1
-  store i32 %add, i32* @c, align 4
+  store i32 %add, ptr @c, align 4
   %tobool = icmp eq i32 %1, 0
   br i1 %tobool, label %for.end, label %for.body
 
@@ -99,21 +99,21 @@ for.end:                                          ; preds = %for.body, %entry
 }
 
 ; CHECK:   define void @f()
-; CHECK:     call i64 @llvm.objectsize.i64.p0i8(
+; CHECK:     call i64 @llvm.objectsize.i64.p0(
 
 define void @bdos_cmpm1(i64 %alloc) {
 entry:
-  %obj = call i8* @malloc(i64 %alloc)
-  %objsize = call i64 @llvm.objectsize.i64.p0i8(i8* %obj, i1 0, i1 0, i1 1)
+  %obj = call ptr @malloc(i64 %alloc)
+  %objsize = call i64 @llvm.objectsize.i64.p0(ptr %obj, i1 0, i1 0, i1 1)
   %cmp.not = icmp eq i64 %objsize, -1
   br i1 %cmp.not, label %if.else, label %if.then
 
 if.then:
-  call void @fortified_chk(i8* %obj, i64 %objsize)
+  call void @fortified_chk(ptr %obj, i64 %objsize)
   br label %if.end
 
 if.else:
-  call void @unfortified(i8* %obj, i64 %objsize)
+  call void @unfortified(ptr %obj, i64 %objsize)
   br label %if.end
 
 if.end:                                           ; preds = %if.else, %if.then
@@ -124,22 +124,22 @@ if.end:                                           ; preds = %if.else, %if.then
 ; CHECK:    [[TMP:%.*]] = icmp ne i64 %alloc, -1
 ; CHECK-NEXT:    call void @llvm.assume(i1 [[TMP]])
 ; CHECK-NEXT:    br i1 false, label %if.else, label %if.then
-; CHECK:    call void @fortified_chk(i8* %obj, i64 %alloc)
+; CHECK:    call void @fortified_chk(ptr %obj, i64 %alloc)
 
 define void @bdos_cmpm1_expr(i64 %alloc, i64 %part) {
 entry:
   %sz = udiv i64 %alloc, %part
-  %obj = call i8* @malloc(i64 %sz)
-  %objsize = call i64 @llvm.objectsize.i64.p0i8(i8* %obj, i1 0, i1 0, i1 1)
+  %obj = call ptr @malloc(i64 %sz)
+  %objsize = call i64 @llvm.objectsize.i64.p0(ptr %obj, i1 0, i1 0, i1 1)
   %cmp.not = icmp eq i64 %objsize, -1
   br i1 %cmp.not, label %if.else, label %if.then
 
 if.then:
-  call void @fortified_chk(i8* %obj, i64 %objsize)
+  call void @fortified_chk(ptr %obj, i64 %objsize)
   br label %if.end
 
 if.else:
-  call void @unfortified(i8* %obj, i64 %objsize)
+  call void @unfortified(ptr %obj, i64 %objsize)
   br label %if.end
 
 if.end:                                           ; preds = %if.else, %if.then
@@ -150,7 +150,7 @@ if.end:                                           ; preds = %if.else, %if.then
 ; CHECK:    [[TMP:%.*]] = icmp ne i64 [[SZ:%.*]], -1
 ; CHECK-NEXT:    call void @llvm.assume(i1 [[TMP]])
 ; CHECK-NEXT:    br i1 false, label %if.else, label %if.then
-; CHECK:    call void @fortified_chk(i8* %obj, i64 [[SZ]])
+; CHECK:    call void @fortified_chk(ptr %obj, i64 [[SZ]])
 
 @p7 = internal addrspace(7) global i8 0
 
@@ -165,11 +165,11 @@ define i64 @as_cast(i1 %c) {
 ; CHECK:  ret i64 [[TMP1]]
 ;
 entry:
-  %p0 = tail call i8* @malloc(i64 64)
-  %gep = getelementptr i8, i8 addrspace(7)* @p7, i32 1
-  %as = addrspacecast i8 addrspace(7)* %gep to i8*
-  %select = select i1 %c, i8* %p0, i8* %as
-  %calc_size = tail call i64 @llvm.objectsize.i64.p0i8(i8* %select, i1 false, i1 true, i1 true)
+  %p0 = tail call ptr @malloc(i64 64)
+  %gep = getelementptr i8, ptr addrspace(7) @p7, i32 1
+  %as = addrspacecast ptr addrspace(7) %gep to ptr
+  %select = select i1 %c, ptr %p0, ptr %as
+  %calc_size = tail call i64 @llvm.objectsize.i64.p0(ptr %select, i1 false, i1 true, i1 true)
   ret i64 %calc_size
 }
 
@@ -183,25 +183,25 @@ define i64 @constexpr_as_cast(i1 %c) {
 ; CHECK:  ret i64 [[TMP1]]
 ;
 entry:
-  %p0 = tail call i8* @malloc(i64 64)
-  %select = select i1 %c, i8* %p0, i8* addrspacecast (i8 addrspace(7)* getelementptr (i8, i8 addrspace(7)* @p7, i32 1) to i8*)
-  %calc_size = tail call i64 @llvm.objectsize.i64.p0i8(i8* %select, i1 false, i1 true, i1 true)
+  %p0 = tail call ptr @malloc(i64 64)
+  %select = select i1 %c, ptr %p0, ptr addrspacecast (ptr addrspace(7) getelementptr (i8, ptr addrspace(7) @p7, i32 1) to ptr)
+  %calc_size = tail call i64 @llvm.objectsize.i64.p0(ptr %select, i1 false, i1 true, i1 true)
   ret i64 %calc_size
 }
 
 declare void @bury(i32) local_unnamed_addr #2
 
 ; Function Attrs: nounwind allocsize(0)
-declare i8* @malloc(i64) nounwind allocsize(0) allockind("alloc,uninitialized") "alloc-family"="malloc"
+declare ptr @malloc(i64) nounwind allocsize(0) allockind("alloc,uninitialized") "alloc-family"="malloc"
 
-declare i8* @get_unknown_buffer()
+declare ptr @get_unknown_buffer()
 
 ; Function Attrs: nounwind
-declare void @free(i8* nocapture) nounwind allockind("free") "alloc-family"="malloc"
+declare void @free(ptr nocapture) nounwind allockind("free") "alloc-family"="malloc"
 
 ; Function Attrs: nounwind readnone speculatable
-declare i64 @llvm.objectsize.i64.p0i8(i8*, i1, i1, i1)
+declare i64 @llvm.objectsize.i64.p0(ptr, i1, i1, i1)
 
-declare void @fortified_chk(i8*, i64)
+declare void @fortified_chk(ptr, i64)
 
-declare void @unfortified(i8*, i64)
+declare void @unfortified(ptr, i64)
index 151c5b04ca48b794d029fd2c8cf2afa16b750e2f..fe8b321114e47d13d90151577c177c950ac13978 100644 (file)
@@ -4,9 +4,9 @@ target datalayout = "e-m:o-p:40:64:64:32-i64:64-f80:128-n8:16:32:64-S128"
 ; check that memory builtins can be handled.
 define i64 @objsize1_custom_idx(i64 %sz) {
 entry:
-  %ptr = call i8* @malloc(i64 %sz)
-  %ptr2 = getelementptr inbounds i8, i8* %ptr, i32 2
-  %calc_size = call i64 @llvm.objectsize.i64.p0i8(i8* %ptr2, i1 false, i1 true, i1 true)
+  %ptr = call ptr @malloc(i64 %sz)
+  %ptr2 = getelementptr inbounds i8, ptr %ptr, i32 2
+  %calc_size = call i64 @llvm.objectsize.i64.p0(ptr %ptr2, i1 false, i1 true, i1 true)
   ret i64 %calc_size
 }
 
@@ -15,18 +15,16 @@ entry:
 define i32 @objsize2_custom_idx() #0 {
 entry:
   %var = alloca %struct.V, align 4
-  %0 = bitcast %struct.V* %var to i8*
-  call void @llvm.lifetime.start.p0i8(i64 28, i8* %0) #3
-  %buf1 = getelementptr inbounds %struct.V, %struct.V* %var, i32 0, i32 0
-  %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %buf1, i64 0, i64 1
-  %1 = call i64 @llvm.objectsize.i64.p0i8(i8* %arrayidx, i1 false, i1 false, i1 false)
-  %conv = trunc i64 %1 to i32
-  call void @llvm.lifetime.end.p0i8(i64 28, i8* %0) #3
+  call void @llvm.lifetime.start.p0(i64 28, ptr %var) #3
+  %arrayidx = getelementptr inbounds [10 x i8], ptr %var, i64 0, i64 1
+  %0 = call i64 @llvm.objectsize.i64.p0(ptr %arrayidx, i1 false, i1 false, i1 false)
+  %conv = trunc i64 %0 to i32
+  call void @llvm.lifetime.end.p0(i64 28, ptr %var) #3
   ret i32 %conv
 ; CHECK: ret i32 27
 }
 
-declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #1
-declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #1
-declare i8* @malloc(i64)
-declare i64 @llvm.objectsize.i64.p0i8(i8*, i1, i1, i1)
+declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #1
+declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #1
+declare ptr @malloc(i64)
+declare i64 @llvm.objectsize.i64.p0(ptr, i1, i1, i1)
index cb6c2186099e98779814973efaa8b5b01a6b0cae..b8919a76b122a29557617d92d735dddb5d28e9e2 100644 (file)
@@ -25,34 +25,32 @@ define i32 @foo1(i32 %N) {
 entry:
   %Big = alloca [20 x i8], align 16
   %Small = alloca [10 x i8], align 1
-  %0 = getelementptr inbounds [20 x i8], [20 x i8]* %Big, i64 0, i64 0
-  call void @llvm.lifetime.start.p0i8(i64 20, i8* %0)
-  %1 = getelementptr inbounds [10 x i8], [10 x i8]* %Small, i64 0, i64 0
-  call void @llvm.lifetime.start.p0i8(i64 10, i8* %1)
+  call void @llvm.lifetime.start.p0(i64 20, ptr %Big)
+  call void @llvm.lifetime.start.p0(i64 10, ptr %Small)
   %tobool = icmp ne i32 %N, 0
-  %add.ptr = getelementptr inbounds [20 x i8], [20 x i8]* %Big, i64 0, i64 10
-  %cond = select i1 %tobool, i8* %add.ptr, i8* %1
-  %2 = call i64 @llvm.objectsize.i64.p0i8(i8* %cond, i1 false)
-  %conv = trunc i64 %2 to i32
-  call void @llvm.lifetime.end.p0i8(i64 10, i8* %1)
-  call void @llvm.lifetime.end.p0i8(i64 20, i8* %0)
+  %add.ptr = getelementptr inbounds [20 x i8], ptr %Big, i64 0, i64 10
+  %cond = select i1 %tobool, ptr %add.ptr, ptr %Small
+  %0 = call i64 @llvm.objectsize.i64.p0(ptr %cond, i1 false)
+  %conv = trunc i64 %0 to i32
+  call void @llvm.lifetime.end.p0(i64 10, ptr %Small)
+  call void @llvm.lifetime.end.p0(i64 20, ptr %Big)
   ret i32 %conv
 ; CHECK: ret i32 10 
 }
 
-declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
+declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
 
-declare i64 @llvm.objectsize.i64.p0i8(i8*, i1)
+declare i64 @llvm.objectsize.i64.p0(ptr, i1)
 
-declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)
+declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
 
 define void @foo() {
 entry:
   %call = tail call i32 @foo1(i32 0)
   %conv = sext i32 %call to i64
-  %call1 = tail call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i64 %conv)
+  %call1 = tail call i32 (ptr, ...) @printf(ptr @.str, i64 %conv)
   ret void
 }
 
-declare i32 @printf(i8* nocapture readonly, ...)
+declare i32 @printf(ptr nocapture readonly, ...)
 
index 0fb26baa75e4b322ad90572adec61144611c61f2..533451f26666a6e01274cc0f4290f483110a75fc 100644 (file)
@@ -18,13 +18,11 @@ define i32 @foo() #0 {
 ; CHECK-NEXT:    ret i32 27
 ;
   %var = alloca %struct.V, align 4
-  %t0 = bitcast %struct.V* %var to i8*
-  call void @llvm.lifetime.start.p0i8(i64 28, i8* %t0) #3
-  %buf1 = getelementptr inbounds %struct.V, %struct.V* %var, i32 0, i32 0
-  %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %buf1, i64 0, i64 1
-  %t1 = call i64 @llvm.objectsize.i64.p0i8(i8* %arrayidx, i1 false)
+  call void @llvm.lifetime.start.p0(i64 28, ptr %var) #3
+  %arrayidx = getelementptr inbounds [10 x i8], ptr %var, i64 0, i64 1
+  %t1 = call i64 @llvm.objectsize.i64.p0(ptr %arrayidx, i1 false)
   %conv = trunc i64 %t1 to i32
-  call void @llvm.lifetime.end.p0i8(i64 28, i8* %t0) #3
+  call void @llvm.lifetime.end.p0(i64 28, ptr %var) #3
   ret i32 %conv
 }
 
@@ -36,40 +34,38 @@ define void @PR43723() {
 ; CHECK-NEXT:    ret void
 ;
   %tab = alloca [10 x i8], align 16
-  %t0 = bitcast [10 x i8]* %tab to i8*
-  call void @llvm.memset.p0i8.i64(i8* align 16 %t0, i8 9, i64 10, i1 false)
-  %t1 = call {}* @llvm.invariant.start.p0i8(i64 10, i8* align 16 %t0)
-  call void @llvm.invariant.end.p0i8({}* %t1, i64 10, i8* align 16 %t0)
+  call void @llvm.memset.p0.i64(ptr align 16 %tab, i8 9, i64 10, i1 false)
+  %t1 = call ptr @llvm.invariant.start.p0(i64 10, ptr align 16 %tab)
+  call void @llvm.invariant.end.p0(ptr %t1, i64 10, ptr align 16 %tab)
   ret void
 
-  uselistorder i8* %t0, { 1, 0, 2 }
+  uselistorder ptr %tab, { 1, 0, 2 }
 }
 
-define void @unknown_use_of_invariant_start({}** %p) {
+define void @unknown_use_of_invariant_start(ptr %p) {
 ; CHECK-LABEL: @unknown_use_of_invariant_start(
 ; CHECK-NEXT:    ret void
 ;
   %tab = alloca [10 x i8], align 16
-  %t0 = bitcast [10 x i8]* %tab to i8*
-  call void @llvm.memset.p0i8.i64(i8* align 16 %t0, i8 9, i64 10, i1 false)
-  %t1 = call {}* @llvm.invariant.start.p0i8(i64 10, i8* align 16 %t0)
-  call void @llvm.invariant.end.p0i8({}* %t1, i64 10, i8* align 16 %t0)
-  store {}* %t1, {}** %p
+  call void @llvm.memset.p0.i64(ptr align 16 %tab, i8 9, i64 10, i1 false)
+  %t1 = call ptr @llvm.invariant.start.p0(i64 10, ptr align 16 %tab)
+  call void @llvm.invariant.end.p0(ptr %t1, i64 10, ptr align 16 %tab)
+  store ptr %t1, ptr %p
   ret void
 }
 
-define {}* @minimal_invariant_start_use(i8 %x) {
+define ptr @minimal_invariant_start_use(i8 %x) {
 ; CHECK-LABEL: @minimal_invariant_start_use(
-; CHECK-NEXT:    ret {}* poison
+; CHECK-NEXT:    ret ptr poison
 ;
   %a = alloca i8
-  %i = call {}* @llvm.invariant.start.p0i8(i64 1, i8* %a)
-  ret {}* %i
+  %i = call ptr @llvm.invariant.start.p0(i64 1, ptr %a)
+  ret ptr %i
 }
 
-declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #1
-declare i64 @llvm.objectsize.i64.p0i8(i8*, i1) #2
-declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #1
-declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #0
-declare {}* @llvm.invariant.start.p0i8(i64 immarg, i8* nocapture) #0
-declare void @llvm.invariant.end.p0i8({}*, i64 immarg, i8* nocapture) #0
+declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #1
+declare i64 @llvm.objectsize.i64.p0(ptr, i1) #2
+declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #1
+declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #0
+declare ptr @llvm.invariant.start.p0(i64 immarg, ptr nocapture) #0
+declare void @llvm.invariant.end.p0(ptr, i64 immarg, ptr nocapture) #0
index 4d21693c6d5f236bbac5338dfd81eaed90a23880..f8bbe74a8c37356d5712f1ff182bdd9d488f767f 100644 (file)
@@ -5,12 +5,12 @@
 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"
 
-declare dso_local noalias noundef i8* @malloc(i64 noundef) local_unnamed_addr
-declare i64 @llvm.objectsize.i64.p0i8(i8*, i1 immarg, i1 immarg, i1 immarg)
-declare noalias i8* @strdup(i8*);
-declare noalias i8* @__strdup(i8*);
-declare noalias i8* @strndup(i8*, i64);
-declare noalias i8* @__strndup(i8*, i64);
+declare dso_local noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr
+declare i64 @llvm.objectsize.i64.p0(ptr, i1 immarg, i1 immarg, i1 immarg)
+declare noalias ptr @strdup(ptr);
+declare noalias ptr @__strdup(ptr);
+declare noalias ptr @strndup(ptr, i64);
+declare noalias ptr @__strndup(ptr, i64);
 
 @str = dso_local constant [11 x i8] c"toulbroc'h\00"
 
@@ -18,8 +18,8 @@ define dso_local i64 @check_strdup(i32 noundef %n) local_unnamed_addr {
 ; CHECK-LABEL: @check_strdup(
 ; CHECK-NEXT:    ret i64 11
 ;
-  %ptr = call noalias i8* @strdup(i8* noundef getelementptr inbounds ([11 x i8], [11 x i8]* @str, i64 0, i64 0))
-  %size = call i64 @llvm.objectsize.i64.p0i8(i8* %ptr, i1 false, i1 true, i1 false)
+  %ptr = call noalias ptr @strdup(ptr noundef @str)
+  %size = call i64 @llvm.objectsize.i64.p0(ptr %ptr, i1 false, i1 true, i1 false)
   ret i64 %size
 }
 
@@ -27,8 +27,8 @@ define dso_local i64 @check_dunder_strdup(i32 noundef %n) local_unnamed_addr {
 ; CHECK-LABEL: @check_dunder_strdup(
 ; CHECK-NEXT:    ret i64 11
 ;
-  %ptr = call noalias i8* @__strdup(i8* noundef getelementptr inbounds ([11 x i8], [11 x i8]* @str, i64 0, i64 0))
-  %size = call i64 @llvm.objectsize.i64.p0i8(i8* %ptr, i1 false, i1 true, i1 false)
+  %ptr = call noalias ptr @__strdup(ptr noundef @str)
+  %size = call i64 @llvm.objectsize.i64.p0(ptr %ptr, i1 false, i1 true, i1 false)
   ret i64 %size
 }
 
@@ -36,8 +36,8 @@ define dso_local i64 @check_strndup(i32 noundef %n) local_unnamed_addr {
 ; CHECK-LABEL: @check_strndup(
 ; CHECK-NEXT:    ret i64 5
 ;
-  %ptr = call noalias i8* @strndup(i8* noundef getelementptr inbounds ([11 x i8], [11 x i8]* @str, i64 0, i64 0), i64 4)
-  %size = call i64 @llvm.objectsize.i64.p0i8(i8* %ptr, i1 false, i1 true, i1 false)
+  %ptr = call noalias ptr @strndup(ptr noundef @str, i64 4)
+  %size = call i64 @llvm.objectsize.i64.p0(ptr %ptr, i1 false, i1 true, i1 false)
   ret i64 %size
 }
 
@@ -45,7 +45,7 @@ define dso_local i64 @check_dunder_strndup(i32 noundef %n) local_unnamed_addr {
 ; CHECK-LABEL: @check_dunder_strndup(
 ; CHECK-NEXT:    ret i64 5
 ;
-  %ptr = call noalias i8* @__strndup(i8* noundef getelementptr inbounds ([11 x i8], [11 x i8]* @str, i64 0, i64 0), i64 4)
-  %size = call i64 @llvm.objectsize.i64.p0i8(i8* %ptr, i1 false, i1 true, i1 false)
+  %ptr = call noalias ptr @__strndup(ptr noundef @str, i64 4)
+  %size = call i64 @llvm.objectsize.i64.p0(ptr %ptr, i1 false, i1 true, i1 false)
   ret i64 %size
 }
index 4e27ceb194a435ff9c1d0b2fc9a24ab829f68a09..cdfb16f67d59faefc1c1de121deafd60f0f2b96d 100644 (file)
@@ -1,22 +1,22 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 ; Verify that a cdecl-compatible calling convention does not trigger emitting
-; unreachable idom `store i1 true, i1* undef`.
+; unreachable idom `store i1 true, ptr undef`.
 
-define arm_aapcs_vfpcc i8 @bar(i8* %0) {
+define arm_aapcs_vfpcc i8 @bar(ptr %0) {
 ; CHECK-LABEL: @bar(
-; CHECK-NEXT:    [[TMP2:%.*]] = load i8, i8* [[TMP0:%.*]], align 1
+; CHECK-NEXT:    [[TMP2:%.*]] = load i8, ptr [[TMP0:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[TMP2]]
 ;
-  %2 = load i8, i8* %0, align 1
+  %2 = load i8, ptr %0, align 1
   ret i8 %2
 }
 
-define dso_local arm_aapcs_vfpcc i8 @foo(i8* %0) {
+define dso_local arm_aapcs_vfpcc i8 @foo(ptr %0) {
 ; CHECK-LABEL: @foo(
-; CHECK-NEXT:    [[TMP2:%.*]] = call i8 @bar(i8* [[TMP0:%.*]])
+; CHECK-NEXT:    [[TMP2:%.*]] = call i8 @bar(ptr [[TMP0:%.*]])
 ; CHECK-NEXT:    ret i8 [[TMP2]]
 ;
-  %2 = call i8 @bar(i8* %0)
+  %2 = call i8 @bar(ptr %0)
   ret i8 %2
 }
index e2ff6c833fb788daf6e030d151dabb21c2ffa9b7..5b8e3e4781ebe7058dc325a57c9dac14b60309a5 100644 (file)
@@ -35,19 +35,19 @@ define arm_aapcscc i32 @_strlen1() {
 ; CHECK-LABEL: @_strlen1(
 ; CHECK-NEXT:    ret i32 3
 ;
-  %call = tail call arm_aapcscc i32 @strlen(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0))
+  %call = tail call arm_aapcscc i32 @strlen(ptr @.str)
   ret i32 %call
 }
 
-declare arm_aapcscc i32 @strlen(i8*)
+declare arm_aapcscc i32 @strlen(ptr)
 
-define arm_aapcscc zeroext i1 @_strlen2(i8* %str) {
+define arm_aapcscc zeroext i1 @_strlen2(ptr %str) {
 ; CHECK-LABEL: @_strlen2(
-; CHECK-NEXT:    [[STRLENFIRST:%.*]] = load i8, i8* [[STR:%.*]], align 1
+; CHECK-NEXT:    [[STRLENFIRST:%.*]] = load i8, ptr [[STR:%.*]], align 1
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i8 [[STRLENFIRST]], 0
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %call = tail call arm_aapcscc i32 @strlen(i8* %str)
+  %call = tail call arm_aapcscc i32 @strlen(ptr %str)
   %cmp = icmp ne i32 %call, 0
   ret i1 %cmp
 }
index 4fedd81981f39ebee701957d02d3be251b1f4d40..0b4ce1fa293f85466f891c4df70cad060060c0dc 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: opt < %s -passes=instcombine -data-layout="p:32:32" -S | FileCheck %s --check-prefixes=CHECK,CHECK32
 ; RUN: opt < %s -passes=instcombine -data-layout="p:64:64" -S | FileCheck %s --check-prefixes=CHECK,CHECK64
 
-define signext i32 @b(i32* inreg %x)   {
+define signext i32 @b(ptr inreg %x)   {
   ret i32 0
 }
 
@@ -16,21 +16,21 @@ define void @d(i32 %x, ...) {
   ret void
 }
 
-define void @g(i32* %y) {
-  call i32 bitcast (i32 (i32*)* @b to i32 (i32)*)(i32 zeroext 0)
-  call void bitcast (void (...)* @c to void (i32*)*)(i32* %y)
-  call void bitcast (void (...)* @c to void (i32*)*)(i32* sret(i32) %y)
-  call void bitcast (void (i32, ...)* @d to void (i32, i32*)*)(i32 0, i32* sret(i32) %y)
-  call void bitcast (void (i32, ...)* @d to void (i32, i32*)*)(i32 0, i32* nocapture %y)
-  call void bitcast (void (i32, ...)* @d to void (i32*)*)(i32* nocapture noundef %y)
+define void @g(ptr %y) {
+  call i32 @b(i32 zeroext 0)
+  call void @c(ptr %y)
+  call void @c(ptr sret(i32) %y)
+  call void @d(i32 0, ptr sret(i32) %y)
+  call void @d(i32 0, ptr nocapture %y)
+  call void @d(ptr nocapture noundef %y)
   ret void
 }
-; CHECK-LABEL: define void @g(i32* %y)
-; CHECK:    call i32 bitcast (i32 (i32*)* @b to i32 (i32)*)(i32 zeroext 0)
-; CHECK:    call void (...) @c(i32* %y)
-; CHECK:    call void bitcast (void (...)* @c to void (i32*)*)(i32* sret(i32) %y)
-; CHECK:    call void bitcast (void (i32, ...)* @d to void (i32, i32*)*)(i32 0, i32* sret(i32) %y)
-; CHECK:    call void (i32, ...) @d(i32 0, i32* nocapture %y)
-; CHECK32:  %2 = ptrtoint i32* %y to i32
+; CHECK-LABEL: define void @g(ptr %y)
+; CHECK:    call i32 @b(i32 zeroext 0)
+; CHECK:    call void (...) @c(ptr %y)
+; CHECK:    call void @c(ptr sret(i32) %y)
+; CHECK:    call void @d(i32 0, ptr sret(i32) %y)
+; CHECK:    call void (i32, ...) @d(i32 0, ptr nocapture %y)
+; CHECK32:  %2 = ptrtoint ptr %y to i32
 ; CHECK32:  call void (i32, ...) @d(i32 noundef %2)
-; CHECK64:  call void bitcast (void (i32, ...)* @d to void (i32*)*)(i32* nocapture noundef %y)
+; CHECK64:  call void @d(ptr nocapture noundef %y)
index 5f218d8e303616e346d686aba1d3ad0b97281698..26c0fc8d2cb4c70c2d761c0cf786f5f5758a658e 100644 (file)
@@ -5,17 +5,17 @@ target triple = "i686-pc-linux-gnu"
 
 define i32 @main() {
 ; CHECK-LABEL: @main
-; CHECK: %[[call:.*]] = call i8* @ctime(i32* null)
-; CHECK: %[[cast:.*]] = ptrtoint i8* %[[call]] to i32
+; CHECK: %[[call:.*]] = call ptr @ctime(ptr null)
+; CHECK: %[[cast:.*]] = ptrtoint ptr %[[call]] to i32
 ; CHECK: ret i32 %[[cast]]
 entry:
-  %tmp = call i32 bitcast (i8* (i32*)* @ctime to i32 (i32*)*)( i32* null )          ; <i32> [#uses=1]
+  %tmp = call i32 @ctime( ptr null )          ; <i32> [#uses=1]
   ret i32 %tmp
 }
 
-declare i8* @ctime(i32*)
+declare ptr @ctime(ptr)
 
-define internal { i8 } @foo(i32*) {
+define internal { i8 } @foo(ptr) {
 entry:
   ret { i8 } { i8 0 }
 }
@@ -24,66 +24,66 @@ define void @test_struct_ret() {
 ; CHECK-LABEL: @test_struct_ret
 ; CHECK-NOT: bitcast
 entry:
-  %0 = call { i8 } bitcast ({ i8 } (i32*)* @foo to { i8 } (i16*)*)(i16* null)
+  %0 = call { i8 } @foo(ptr null)
   ret void
 }
 
 declare i32 @fn1(i32)
 
-define i32 @test1(i32* %a) {
+define i32 @test1(ptr %a) {
 ; CHECK-LABEL: @test1
-; CHECK:      %[[cast:.*]] = ptrtoint i32* %a to i32
+; CHECK:      %[[cast:.*]] = ptrtoint ptr %a to i32
 ; CHECK-NEXT: %[[call:.*]] = tail call i32 @fn1(i32 %[[cast]])
 ; CHECK-NEXT: ret i32 %[[call]]
 entry:
-  %call = tail call i32 bitcast (i32 (i32)* @fn1 to i32 (i32*)*)(i32* %a)
+  %call = tail call i32 @fn1(ptr %a)
   ret i32 %call
 }
 
 declare i32 @fn2(i16)
 
-define i32 @test2(i32* %a) {
+define i32 @test2(ptr %a) {
 ; CHECK-LABEL: @test2
-; CHECK:      %[[call:.*]] = tail call i32 bitcast (i32 (i16)* @fn2 to i32 (i32*)*)(i32* %a)
+; CHECK:      %[[call:.*]] = tail call i32 @fn2(ptr %a)
 ; CHECK-NEXT: ret i32 %[[call]]
 entry:
-  %call = tail call i32 bitcast (i32 (i16)* @fn2 to i32 (i32*)*)(i32* %a)
+  %call = tail call i32 @fn2(ptr %a)
   ret i32 %call
 }
 
 declare i32 @fn3(i64)
 
-define i32 @test3(i32* %a) {
+define i32 @test3(ptr %a) {
 ; CHECK-LABEL: @test3
-; CHECK:      %[[call:.*]] = tail call i32 bitcast (i32 (i64)* @fn3 to i32 (i32*)*)(i32* %a)
+; CHECK:      %[[call:.*]] = tail call i32 @fn3(ptr %a)
 ; CHECK-NEXT: ret i32 %[[call]]
 entry:
-  %call = tail call i32 bitcast (i32 (i64)* @fn3 to i32 (i32*)*)(i32* %a)
+  %call = tail call i32 @fn3(ptr %a)
   ret i32 %call
 }
 
 declare i32 @fn4(i32) "thunk"
 
-define i32 @test4(i32* %a) {
+define i32 @test4(ptr %a) {
 ; CHECK-LABEL: @test4
-; CHECK:      %[[call:.*]] = tail call i32 bitcast (i32 (i32)* @fn4 to i32 (i32*)*)(i32* %a)
+; CHECK:      %[[call:.*]] = tail call i32 @fn4(ptr %a)
 ; CHECK-NEXT: ret i32 %[[call]]
 entry:
-  %call = tail call i32 bitcast (i32 (i32)* @fn4 to i32 (i32*)*)(i32* %a)
+  %call = tail call i32 @fn4(ptr %a)
   ret i32 %call
 }
 
-declare i1 @fn5({ i32, i32 }* byval({ i32, i32 }) align 4 %r)
+declare i1 @fn5(ptr byval({ i32, i32 }) align 4 %r)
 
 define i1 @test5() {
 ; CHECK-LABEL: @test5
-; CHECK:      %[[call:.*]] = call i1 bitcast (i1 ({ i32, i32 }*)* @fn5 to i1 (i32, i32)*)(i32 {{.*}}, i32 {{.*}})
+; CHECK:      %[[call:.*]] = call i1 @fn5(i32 {{.*}}, i32 {{.*}})
 ; CHECK-NEXT: ret i1 %[[call]]
   %1 = alloca { i32, i32 }, align 4
-  %2 = getelementptr inbounds { i32, i32 }, { i32, i32 }* %1, i32 0, i32 0
-  %3 = load i32, i32* %2, align 4
-  %4 = getelementptr inbounds { i32, i32 }, { i32, i32 }* %1, i32 0, i32 1
-  %5 = load i32, i32* %4, align 4
-  %6 = call i1 bitcast (i1 ({ i32, i32 }*)* @fn5 to i1 (i32, i32)*)(i32 %3, i32 %5)
+  %2 = getelementptr inbounds { i32, i32 }, ptr %1, i32 0, i32 0
+  %3 = load i32, ptr %2, align 4
+  %4 = getelementptr inbounds { i32, i32 }, ptr %1, i32 0, i32 1
+  %5 = load i32, ptr %4, align 4
+  %6 = call i1 @fn5(i32 %3, i32 %5)
   ret i1 %6
 }
index e3f678604103ff93d653c2e28fbf813b20d695d0..5ed9a37981dcaa9b5f4699bf1fc193e087422b0f 100644 (file)
@@ -60,26 +60,26 @@ define void @test_guard_adjacent_diff_cond2(i32 %V1, i32 %V2) {
 
 ; Might not be legal to hoist the load above the first guard since the
 ; guard might control dereferenceability
-define void @negative_load(i32 %V1, i32* %P) {
+define void @negative_load(i32 %V1, ptr %P) {
 ; CHECK-LABEL: @negative_load(
 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i32 [[V1:%.*]], 0
 ; CHECK-NEXT:    call void (i1, ...) @llvm.experimental.guard(i1 [[A]], i32 123) [ "deopt"() ]
-; CHECK-NEXT:    [[V2:%.*]] = load i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT:    [[V2:%.*]] = load i32, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i32 [[V2]], 0
 ; CHECK-NEXT:    call void (i1, ...) @llvm.experimental.guard(i1 [[B]], i32 456) [ "deopt"() ]
 ; CHECK-NEXT:    ret void
 ;
   %A = icmp slt i32 %V1, 0
   call void(i1, ...) @llvm.experimental.guard( i1 %A, i32 123 )[ "deopt"() ]
-  %V2 = load i32, i32* %P
+  %V2 = load i32, ptr %P
   %B = icmp slt i32 %V2, 0
   call void(i1, ...) @llvm.experimental.guard( i1 %B, i32 456 )[ "deopt"() ]
   ret void
 }
 
-define void @deref_load(i32 %V1, i32* dereferenceable(4) align 4 %P) nofree nosync {
+define void @deref_load(i32 %V1, ptr dereferenceable(4) align 4 %P) nofree nosync {
 ; CHECK-LABEL: @deref_load(
-; CHECK-NEXT:    [[V2:%.*]] = load i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT:    [[V2:%.*]] = load i32, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[V2]], [[V1:%.*]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp slt i32 [[TMP1]], 0
 ; CHECK-NEXT:    call void (i1, ...) @llvm.experimental.guard(i1 [[TMP2]], i32 123) [ "deopt"() ]
@@ -87,7 +87,7 @@ define void @deref_load(i32 %V1, i32* dereferenceable(4) align 4 %P) nofree nosy
 ;
   %A = icmp slt i32 %V1, 0
   call void(i1, ...) @llvm.experimental.guard( i1 %A, i32 123 )[ "deopt"() ]
-  %V2 = load i32, i32* %P
+  %V2 = load i32, ptr %P
   %B = icmp slt i32 %V2, 0
   call void(i1, ...) @llvm.experimental.guard( i1 %B, i32 456 )[ "deopt"() ]
   ret void
index 0efc4b843dd5c4d4cd5b9c3e3f67219057cff71e..e821bd0deee408c362f58c1ba5b984b3a46cacae 100644 (file)
@@ -3,17 +3,17 @@
 @X = global i8 0
 @Y = global i8 12
 
-declare void @llvm.memmove.p0i8.p0i8.i32(i8*, i8*, i32, i1)
+declare void @llvm.memmove.p0.p0.i32(ptr, ptr, i32, i1)
 
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8*, i8*, i32, i1)
+declare void @llvm.memcpy.p0.p0.i32(ptr, ptr, i32, i1)
 
-declare void @llvm.memset.p0i8.i32(i8*, i8, i32, i1)
+declare void @llvm.memset.p0.i32(ptr, i8, i32, i1)
 
 define void @zero_byte_test() {
   ; These process zero bytes, so they are a noop.
-  call void @llvm.memmove.p0i8.p0i8.i32(i8* @X, i8* @Y, i32 0, i1 false )
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* @X, i8* @Y, i32 0, i1 false )
-  call void @llvm.memset.p0i8.i32(i8* @X, i8 123, i32 0, i1 false )
+  call void @llvm.memmove.p0.p0.i32(ptr @X, ptr @Y, i32 0, i1 false )
+  call void @llvm.memcpy.p0.p0.i32(ptr @X, ptr @Y, i32 0, i1 false )
+  call void @llvm.memset.p0.i32(ptr @X, i8 123, i32 0, i1 false )
   ret void
 }
 
index 1e13a682a058b59ce51633cd7dd1722b364bd1ad..90d41626ef01cf74cbca07101381677f13627b33 100644 (file)
@@ -3,23 +3,23 @@
 ; This used to crash trying to do a double-to-pointer conversion
 define i32 @bar() {
 entry:
-       %retval = alloca i32, align 4           ; <i32*> [#uses=1]
-       %tmp = call i32 (...) bitcast (i32 (i8*)* @f to i32 (...)*)( double 3.000000e+00 )              ; <i32> [#uses=0]
+       %retval = alloca i32, align 4           ; <ptr> [#uses=1]
+       %tmp = call i32 (...) @f( double 3.000000e+00 )         ; <i32> [#uses=0]
        br label %return
 
 return:                ; preds = %entry
-       %retval1 = load i32, i32* %retval               ; <i32> [#uses=1]
+       %retval1 = load i32, ptr %retval                ; <i32> [#uses=1]
        ret i32 %retval1
 }
 
-define i32 @f(i8* %p) {
+define i32 @f(ptr %p) {
 entry:
-       %p_addr = alloca i8*            ; <i8**> [#uses=1]
-       %retval = alloca i32, align 4           ; <i32*> [#uses=1]
-       store i8* %p, i8** %p_addr
+       %p_addr = alloca ptr            ; <ptr> [#uses=1]
+       %retval = alloca i32, align 4           ; <ptr> [#uses=1]
+       store ptr %p, ptr %p_addr
        br label %return
 
 return:                ; preds = %entry
-       %retval1 = load i32, i32* %retval               ; <i32> [#uses=1]
+       %retval1 = load i32, ptr %retval                ; <i32> [#uses=1]
        ret i32 %retval1
 }
index 5173c43751f37f92dafc0453b78d777d8f0e1ba9..1ca0b34e8d80a5abb39d2b25537a2aef718973fa 100644 (file)
@@ -2,30 +2,30 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
 ; InstCombine should mark null-checked argument as nonnull at callsite
-declare void @dummy(i32*, i32)
+declare void @dummy(ptr, i32)
 
-define void @test(i32* %a, i32 %b) {
+define void @test(ptr %a, i32 %b) {
 ; CHECK-LABEL: @test(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[COND1:%.*]] = icmp eq i32* [[A:%.*]], null
+; CHECK-NEXT:    [[COND1:%.*]] = icmp eq ptr [[A:%.*]], null
 ; CHECK-NEXT:    br i1 [[COND1]], label [[DEAD:%.*]], label [[NOT_NULL:%.*]]
 ; CHECK:       not_null:
 ; CHECK-NEXT:    [[COND2:%.*]] = icmp eq i32 [[B:%.*]], 0
 ; CHECK-NEXT:    br i1 [[COND2]], label [[DEAD]], label [[NOT_ZERO:%.*]]
 ; CHECK:       not_zero:
-; CHECK-NEXT:    call void @dummy(i32* nonnull [[A]], i32 [[B]])
+; CHECK-NEXT:    call void @dummy(ptr nonnull [[A]], i32 [[B]])
 ; CHECK-NEXT:    ret void
 ; CHECK:       dead:
 ; CHECK-NEXT:    unreachable
 ;
 entry:
-  %cond1 = icmp eq i32* %a, null
+  %cond1 = icmp eq ptr %a, null
   br i1 %cond1, label %dead, label %not_null
 not_null:
   %cond2 = icmp eq i32 %b, 0
   br i1 %cond2, label %dead, label %not_zero
 not_zero:
-  call void @dummy(i32* %a, i32 %b)
+  call void @dummy(ptr %a, i32 %b)
   ret void
 dead:
   unreachable
@@ -34,30 +34,30 @@ dead:
 ; The nonnull attribute in the 'bar' declaration is
 ; propagated to the parameters of the 'baz' callsite.
 
-declare void @bar(i8*, i8* nonnull noundef)
-declare void @bar_without_noundef(i8*, i8* nonnull)
-declare void @baz(i8*, i8*)
+declare void @bar(ptr, ptr nonnull noundef)
+declare void @bar_without_noundef(ptr, ptr nonnull)
+declare void @baz(ptr, ptr)
 
-define void @deduce_nonnull_from_another_call(i8* %a, i8* %b) {
+define void @deduce_nonnull_from_another_call(ptr %a, ptr %b) {
 ; CHECK-LABEL: @deduce_nonnull_from_another_call(
-; CHECK-NEXT:    call void @bar(i8* [[A:%.*]], i8* [[B:%.*]])
-; CHECK-NEXT:    call void @baz(i8* nonnull [[B]], i8* nonnull [[B]])
+; CHECK-NEXT:    call void @bar(ptr [[A:%.*]], ptr [[B:%.*]])
+; CHECK-NEXT:    call void @baz(ptr nonnull [[B]], ptr nonnull [[B]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @bar(i8* %a, i8* %b)
-  call void @baz(i8* %b, i8* %b)
+  call void @bar(ptr %a, ptr %b)
+  call void @baz(ptr %b, ptr %b)
   ret void
 }
 
 
-define void @deduce_nonnull_from_another_call2(i8* %a, i8* %b) {
+define void @deduce_nonnull_from_another_call2(ptr %a, ptr %b) {
 ; CHECK-LABEL: @deduce_nonnull_from_another_call2(
-; CHECK-NEXT:    call void @bar_without_noundef(i8* [[A:%.*]], i8* [[B:%.*]])
-; CHECK-NEXT:    call void @baz(i8* [[B]], i8* [[B]])
+; CHECK-NEXT:    call void @bar_without_noundef(ptr [[A:%.*]], ptr [[B:%.*]])
+; CHECK-NEXT:    call void @baz(ptr [[B]], ptr [[B]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @bar_without_noundef(i8* %a, i8* %b)
-  call void @baz(i8* %b, i8* %b)
+  call void @bar_without_noundef(ptr %a, ptr %b)
+  call void @baz(ptr %b, ptr %b)
   ret void
 }
 
index b8d3bbc30a1c12b5be7000f6b08b685bef72d73a..c51b4a9812c22f6ac8916174fbe47e116241d5f9 100644 (file)
@@ -4,13 +4,13 @@
 ; The argument types should match if it is the standard library calloc.
 ; Don't crash analyzing an imposter.
 
-declare i8* @calloc(i64, i32)
+declare ptr @calloc(i64, i32)
 
 define void @PR50846() {
 ; CHECK-LABEL: @PR50846(
-; CHECK-NEXT:    [[CALL:%.*]] = call i8* @calloc(i64 1, i32 1)
+; CHECK-NEXT:    [[CALL:%.*]] = call ptr @calloc(i64 1, i32 1)
 ; CHECK-NEXT:    ret void
 ;
-  %call = call i8* @calloc(i64 1, i32 1)
+  %call = call ptr @calloc(i64 1, i32 1)
   ret void
 }
index a7600665adbdd0ef0da1424359e2a7564b227ffe..4547008b760933d14649a6833afc2a97ff54309a 100644 (file)
@@ -383,17 +383,17 @@ define <3 x i32> @t21_ult_slt_vec_undef2(<3 x i32> %x, <3 x i32> %replacement_lo
 
 ;-------------------------------------------------------------------------------
 
-define i32* @t22_pointers(i32* %x, i32* %replacement_low, i32* %replacement_high) {
+define ptr @t22_pointers(ptr %x, ptr %replacement_low, ptr %replacement_high) {
 ; CHECK-LABEL: @t22_pointers(
-; CHECK-NEXT:    [[T0:%.*]] = icmp slt i32* [[X:%.*]], inttoptr (i64 65536 to i32*)
-; CHECK-NEXT:    [[T1:%.*]] = select i1 [[T0]], i32* [[REPLACEMENT_LOW:%.*]], i32* [[REPLACEMENT_HIGH:%.*]]
-; CHECK-NEXT:    [[T2:%.*]] = icmp ult i32* [[X]], inttoptr (i64 65536 to i32*)
-; CHECK-NEXT:    [[R:%.*]] = select i1 [[T2]], i32* [[X]], i32* [[T1]]
-; CHECK-NEXT:    ret i32* [[R]]
+; CHECK-NEXT:    [[T0:%.*]] = icmp slt ptr [[X:%.*]], inttoptr (i64 65536 to ptr)
+; CHECK-NEXT:    [[T1:%.*]] = select i1 [[T0]], ptr [[REPLACEMENT_LOW:%.*]], ptr [[REPLACEMENT_HIGH:%.*]]
+; CHECK-NEXT:    [[T2:%.*]] = icmp ult ptr [[X]], inttoptr (i64 65536 to ptr)
+; CHECK-NEXT:    [[R:%.*]] = select i1 [[T2]], ptr [[X]], ptr [[T1]]
+; CHECK-NEXT:    ret ptr [[R]]
 ;
-  %t0 = icmp slt i32* %x, inttoptr (i64 65536 to i32*)
-  %t1 = select i1 %t0, i32* %replacement_low, i32* %replacement_high
-  %t2 = icmp ult i32* %x, inttoptr (i64 65536 to i32*)
-  %r = select i1 %t2, i32* %x, i32* %t1
-  ret i32* %r
+  %t0 = icmp slt ptr %x, inttoptr (i64 65536 to ptr)
+  %t1 = select i1 %t0, ptr %replacement_low, ptr %replacement_high
+  %t2 = icmp ult ptr %x, inttoptr (i64 65536 to ptr)
+  %r = select i1 %t2, ptr %x, ptr %t1
+  ret ptr %r
 }
index dd8385764cc4aa867bfd647c9f4fef596d1c4978..27b29a879ea7255f63cdacc05b9785c2c179abb0 100644 (file)
@@ -47,7 +47,7 @@ define i8 @n2(i8 %x, i8 %v0, i8 %v1) {
 }
 
 ; Extra use can be adjusted. While there, test multi-bb case.
-define i8 @t3(i8 %x, i8 %v0, i8 %v1, i8 %v2, i8 %v3, i8* %out, i1 %c) {
+define i8 @t3(i8 %x, i8 %v0, i8 %v1, i8 %v2, i8 %v3, ptr %out, i1 %c) {
 ; CHECK-LABEL: @t3(
 ; CHECK-NEXT:  bb0:
 ; CHECK-NEXT:    [[T0:%.*]] = and i8 [[X:%.*]], 1
@@ -55,7 +55,7 @@ define i8 @t3(i8 %x, i8 %v0, i8 %v1, i8 %v2, i8 %v3, i8* %out, i1 %c) {
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; CHECK:       bb1:
 ; CHECK-NEXT:    [[R0:%.*]] = select i1 [[T1_NOT]], i8 [[V1:%.*]], i8 [[V0:%.*]]
-; CHECK-NEXT:    store i8 [[R0]], i8* [[OUT:%.*]], align 1
+; CHECK-NEXT:    store i8 [[R0]], ptr [[OUT:%.*]], align 1
 ; CHECK-NEXT:    br label [[BB2]]
 ; CHECK:       bb2:
 ; CHECK-NEXT:    [[R1:%.*]] = select i1 [[T1_NOT]], i8 [[V3:%.*]], i8 [[V2:%.*]]
@@ -67,25 +67,25 @@ bb0:
   br i1 %c, label %bb1, label %bb2
 bb1:
   %r0 = select i1 %t1, i8 %v0, i8 %v1
-  store i8 %r0, i8* %out
+  store i8 %r0, ptr %out
   br label %bb2
 bb2:
   %r1 = select i1 %t1, i8 %v2, i8 %v3
   ret i8 %r1
 }
-define i8 @t4(i8 %x, i8 %v0, i8 %v1, i8 %v2, i8 %v3, i8* %out) {
+define i8 @t4(i8 %x, i8 %v0, i8 %v1, i8 %v2, i8 %v3, ptr %out) {
 ; CHECK-LABEL: @t4(
 ; CHECK-NEXT:    [[T0:%.*]] = and i8 [[X:%.*]], 1
 ; CHECK-NEXT:    [[T1_NOT:%.*]] = icmp eq i8 [[T0]], 0
 ; CHECK-NEXT:    [[R0:%.*]] = select i1 [[T1_NOT]], i8 [[V1:%.*]], i8 [[V0:%.*]]
-; CHECK-NEXT:    store i8 [[R0]], i8* [[OUT:%.*]], align 1
+; CHECK-NEXT:    store i8 [[R0]], ptr [[OUT:%.*]], align 1
 ; CHECK-NEXT:    [[R1:%.*]] = select i1 [[T1_NOT]], i8 [[V3:%.*]], i8 [[V2:%.*]]
 ; CHECK-NEXT:    ret i8 [[R1]]
 ;
   %t0 = and i8 %x, 1
   %t1 = icmp ne i8 %t0, 0
   %r0 = select i1 %t1, i8 %v0, i8 %v1
-  store i8 %r0, i8* %out
+  store i8 %r0, ptr %out
   %r1 = select i1 %t1, i8 %v2, i8 %v3
   ret i8 %r1
 }
index f5be73f9c049c62fa45fd944fe7a7b75cdbe27a1..51d9bf852ead0a525f79d514efe9c705e7aefbb6 100644 (file)
@@ -4,31 +4,31 @@
 ; prototype casts.
 
 declare i32 @__gxx_personality_v0(...)
-declare void @__cxa_call_unexpected(i8*)
-declare void @foo(i16* %a)
+declare void @__cxa_call_unexpected(ptr)
+declare void @foo(ptr %a)
 
 ; CHECK-LABEL: @test_call()
-; CHECK: call void @foo(i16* null), !prof ![[$PROF:[0-9]+]]
+; CHECK: call void @foo(ptr null), !prof ![[$PROF:[0-9]+]]
 define void @test_call() {
-  call void bitcast (void (i16*)* @foo to void (i8*)*) (i8* null), !prof !0
+  call void @foo (ptr null), !prof !0
   ret void
 }
 
 ; CHECK-LABEL: @test_invoke()
-; CHECK: invoke void @foo(i16* null)
+; CHECK: invoke void @foo(ptr null)
 ; CHECK-NEXT: to label %done unwind label %lpad, !prof ![[$PROF]]
-define void @test_invoke() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
-  invoke void bitcast (void (i16*)* @foo to void (i8*)*) (i8* null)
+define void @test_invoke() personality ptr @__gxx_personality_v0 {
+  invoke void @foo (ptr null)
           to label %done unwind label %lpad, !prof !0
 
 done:
   ret void
 
 lpad:
-  %lp = landingpad { i8*, i32 }
-          filter [0 x i8*] zeroinitializer
-  %ehptr = extractvalue { i8*, i32 } %lp, 0
-  tail call void @__cxa_call_unexpected(i8* %ehptr) noreturn nounwind
+  %lp = landingpad { ptr, i32 }
+          filter [0 x ptr] zeroinitializer
+  %ehptr = extractvalue { ptr, i32 } %lp, 0
+  tail call void @__cxa_call_unexpected(ptr %ehptr) noreturn nounwind
   unreachable
 }
 
index bf70811b6c4bb7d87bdfa18f4b7d98948cda22c9..41bc15ea1e7fb7d284120eccbcd30fef399dbff9 100644 (file)
@@ -1,6 +1,6 @@
 ; RUN: opt < %s -instcombine -always-inline -S | FileCheck %s
 
-define internal void @foo(i16*) alwaysinline {
+define internal void @foo(ptr) alwaysinline {
   ret void
 }
 
@@ -17,7 +17,7 @@ then:
 
 else:
   ; CHECK-NOT: call
-  call void bitcast (void (i16*)* @foo to void (i8*)*) (i8* null)
+  call void @foo (ptr null)
   ret void
 }
 
index af8f6376756b402d50fd9cbaa0a84944c3bc876d..14ff3ee71094f43aca5d08171cb607aff3683d37 100644 (file)
@@ -6,6 +6,6 @@ define void @g() {
 ; CHECK-LABEL: @g(
  entry:
 ; CHECK: call void @foo(i32 0) [ "deopt"() ]
-  call void bitcast (void (i32)* @foo to void ()*) ()  [ "deopt"() ]
+  call void @foo ()  [ "deopt"() ]
   ret void
 }
index 438ddce84b650799e73dbda8548ab5392e25683f..a86804d9d703e5c1608c4200bcec2c7d4da94538 100644 (file)
@@ -66,12 +66,11 @@ define i1 @test6a(i1 %A) {
   ret i1 %C
 }
 
-define i1 @test7(i8* %A) {
+define i1 @test7(ptr %A) {
 ; CHECK-LABEL: @test7(
-; CHECK-NEXT:    [[C:%.*]] = icmp eq i8* %A, null
+; CHECK-NEXT:    [[C:%.*]] = icmp eq ptr %A, null
 ; CHECK-NEXT:    ret i1 [[C]]
 ;
-  %B = bitcast i8* %A to i32*
-  %C = icmp eq i32* %B, null
+  %C = icmp eq ptr %A, null
   ret i1 %C
 }
index d47526e088386399cc0c41b2921f4ed9ca53e4f9..afc52f02b6a2856f8cbb04aba2977177d4c31c47 100644 (file)
@@ -10,17 +10,17 @@ define void @MainKernel(i32 %iNumSteps, i32 %tid, i32 %base) {
 ; CHECK-NEXT:    [[CALLB:%.*]] = alloca [258 x float], align 4
 ; CHECK-NEXT:    [[CONV_I:%.*]] = uitofp i32 [[INUMSTEPS:%.*]] to float
 ; CHECK-NEXT:    [[CONV_I12:%.*]] = zext i32 [[TID:%.*]] to i64
-; CHECK-NEXT:    [[ARRAYIDX3:%.*]] = getelementptr inbounds [258 x float], [258 x float]* [[CALLA]], i64 0, i64 [[CONV_I12]]
-; CHECK-NEXT:    store float [[CONV_I]], float* [[ARRAYIDX3]], align 4
-; CHECK-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds [258 x float], [258 x float]* [[CALLB]], i64 0, i64 [[CONV_I12]]
-; CHECK-NEXT:    store float [[CONV_I]], float* [[ARRAYIDX6]], align 4
+; CHECK-NEXT:    [[ARRAYIDX3:%.*]] = getelementptr inbounds [258 x float], ptr [[CALLA]], i64 0, i64 [[CONV_I12]]
+; CHECK-NEXT:    store float [[CONV_I]], ptr [[ARRAYIDX3]], align 4
+; CHECK-NEXT:    [[ARRAYIDX6:%.*]] = getelementptr inbounds [258 x float], ptr [[CALLB]], i64 0, i64 [[CONV_I12]]
+; CHECK-NEXT:    store float [[CONV_I]], ptr [[ARRAYIDX6]], align 4
 ; CHECK-NEXT:    [[CMP7:%.*]] = icmp eq i32 [[TID]], 0
 ; CHECK-NEXT:    br i1 [[CMP7]], label [[DOTBB1:%.*]], label [[DOTBB2:%.*]]
 ; CHECK:       .bb1:
-; CHECK-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds [258 x float], [258 x float]* [[CALLA]], i64 0, i64 256
-; CHECK-NEXT:    store float [[CONV_I]], float* [[ARRAYIDX10]], align 4
-; CHECK-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds [258 x float], [258 x float]* [[CALLB]], i64 0, i64 256
-; CHECK-NEXT:    store float 0.000000e+00, float* [[ARRAYIDX11]], align 4
+; CHECK-NEXT:    [[ARRAYIDX10:%.*]] = getelementptr inbounds [258 x float], ptr [[CALLA]], i64 0, i64 256
+; CHECK-NEXT:    store float [[CONV_I]], ptr [[ARRAYIDX10]], align 4
+; CHECK-NEXT:    [[ARRAYIDX11:%.*]] = getelementptr inbounds [258 x float], ptr [[CALLB]], i64 0, i64 256
+; CHECK-NEXT:    store float 0.000000e+00, ptr [[ARRAYIDX11]], align 4
 ; CHECK-NEXT:    br label [[DOTBB2]]
 ; CHECK:       .bb2:
 ; CHECK-NEXT:    [[CMP135:%.*]] = icmp sgt i32 [[INUMSTEPS]], 0
@@ -32,13 +32,13 @@ define void @MainKernel(i32 %iNumSteps, i32 %tid, i32 %base) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = icmp ugt i32 [[I12_06]], [[BASE:%.*]]
 ; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[I12_06]], 1
 ; CHECK-NEXT:    [[CONV_I9:%.*]] = sext i32 [[ADD]] to i64
-; CHECK-NEXT:    [[ARRAYIDX20:%.*]] = getelementptr inbounds [258 x float], [258 x float]* [[CALLA]], i64 0, i64 [[CONV_I9]]
-; CHECK-NEXT:    [[ARRAYIDX24:%.*]] = getelementptr inbounds [258 x float], [258 x float]* [[CALLB]], i64 0, i64 [[CONV_I9]]
+; CHECK-NEXT:    [[ARRAYIDX20:%.*]] = getelementptr inbounds [258 x float], ptr [[CALLA]], i64 0, i64 [[CONV_I9]]
+; CHECK-NEXT:    [[ARRAYIDX24:%.*]] = getelementptr inbounds [258 x float], ptr [[CALLB]], i64 0, i64 [[CONV_I9]]
 ; CHECK-NEXT:    [[CMP40:%.*]] = icmp ult i32 [[I12_06]], [[BASE]]
 ; CHECK-NEXT:    br i1 [[TMP3]], label [[DOTBB4:%.*]], label [[DOTBB5:%.*]]
 ; CHECK:       .bb4:
-; CHECK-NEXT:    [[TMP4:%.*]] = load float, float* [[ARRAYIDX20]], align 4
-; CHECK-NEXT:    [[TMP5:%.*]] = load float, float* [[ARRAYIDX24]], align 4
+; CHECK-NEXT:    [[TMP4:%.*]] = load float, ptr [[ARRAYIDX20]], align 4
+; CHECK-NEXT:    [[TMP5:%.*]] = load float, ptr [[ARRAYIDX24]], align 4
 ; CHECK-NEXT:    [[ADD33:%.*]] = fadd float [[TMP5]], [[TMP4]]
 ; CHECK-NEXT:    [[ADD33_1:%.*]] = fadd float [[ADD33]], [[TMP1]]
 ; CHECK-NEXT:    [[ADD33_2:%.*]] = fadd float [[ADD33_1]], [[TMP2]]
@@ -48,16 +48,16 @@ define void @MainKernel(i32 %iNumSteps, i32 %tid, i32 %base) {
 ; CHECK-NEXT:    [[TMP7:%.*]] = phi float [ [[ADD33_2]], [[DOTBB4]] ], [ [[TMP2]], [[DOTBB3]] ]
 ; CHECK-NEXT:    br i1 [[CMP40]], label [[DOTBB6:%.*]], label [[DOTBB7:%.*]]
 ; CHECK:       .bb6:
-; CHECK-NEXT:    store float [[TMP7]], float* [[ARRAYIDX3]], align 4
-; CHECK-NEXT:    store float [[TMP6]], float* [[ARRAYIDX6]], align 4
+; CHECK-NEXT:    store float [[TMP7]], ptr [[ARRAYIDX3]], align 4
+; CHECK-NEXT:    store float [[TMP6]], ptr [[ARRAYIDX6]], align 4
 ; CHECK-NEXT:    br label [[DOTBB7]]
 ; CHECK:       .bb7:
 ; CHECK-NEXT:    br i1 [[TMP3]], label [[DOTBB9:%.*]], label [[DOTBB10:%.*]]
 ; CHECK:       .bb8:
 ; CHECK-NEXT:    ret void
 ; CHECK:       .bb9:
-; CHECK-NEXT:    [[TMP8:%.*]] = load float, float* [[ARRAYIDX20]], align 4
-; CHECK-NEXT:    [[TMP9:%.*]] = load float, float* [[ARRAYIDX24]], align 4
+; CHECK-NEXT:    [[TMP8:%.*]] = load float, ptr [[ARRAYIDX20]], align 4
+; CHECK-NEXT:    [[TMP9:%.*]] = load float, ptr [[ARRAYIDX24]], align 4
 ; CHECK-NEXT:    [[ADD33_112:%.*]] = fadd float [[TMP9]], [[TMP8]]
 ; CHECK-NEXT:    [[ADD33_1_1:%.*]] = fadd float [[ADD33_112]], [[TMP6]]
 ; CHECK-NEXT:    [[ADD33_2_1:%.*]] = fadd float [[ADD33_1_1]], [[TMP7]]
@@ -67,8 +67,8 @@ define void @MainKernel(i32 %iNumSteps, i32 %tid, i32 %base) {
 ; CHECK-NEXT:    [[TMP11]] = phi float [ [[ADD33_2_1]], [[DOTBB9]] ], [ [[TMP7]], [[DOTBB7]] ]
 ; CHECK-NEXT:    br i1 [[CMP40]], label [[DOTBB11:%.*]], label [[DOTBB12]]
 ; CHECK:       .bb11:
-; CHECK-NEXT:    store float [[TMP11]], float* [[ARRAYIDX3]], align 4
-; CHECK-NEXT:    store float [[TMP10]], float* [[ARRAYIDX6]], align 4
+; CHECK-NEXT:    store float [[TMP11]], ptr [[ARRAYIDX3]], align 4
+; CHECK-NEXT:    store float [[TMP10]], ptr [[ARRAYIDX6]], align 4
 ; CHECK-NEXT:    br label [[DOTBB12]]
 ; CHECK:       .bb12:
 ; CHECK-NEXT:    [[SUB]] = add i32 [[I12_06]], -4
@@ -80,20 +80,18 @@ define void @MainKernel(i32 %iNumSteps, i32 %tid, i32 %base) {
   %conv.i = uitofp i32 %iNumSteps to float
   %1 = bitcast float %conv.i to i32
   %conv.i12 = zext i32 %tid to i64
-  %arrayidx3 = getelementptr inbounds [258 x float], [258 x float]* %callA, i64 0, i64 %conv.i12
-  %2 = bitcast float* %arrayidx3 to i32*
-  store i32 %1, i32* %2, align 4
-  %arrayidx6 = getelementptr inbounds [258 x float], [258 x float]* %callB, i64 0, i64 %conv.i12
-  %3 = bitcast float* %arrayidx6 to i32*
-  store i32 %1, i32* %3, align 4
+  %arrayidx3 = getelementptr inbounds [258 x float], ptr %callA, i64 0, i64 %conv.i12
+  store i32 %1, ptr %arrayidx3, align 4
+  %arrayidx6 = getelementptr inbounds [258 x float], ptr %callB, i64 0, i64 %conv.i12
+  store i32 %1, ptr %arrayidx6, align 4
   %cmp7 = icmp eq i32 %tid, 0
   br i1 %cmp7, label %.bb1, label %.bb2
 
 .bb1:
-  %arrayidx10 = getelementptr inbounds [258 x float], [258 x float]* %callA, i64 0, i64 256
-  store float %conv.i, float* %arrayidx10, align 4
-  %arrayidx11 = getelementptr inbounds [258 x float], [258 x float]* %callB, i64 0, i64 256
-  store float 0.000000e+00, float* %arrayidx11, align 4
+  %arrayidx10 = getelementptr inbounds [258 x float], ptr %callA, i64 0, i64 256
+  store float %conv.i, ptr %arrayidx10, align 4
+  %arrayidx11 = getelementptr inbounds [258 x float], ptr %callB, i64 0, i64 256
+  store float 0.000000e+00, ptr %arrayidx11, align 4
   br label %.bb2
 
 .bb2:
@@ -104,68 +102,66 @@ define void @MainKernel(i32 %iNumSteps, i32 %tid, i32 %base) {
   %rA.sroa.8.0 = phi i32 [ %rA.sroa.8.2, %.bb12 ], [ %1, %.bb2 ]
   %rA.sroa.0.0 = phi i32 [ %rA.sroa.0.2, %.bb12 ], [ %1, %.bb2 ]
   %i12.06 = phi i32 [ %sub, %.bb12 ], [ %iNumSteps, %.bb2 ]
-  %4 = icmp ugt i32 %i12.06, %base
+  %2 = icmp ugt i32 %i12.06, %base
   %add = add i32 %i12.06, 1
   %conv.i9 = sext i32 %add to i64
-  %arrayidx20 = getelementptr inbounds [258 x float], [258 x float]* %callA, i64 0, i64 %conv.i9
-  %5 = bitcast float* %arrayidx20 to i32*
-  %arrayidx24 = getelementptr inbounds [258 x float], [258 x float]* %callB, i64 0, i64 %conv.i9
-  %6 = bitcast float* %arrayidx24 to i32*
+  %arrayidx20 = getelementptr inbounds [258 x float], ptr %callA, i64 0, i64 %conv.i9
+  %arrayidx24 = getelementptr inbounds [258 x float], ptr %callB, i64 0, i64 %conv.i9
   %cmp40 = icmp ult i32 %i12.06, %base
-  br i1 %4, label %.bb4, label %.bb5
+  br i1 %2, label %.bb4, label %.bb5
 
 .bb4:
-  %7 = load i32, i32* %5, align 4
-  %8 = load i32, i32* %6, align 4
-  %9 = bitcast i32 %8 to float
-  %10 = bitcast i32 %7 to float
-  %add33 = fadd float %9, %10
-  %11 = bitcast i32 %rA.sroa.8.0 to float
-  %add33.1 = fadd float %add33, %11
-  %12 = bitcast float %add33.1 to i32
-  %13 = bitcast i32 %rA.sroa.0.0 to float
-  %add33.2 = fadd float %add33.1, %13
-  %14 = bitcast float %add33.2 to i32
+  %3 = load i32, ptr %arrayidx20, align 4
+  %4 = load i32, ptr %arrayidx24, align 4
+  %5 = bitcast i32 %4 to float
+  %6 = bitcast i32 %3 to float
+  %add33 = fadd float %5, %6
+  %7 = bitcast i32 %rA.sroa.8.0 to float
+  %add33.1 = fadd float %add33, %7
+  %8 = bitcast float %add33.1 to i32
+  %9 = bitcast i32 %rA.sroa.0.0 to float
+  %add33.2 = fadd float %add33.1, %9
+  %10 = bitcast float %add33.2 to i32
   br label %.bb5
 
 .bb5:
-  %rA.sroa.8.1 = phi i32 [ %12, %.bb4 ], [ %rA.sroa.8.0, %.bb3 ]
-  %rA.sroa.0.1 = phi i32 [ %14, %.bb4 ], [ %rA.sroa.0.0, %.bb3 ]
+  %rA.sroa.8.1 = phi i32 [ %8, %.bb4 ], [ %rA.sroa.8.0, %.bb3 ]
+  %rA.sroa.0.1 = phi i32 [ %10, %.bb4 ], [ %rA.sroa.0.0, %.bb3 ]
   br i1 %cmp40, label %.bb6, label %.bb7
 
 .bb6:
-  store i32 %rA.sroa.0.1, i32* %2, align 4
-  store i32 %rA.sroa.8.1, i32* %3, align 4
+  store i32 %rA.sroa.0.1, ptr %arrayidx3, align 4
+  store i32 %rA.sroa.8.1, ptr %arrayidx6, align 4
   br label %.bb7
 
 .bb7:
-  br i1 %4, label %.bb9, label %.bb10
+  br i1 %2, label %.bb9, label %.bb10
 
 .bb8:
   ret void
 
 .bb9:
-  %15 = load i32, i32* %5, align 4
-  %16 = load i32, i32* %6, align 4
-  %17 = bitcast i32 %16 to float
-  %18 = bitcast i32 %15 to float
-  %add33.112 = fadd float %17, %18
-  %19 = bitcast i32 %rA.sroa.8.1 to float
-  %add33.1.1 = fadd float %add33.112, %19
-  %20 = bitcast float %add33.1.1 to i32
-  %21 = bitcast i32 %rA.sroa.0.1 to float
-  %add33.2.1 = fadd float %add33.1.1, %21
-  %22 = bitcast float %add33.2.1 to i32
+  %11 = load i32, ptr %arrayidx20, align 4
+  %12 = load i32, ptr %arrayidx24, align 4
+  %13 = bitcast i32 %12 to float
+  %14 = bitcast i32 %11 to float
+  %add33.112 = fadd float %13, %14
+  %15 = bitcast i32 %rA.sroa.8.1 to float
+  %add33.1.1 = fadd float %add33.112, %15
+  %16 = bitcast float %add33.1.1 to i32
+  %17 = bitcast i32 %rA.sroa.0.1 to float
+  %add33.2.1 = fadd float %add33.1.1, %17
+  %18 = bitcast float %add33.2.1 to i32
   br label %.bb10
 
 .bb10:
-  %rA.sroa.8.2 = phi i32 [ %20, %.bb9 ], [ %rA.sroa.8.1, %.bb7 ]
-  %rA.sroa.0.2 = phi i32 [ %22, %.bb9 ], [ %rA.sroa.0.1, %.bb7 ]
+  %rA.sroa.8.2 = phi i32 [ %16, %.bb9 ], [ %rA.sroa.8.1, %.bb7 ]
+  %rA.sroa.0.2 = phi i32 [ %18, %.bb9 ], [ %rA.sroa.0.1, %.bb7 ]
   br i1 %cmp40, label %.bb11, label %.bb12
 
 .bb11:
-  store i32 %rA.sroa.0.2, i32* %2, align 4
-  store i32 %rA.sroa.8.2, i32* %3, align 4
+  store i32 %rA.sroa.0.2, ptr %arrayidx3, align 4
+  store i32 %rA.sroa.8.2, ptr %arrayidx6, align 4
   br label %.bb12
 
 .bb12:
index 234644ab01fb938ba4cfd5366a21db59436c3d4e..5c6c012064e05b03ad49ce74f1f2518d63b638e1 100644 (file)
@@ -10,96 +10,96 @@ target datalayout = "p:32:32-p1:32:32-p2:16:16"
 ; between the arithmetic and the layout of allocated memory is
 ; entirely unknown.
 
-define i8* @test1(i8* %t) {
+define ptr @test1(ptr %t) {
 ; CHECK-LABEL: @test1(
-; CHECK-NEXT:    [[TC:%.*]] = ptrtoint i8* [[T:%.*]] to i32
+; CHECK-NEXT:    [[TC:%.*]] = ptrtoint ptr [[T:%.*]] to i32
 ; CHECK-NEXT:    [[TA:%.*]] = add i32 [[TC]], 32
-; CHECK-NEXT:    [[TV:%.*]] = inttoptr i32 [[TA]] to i8*
-; CHECK-NEXT:    ret i8* [[TV]]
+; CHECK-NEXT:    [[TV:%.*]] = inttoptr i32 [[TA]] to ptr
+; CHECK-NEXT:    ret ptr [[TV]]
 ;
-  %tc = ptrtoint i8* %t to i32
+  %tc = ptrtoint ptr %t to i32
   %ta = add i32 %tc, 32
-  %tv = inttoptr i32 %ta to i8*
-  ret i8* %tv
+  %tv = inttoptr i32 %ta to ptr
+  ret ptr %tv
 }
 
 ; These casts should be folded away.
 
-define i1 @test2(i8* %a, i8* %b) {
+define i1 @test2(ptr %a, ptr %b) {
 ; CHECK-LABEL: @test2(
-; CHECK-NEXT:    [[R:%.*]] = icmp eq i8* [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %ta = ptrtoint i8* %a to i32
-  %tb = ptrtoint i8* %b to i32
+  %ta = ptrtoint ptr %a to i32
+  %tb = ptrtoint ptr %b to i32
   %r = icmp eq i32 %ta, %tb
   ret i1 %r
 }
 
 ; These casts should be folded away.
 
-define i1 @test2_as2_same_int(i8 addrspace(2)* %a, i8 addrspace(2)* %b) {
+define i1 @test2_as2_same_int(ptr addrspace(2) %a, ptr addrspace(2) %b) {
 ; CHECK-LABEL: @test2_as2_same_int(
-; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 addrspace(2)* [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr addrspace(2) [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %ta = ptrtoint i8 addrspace(2)* %a to i16
-  %tb = ptrtoint i8 addrspace(2)* %b to i16
+  %ta = ptrtoint ptr addrspace(2) %a to i16
+  %tb = ptrtoint ptr addrspace(2) %b to i16
   %r = icmp eq i16 %ta, %tb
   ret i1 %r
 }
 
 ; These casts should be folded away.
 
-define i1 @test2_as2_larger(i8 addrspace(2)* %a, i8 addrspace(2)* %b) {
+define i1 @test2_as2_larger(ptr addrspace(2) %a, ptr addrspace(2) %b) {
 ; CHECK-LABEL: @test2_as2_larger(
-; CHECK-NEXT:    [[R:%.*]] = icmp eq i8 addrspace(2)* [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr addrspace(2) [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %ta = ptrtoint i8 addrspace(2)* %a to i32
-  %tb = ptrtoint i8 addrspace(2)* %b to i32
+  %ta = ptrtoint ptr addrspace(2) %a to i32
+  %tb = ptrtoint ptr addrspace(2) %b to i32
   %r = icmp eq i32 %ta, %tb
   ret i1 %r
 }
 
 ; These casts should not be folded away.
 
-define i1 @test2_diff_as(i8* %p, i8 addrspace(1)* %q) {
+define i1 @test2_diff_as(ptr %p, ptr addrspace(1) %q) {
 ; CHECK-LABEL: @test2_diff_as(
-; CHECK-NEXT:    [[I0:%.*]] = ptrtoint i8* [[P:%.*]] to i32
-; CHECK-NEXT:    [[I1:%.*]] = ptrtoint i8 addrspace(1)* [[Q:%.*]] to i32
+; CHECK-NEXT:    [[I0:%.*]] = ptrtoint ptr [[P:%.*]] to i32
+; CHECK-NEXT:    [[I1:%.*]] = ptrtoint ptr addrspace(1) [[Q:%.*]] to i32
 ; CHECK-NEXT:    [[R0:%.*]] = icmp sge i32 [[I0]], [[I1]]
 ; CHECK-NEXT:    ret i1 [[R0]]
 ;
-  %i0 = ptrtoint i8* %p to i32
-  %i1 = ptrtoint i8 addrspace(1)* %q to i32
+  %i0 = ptrtoint ptr %p to i32
+  %i1 = ptrtoint ptr addrspace(1) %q to i32
   %r0 = icmp sge i32 %i0, %i1
   ret i1 %r0
 }
 
 ; These casts should not be folded away.
 
-define i1 @test2_diff_as_global(i8 addrspace(1)* %q) {
+define i1 @test2_diff_as_global(ptr addrspace(1) %q) {
 ; CHECK-LABEL: @test2_diff_as_global(
-; CHECK-NEXT:    [[I1:%.*]] = ptrtoint i8 addrspace(1)* [[Q:%.*]] to i32
-; CHECK-NEXT:    [[R0:%.*]] = icmp sge i32 [[I1]], ptrtoint (i8* @global to i32)
+; CHECK-NEXT:    [[I1:%.*]] = ptrtoint ptr addrspace(1) [[Q:%.*]] to i32
+; CHECK-NEXT:    [[R0:%.*]] = icmp sge i32 [[I1]], ptrtoint (ptr @global to i32)
 ; CHECK-NEXT:    ret i1 [[R0]]
 ;
-  %i0 = ptrtoint i8* @global to i32
-  %i1 = ptrtoint i8 addrspace(1)* %q to i32
+  %i0 = ptrtoint ptr @global to i32
+  %i1 = ptrtoint ptr addrspace(1) %q to i32
   %r0 = icmp sge i32 %i1, %i0
   ret i1 %r0
 }
 
 ; These casts should also be folded away.
 
-define i1 @test3(i8* %a) {
+define i1 @test3(ptr %a) {
 ; CHECK-LABEL: @test3(
-; CHECK-NEXT:    [[R:%.*]] = icmp eq i8* [[A:%.*]], @global
+; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr [[A:%.*]], @global
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %ta = ptrtoint i8* %a to i32
-  %r = icmp eq i32 %ta, ptrtoint (i8* @global to i32)
+  %ta = ptrtoint ptr %a to i32
+  %r = icmp eq i32 %ta, ptrtoint (ptr @global to i32)
   ret i1 %r
 }
 
@@ -108,8 +108,8 @@ define i1 @test4(i32 %A) {
 ; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 [[A:%.*]], 0
 ; CHECK-NEXT:    ret i1 [[C]]
 ;
-  %B = inttoptr i32 %A to i8*
-  %C = icmp eq i8* %B, null
+  %B = inttoptr i32 %A to ptr
+  %C = icmp eq ptr %B, null
   ret i1 %C
 }
 
@@ -118,8 +118,8 @@ define i1 @test4_as2(i16 %A) {
 ; CHECK-NEXT:    [[C:%.*]] = icmp eq i16 [[A:%.*]], 0
 ; CHECK-NEXT:    ret i1 [[C]]
 ;
-  %B = inttoptr i16 %A to i8 addrspace(2)*
-  %C = icmp eq i8 addrspace(2)* %B, null
+  %B = inttoptr i16 %A to ptr addrspace(2)
+  %C = icmp eq ptr addrspace(2) %B, null
   ret i1 %C
 }
 
@@ -129,19 +129,18 @@ define i1 @test4_as2(i16 %A) {
 
   %op = type { float }
   %unop = type { i32 }
-@Array = internal constant [1 x %op* (%op*)*] [ %op* (%op*)* @foo ]
+@Array = internal constant [1 x ptr] [ ptr @foo ]
 
-declare %op* @foo(%op* %X)
+declare ptr @foo(ptr %X)
 
-define %unop* @test5(%op* %O) {
+define ptr @test5(ptr %O) {
 ; CHECK-LABEL: @test5(
-; CHECK-NEXT:    [[T_2:%.*]] = call %op* @foo(%op* [[O:%.*]])
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast %op* [[T_2]] to %unop*
-; CHECK-NEXT:    ret %unop* [[TMP1]]
+; CHECK-NEXT:    [[T_2:%.*]] = call ptr @foo(ptr [[O:%.*]])
+; CHECK-NEXT:    ret ptr [[T_2]]
 ;
-  %t = load %unop* (%op*)*, %unop* (%op*)** bitcast ([1 x %op* (%op*)*]* @Array to %unop* (%op*)**); <%unop* (%op*)*> [#uses=1]
-  %t.2 = call %unop* %t( %op* %O )
-  ret %unop* %t.2
+  %t = load ptr, ptr @Array; <ptr> [#uses=1]
+  %t.2 = call ptr %t( ptr %O )
+  ret ptr %t.2
 }
 
 
@@ -149,99 +148,99 @@ define %unop* @test5(%op* %O) {
 ; InstCombine can not 'load (cast P)' -> cast (load P)' if the cast changes
 ; the address space.
 
-define i8 @test6(i8 addrspace(1)* %source) {
+define i8 @test6(ptr addrspace(1) %source) {
 ; CHECK-LABEL: @test6(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[ARRAYIDX223:%.*]] = addrspacecast i8 addrspace(1)* [[SOURCE:%.*]] to i8*
-; CHECK-NEXT:    [[T4:%.*]] = load i8, i8* [[ARRAYIDX223]], align 1
+; CHECK-NEXT:    [[ARRAYIDX223:%.*]] = addrspacecast ptr addrspace(1) [[SOURCE:%.*]] to ptr
+; CHECK-NEXT:    [[T4:%.*]] = load i8, ptr [[ARRAYIDX223]], align 1
 ; CHECK-NEXT:    ret i8 [[T4]]
 ;
 entry:
-  %arrayidx223 = addrspacecast i8 addrspace(1)* %source to i8*
-  %t4 = load i8, i8* %arrayidx223
+  %arrayidx223 = addrspacecast ptr addrspace(1) %source to ptr
+  %t4 = load i8, ptr %arrayidx223
   ret i8 %t4
 }
 
-define <2 x i32> @insertelt(<2 x i32> %x, i32* %p, i133 %index) {
+define <2 x i32> @insertelt(<2 x i32> %x, ptr %p, i133 %index) {
 ; CHECK-LABEL: @insertelt(
-; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint i32* [[P:%.*]] to i32
+; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i32
 ; CHECK-NEXT:    [[R:%.*]] = insertelement <2 x i32> [[X:%.*]], i32 [[TMP1]], i133 [[INDEX:%.*]]
 ; CHECK-NEXT:    ret <2 x i32> [[R]]
 ;
-  %v = inttoptr <2 x i32> %x to <2 x i32*>
-  %i = insertelement <2 x i32*> %v, i32* %p, i133 %index
-  %r = ptrtoint <2 x i32*> %i to <2 x i32>
+  %v = inttoptr <2 x i32> %x to <2 x ptr>
+  %i = insertelement <2 x ptr> %v, ptr %p, i133 %index
+  %r = ptrtoint <2 x ptr> %i to <2 x i32>
   ret <2 x i32> %r
 }
 
-define <2 x i32> @insertelt_intptr_trunc(<2 x i64> %x, i32* %p) {
+define <2 x i32> @insertelt_intptr_trunc(<2 x i64> %x, ptr %p) {
 ; CHECK-LABEL: @insertelt_intptr_trunc(
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc <2 x i64> [[X:%.*]] to <2 x i32>
-; CHECK-NEXT:    [[TMP2:%.*]] = ptrtoint i32* [[P:%.*]] to i32
+; CHECK-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[P:%.*]] to i32
 ; CHECK-NEXT:    [[R:%.*]] = insertelement <2 x i32> [[TMP1]], i32 [[TMP2]], i64 0
 ; CHECK-NEXT:    ret <2 x i32> [[R]]
 ;
-  %v = inttoptr <2 x i64> %x to <2 x i32*>
-  %i = insertelement <2 x i32*> %v, i32* %p, i32 0
-  %r = ptrtoint <2 x i32*> %i to <2 x i32>
+  %v = inttoptr <2 x i64> %x to <2 x ptr>
+  %i = insertelement <2 x ptr> %v, ptr %p, i32 0
+  %r = ptrtoint <2 x ptr> %i to <2 x i32>
   ret <2 x i32> %r
 }
 
-define <2 x i32> @insertelt_intptr_zext(<2 x i8> %x, i32* %p) {
+define <2 x i32> @insertelt_intptr_zext(<2 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @insertelt_intptr_zext(
 ; CHECK-NEXT:    [[TMP1:%.*]] = zext <2 x i8> [[X:%.*]] to <2 x i32>
-; CHECK-NEXT:    [[TMP2:%.*]] = ptrtoint i32* [[P:%.*]] to i32
+; CHECK-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[P:%.*]] to i32
 ; CHECK-NEXT:    [[R:%.*]] = insertelement <2 x i32> [[TMP1]], i32 [[TMP2]], i64 1
 ; CHECK-NEXT:    ret <2 x i32> [[R]]
 ;
-  %v = inttoptr <2 x i8> %x to <2 x i32*>
-  %i = insertelement <2 x i32*> %v, i32* %p, i32 1
-  %r = ptrtoint <2 x i32*> %i to <2 x i32>
+  %v = inttoptr <2 x i8> %x to <2 x ptr>
+  %i = insertelement <2 x ptr> %v, ptr %p, i32 1
+  %r = ptrtoint <2 x ptr> %i to <2 x i32>
   ret <2 x i32> %r
 }
 
-define <2 x i64> @insertelt_intptr_zext_zext(<2 x i8> %x, i32* %p) {
+define <2 x i64> @insertelt_intptr_zext_zext(<2 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @insertelt_intptr_zext_zext(
 ; CHECK-NEXT:    [[TMP1:%.*]] = zext <2 x i8> [[X:%.*]] to <2 x i32>
-; CHECK-NEXT:    [[TMP2:%.*]] = ptrtoint i32* [[P:%.*]] to i32
+; CHECK-NEXT:    [[TMP2:%.*]] = ptrtoint ptr [[P:%.*]] to i32
 ; CHECK-NEXT:    [[TMP3:%.*]] = insertelement <2 x i32> [[TMP1]], i32 [[TMP2]], i64 0
 ; CHECK-NEXT:    [[R:%.*]] = zext <2 x i32> [[TMP3]] to <2 x i64>
 ; CHECK-NEXT:    ret <2 x i64> [[R]]
 ;
-  %v = inttoptr <2 x i8> %x to <2 x i32*>
-  %i = insertelement <2 x i32*> %v, i32* %p, i32 0
-  %r = ptrtoint <2 x i32*> %i to <2 x i64>
+  %v = inttoptr <2 x i8> %x to <2 x ptr>
+  %i = insertelement <2 x ptr> %v, ptr %p, i32 0
+  %r = ptrtoint <2 x ptr> %i to <2 x i64>
   ret <2 x i64> %r
 }
 
-declare void @use(<2 x i32*>)
+declare void @use(<2 x ptr>)
 
-define <2 x i32> @insertelt_extra_use1(<2 x i32> %x, i32* %p) {
+define <2 x i32> @insertelt_extra_use1(<2 x i32> %x, ptr %p) {
 ; CHECK-LABEL: @insertelt_extra_use1(
-; CHECK-NEXT:    [[V:%.*]] = inttoptr <2 x i32> [[X:%.*]] to <2 x i32*>
-; CHECK-NEXT:    call void @use(<2 x i32*> [[V]])
-; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint i32* [[P:%.*]] to i32
+; CHECK-NEXT:    [[V:%.*]] = inttoptr <2 x i32> [[X:%.*]] to <2 x ptr>
+; CHECK-NEXT:    call void @use(<2 x ptr> [[V]])
+; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i32
 ; CHECK-NEXT:    [[R:%.*]] = insertelement <2 x i32> [[X]], i32 [[TMP1]], i64 0
 ; CHECK-NEXT:    ret <2 x i32> [[R]]
 ;
-  %v = inttoptr <2 x i32> %x to <2 x i32*>
-  call void @use(<2 x i32*> %v)
-  %i = insertelement <2 x i32*> %v, i32* %p, i32 0
-  %r = ptrtoint <2 x i32*> %i to <2 x i32>
+  %v = inttoptr <2 x i32> %x to <2 x ptr>
+  call void @use(<2 x ptr> %v)
+  %i = insertelement <2 x ptr> %v, ptr %p, i32 0
+  %r = ptrtoint <2 x ptr> %i to <2 x i32>
   ret <2 x i32> %r
 }
 
-define <2 x i32> @insertelt_extra_use2(<2 x i32> %x, i32* %p) {
+define <2 x i32> @insertelt_extra_use2(<2 x i32> %x, ptr %p) {
 ; CHECK-LABEL: @insertelt_extra_use2(
-; CHECK-NEXT:    [[V:%.*]] = inttoptr <2 x i32> [[X:%.*]] to <2 x i32*>
-; CHECK-NEXT:    [[I:%.*]] = insertelement <2 x i32*> [[V]], i32* [[P:%.*]], i64 0
-; CHECK-NEXT:    call void @use(<2 x i32*> [[I]])
-; CHECK-NEXT:    [[R:%.*]] = ptrtoint <2 x i32*> [[I]] to <2 x i32>
+; CHECK-NEXT:    [[V:%.*]] = inttoptr <2 x i32> [[X:%.*]] to <2 x ptr>
+; CHECK-NEXT:    [[I:%.*]] = insertelement <2 x ptr> [[V]], ptr [[P:%.*]], i64 0
+; CHECK-NEXT:    call void @use(<2 x ptr> [[I]])
+; CHECK-NEXT:    [[R:%.*]] = ptrtoint <2 x ptr> [[I]] to <2 x i32>
 ; CHECK-NEXT:    ret <2 x i32> [[R]]
 ;
-  %v = inttoptr <2 x i32> %x to <2 x i32*>
-  %i = insertelement <2 x i32*> %v, i32* %p, i32 0
-  call void @use(<2 x i32*> %i)
-  %r = ptrtoint <2 x i32*> %i to <2 x i32>
+  %v = inttoptr <2 x i32> %x to <2 x ptr>
+  %i = insertelement <2 x ptr> %v, ptr %p, i32 0
+  call void @use(<2 x ptr> %i)
+  %r = ptrtoint <2 x ptr> %i to <2 x i32>
   ret <2 x i32> %r
 }
index 0eb565ef7932c3b087a59898ca84128a17e1ed14..e0513ae34330dce97ca2d826fe06141c4c579547 100644 (file)
@@ -114,15 +114,15 @@ define <2 x i1> @ctlz_ne_other_v2i32(<2 x i32> %a) {
   ret <2 x i1> %cmp
 }
 
-define i1 @ctlz_eq_other_i32_multiuse(i32 %x, i32* %p) {
+define i1 @ctlz_eq_other_i32_multiuse(i32 %x, ptr %p) {
 ; CHECK-LABEL: @ctlz_eq_other_i32_multiuse(
 ; CHECK-NEXT:    [[LZ:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[X:%.*]], i1 false), [[RNG0:!range !.*]]
-; CHECK-NEXT:    store i32 [[LZ]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[LZ]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 [[LZ]], 24
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %lz = tail call i32 @llvm.ctlz.i32(i32 %x, i1 false)
-  store i32 %lz, i32* %p
+  store i32 %lz, ptr %p
   %cmp = icmp eq i32 %lz, 24
   ret i1 %cmp
 }
@@ -167,15 +167,15 @@ define i1 @ctlz_ugt_other_i32(i32 %x) {
   ret i1 %cmp
 }
 
-define i1 @ctlz_ugt_other_multiuse_i32(i32 %x, i32* %p) {
+define i1 @ctlz_ugt_other_multiuse_i32(i32 %x, ptr %p) {
 ; CHECK-LABEL: @ctlz_ugt_other_multiuse_i32(
 ; CHECK-NEXT:    [[LZ:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[X:%.*]], i1 false), [[RNG0]]
-; CHECK-NEXT:    store i32 [[LZ]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[LZ]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[X]], 32768
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %lz = tail call i32 @llvm.ctlz.i32(i32 %x, i1 false)
-  store i32 %lz, i32* %p
+  store i32 %lz, ptr %p
   %cmp = icmp ugt i32 %lz, 16
   ret i1 %cmp
 }
@@ -210,15 +210,15 @@ define <2 x i1> @ctlz_ult_other_v2i32(<2 x i32> %x) {
   ret <2 x i1> %cmp
 }
 
-define <2 x i1> @ctlz_ult_other_multiuse_v2i32(<2 x i32> %x, <2 x i32>* %p) {
+define <2 x i1> @ctlz_ult_other_multiuse_v2i32(<2 x i32> %x, ptr %p) {
 ; CHECK-LABEL: @ctlz_ult_other_multiuse_v2i32(
 ; CHECK-NEXT:    [[LZ:%.*]] = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> [[X:%.*]], i1 false)
-; CHECK-NEXT:    store <2 x i32> [[LZ]], <2 x i32>* [[P:%.*]], align 8
+; CHECK-NEXT:    store <2 x i32> [[LZ]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt <2 x i32> [[X]], <i32 65535, i32 65535>
 ; CHECK-NEXT:    ret <2 x i1> [[CMP]]
 ;
   %lz = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %x, i1 false)
-  store <2 x i32> %lz, <2 x i32>* %p
+  store <2 x i32> %lz, ptr %p
   %cmp = icmp ult <2 x i32> %lz, <i32 16, i32 16>
   ret <2 x i1> %cmp
 }
@@ -327,15 +327,15 @@ define <2 x i1> @cttz_ne_other_v2i32(<2 x i32> %a) {
   ret <2 x i1> %cmp
 }
 
-define i1 @cttz_eq_other_i33_multiuse(i33 %x, i33* %p) {
+define i1 @cttz_eq_other_i33_multiuse(i33 %x, ptr %p) {
 ; CHECK-LABEL: @cttz_eq_other_i33_multiuse(
 ; CHECK-NEXT:    [[TZ:%.*]] = tail call i33 @llvm.cttz.i33(i33 [[X:%.*]], i1 false), [[RNG1:!range !.*]]
-; CHECK-NEXT:    store i33 [[TZ]], i33* [[P:%.*]], align 4
+; CHECK-NEXT:    store i33 [[TZ]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i33 [[TZ]], 4
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %tz = tail call i33 @llvm.cttz.i33(i33 %x, i1 false)
-  store i33 %tz, i33* %p
+  store i33 %tz, ptr %p
   %cmp = icmp eq i33 %tz, 4
   ret i1 %cmp
 }
@@ -373,15 +373,15 @@ define i1 @cttz_ugt_other_i33(i33 %x) {
   ret i1 %cmp
 }
 
-define i1 @cttz_ugt_other_multiuse_i33(i33 %x, i33* %p) {
+define i1 @cttz_ugt_other_multiuse_i33(i33 %x, ptr %p) {
 ; CHECK-LABEL: @cttz_ugt_other_multiuse_i33(
 ; CHECK-NEXT:    [[TZ:%.*]] = tail call i33 @llvm.cttz.i33(i33 [[X:%.*]], i1 false), [[RNG1]]
-; CHECK-NEXT:    store i33 [[TZ]], i33* [[P:%.*]], align 4
+; CHECK-NEXT:    store i33 [[TZ]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i33 [[TZ]], 16
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %tz = tail call i33 @llvm.cttz.i33(i33 %x, i1 false)
-  store i33 %tz, i33* %p
+  store i33 %tz, ptr %p
   %cmp = icmp ugt i33 %tz, 16
   ret i1 %cmp
 }
@@ -417,15 +417,15 @@ define <2 x i1> @cttz_ult_other_v2i32(<2 x i32> %x) {
   ret <2 x i1> %cmp
 }
 
-define <2 x i1> @cttz_ult_other_multiuse_v2i32(<2 x i32> %x, <2 x i32>* %p) {
+define <2 x i1> @cttz_ult_other_multiuse_v2i32(<2 x i32> %x, ptr %p) {
 ; CHECK-LABEL: @cttz_ult_other_multiuse_v2i32(
 ; CHECK-NEXT:    [[TZ:%.*]] = tail call <2 x i32> @llvm.cttz.v2i32(<2 x i32> [[X:%.*]], i1 false)
-; CHECK-NEXT:    store <2 x i32> [[TZ]], <2 x i32>* [[P:%.*]], align 8
+; CHECK-NEXT:    store <2 x i32> [[TZ]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ult <2 x i32> [[TZ]], <i32 16, i32 16>
 ; CHECK-NEXT:    ret <2 x i1> [[CMP]]
 ;
   %tz = tail call <2 x i32> @llvm.cttz.v2i32(<2 x i32> %x, i1 false)
-  store <2 x i32> %tz, <2 x i32>* %p
+  store <2 x i32> %tz, ptr %p
   %cmp = icmp ult <2 x i32> %tz, <i32 16, i32 16>
   ret <2 x i1> %cmp
 }
@@ -491,15 +491,15 @@ define <2 x i1> @ctpop_ne_bitwidth_v2i32(<2 x i32> %x) {
   ret <2 x i1> %cmp
 }
 
-define i1 @ctpop_ugt_bitwidth_minus_one_i8(i8 %x, i8* %p) {
+define i1 @ctpop_ugt_bitwidth_minus_one_i8(i8 %x, ptr %p) {
 ; CHECK-LABEL: @ctpop_ugt_bitwidth_minus_one_i8(
 ; CHECK-NEXT:    [[POP:%.*]] = tail call i8 @llvm.ctpop.i8(i8 [[X:%.*]]), [[RNG2:!range !.*]]
-; CHECK-NEXT:    store i8 [[POP]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[POP]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8 [[X]], -1
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %pop = tail call i8 @llvm.ctpop.i8(i8 %x)
-  store i8 %pop, i8* %p
+  store i8 %pop, ptr %p
   %cmp = icmp ugt i8 %pop, 7
   ret i1 %cmp
 }
index 206fe259580e770877590be3d9cc85f2e3333986..2e3a59556be14bbd714e23437287b0d8fe82bc06 100644 (file)
@@ -219,19 +219,19 @@ define i1 @shift_trunc_signbit_test(i32 %x) {
   ret i1 %r
 }
 
-define <2 x i1> @shift_trunc_signbit_test_vec_uses(<2 x i17> %x, <2 x i17>* %p1, <2 x i13>* %p2) {
+define <2 x i1> @shift_trunc_signbit_test_vec_uses(<2 x i17> %x, ptr %p1, ptr %p2) {
 ; CHECK-LABEL: @shift_trunc_signbit_test_vec_uses(
 ; CHECK-NEXT:    [[SH:%.*]] = lshr <2 x i17> [[X:%.*]], <i17 4, i17 4>
-; CHECK-NEXT:    store <2 x i17> [[SH]], <2 x i17>* [[P1:%.*]], align 8
+; CHECK-NEXT:    store <2 x i17> [[SH]], ptr [[P1:%.*]], align 8
 ; CHECK-NEXT:    [[TR:%.*]] = trunc <2 x i17> [[SH]] to <2 x i13>
-; CHECK-NEXT:    store <2 x i13> [[TR]], <2 x i13>* [[P2:%.*]], align 4
+; CHECK-NEXT:    store <2 x i13> [[TR]], ptr [[P2:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp sgt <2 x i17> [[X]], <i17 -1, i17 -1>
 ; CHECK-NEXT:    ret <2 x i1> [[R]]
 ;
   %sh = lshr <2 x i17> %x, <i17 4, i17 4>
-  store <2 x i17> %sh, <2 x i17>* %p1
+  store <2 x i17> %sh, ptr %p1
   %tr = trunc <2 x i17> %sh to <2 x i13>
-  store <2 x i13> %tr, <2 x i13>* %p2
+  store <2 x i13> %tr, ptr %p2
   %r = icmp sgt <2 x i13> %tr, <i13 -1, i13 -1>
   ret <2 x i1> %r
 }
index 21f358fdbee85dc3702c446354195bf2862894b7..977404c6c578052c817f513a77c729dcbdf7ec37 100644 (file)
@@ -6,12 +6,12 @@ target triple = "x86_64-unknown-linux-gnu"
 
 %test1.struct = type { i32, i32 }
 @test1.aligned_glbl = global %test1.struct zeroinitializer, align 4
-define void @test1(i64 *%ptr) {
+define void @test1(ptr %ptr) {
 ; CHECK-LABEL: @test1(
-; CHECK-NEXT:    store i64 0, i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 0, ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    ret void
 ;
-  store i64 and (i64 ptrtoint (i32* getelementptr (%test1.struct, %test1.struct* @test1.aligned_glbl, i32 0, i32 1) to i64), i64 3), i64* %ptr
+  store i64 and (i64 ptrtoint (ptr getelementptr (%test1.struct, ptr @test1.aligned_glbl, i32 0, i32 1) to i64), i64 3), ptr %ptr
   ret void
 }
 
@@ -21,11 +21,11 @@ define void @test1(i64 *%ptr) {
 
 define i64 @OpenFilter(i64 %x) {
 ; CHECK-LABEL: @OpenFilter(
-; CHECK-NEXT:    [[T:%.*]] = sub i64 [[X:%.*]], zext (i8 ptrtoint ([9 x i8]* @channel_wg4idx to i8) to i64)
+; CHECK-NEXT:    [[T:%.*]] = sub i64 [[X:%.*]], zext (i8 ptrtoint (ptr @channel_wg4idx to i8) to i64)
 ; CHECK-NEXT:    [[R:%.*]] = and i64 [[T]], 255
 ; CHECK-NEXT:    ret i64 [[R]]
 ;
-  %sub = sub i64 %x, ptrtoint ([9 x i8]* @channel_wg4idx to i64)
+  %sub = sub i64 %x, ptrtoint (ptr @channel_wg4idx to i64)
   %t = trunc i64 %sub to i8
   %r = zext i8 %t to i64
   ret i64 %r
index 9bdbcf9902a6aa075b74411398908452c13106bb..0cb1d2eb54c05660f9030668e2b889ecafd6489e 100644 (file)
@@ -6,28 +6,28 @@ target datalayout = "e-p1:16:16-p2:32:32-p3:64:64"
 @G2 = global i32 42
 @G3 = global [4 x i8] zeroinitializer, align 1
 
-@A1 = alias i32, bitcast (i8* getelementptr inbounds ([4 x i8], [4 x i8]* @G3, i32 0, i32 2) to i32*)
-@A2 = alias i32, inttoptr (i64 and (i64 ptrtoint (i8* getelementptr inbounds ([4 x i8], [4 x i8]* @G3, i32 0, i32 3) to i64), i64 -4) to i32*)
+@A1 = alias i32, getelementptr inbounds ([4 x i8], ptr @G3, i32 0, i32 2)
+@A2 = alias i32, inttoptr (i64 and (i64 ptrtoint (ptr getelementptr inbounds ([4 x i8], ptr @G3, i32 0, i32 3) to i64), i64 -4) to ptr)
 
 define i64 @f1() {
 ; This cannot be constant folded because G1 is underaligned.
 ; CHECK-LABEL: @f1(
 ; CHECK: ret i64 and
-  ret i64 and (i64 ptrtoint (i32* @G1 to i64), i64 1)
+  ret i64 and (i64 ptrtoint (ptr @G1 to i64), i64 1)
 }
 
 define i64 @f2() {
 ; The preferred alignment for G2 allows this one to foled to zero.
 ; CHECK-LABEL: @f2(
 ; CHECK: ret i64 0
-  ret i64 and (i64 ptrtoint (i32* @G2 to i64), i64 1)
+  ret i64 and (i64 ptrtoint (ptr @G2 to i64), i64 1)
 }
 
 define i64 @g1() {
 ; This cannot be constant folded because A1 aliases G3 which is underalaigned.
 ; CHECK-LABEL: @g1(
 ; CHECK: ret i64 and
-  ret i64 and (i64 ptrtoint (i32* @A1 to i64), i64 1)
+  ret i64 and (i64 ptrtoint (ptr @A1 to i64), i64 1)
 }
 
 define i64 @g2() {
@@ -35,6 +35,6 @@ define i64 @g2() {
 ; certain alignment allowing this to fold to zero.
 ; CHECK-LABEL: @g2(
 ; CHECK: ret i64 0
-  ret i64 and (i64 ptrtoint (i32* @A2 to i64), i64 1)
+  ret i64 and (i64 ptrtoint (ptr @A2 to i64), i64 1)
 }
 
index 14564d6d3e19360278b479016faf26c4f028c384..df6d63493de63e804dad58d87bd84023387c8583 100644 (file)
@@ -3,6 +3,6 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 
 define i32 @a() nounwind readnone {
 entry:
-  ret i32 zext (i1 icmp eq (i32 0, i32 ptrtoint (i32 ()* @a to i32)) to i32)
+  ret i32 zext (i1 icmp eq (i32 0, i32 ptrtoint (ptr @a to i32)) to i32)
 }
 ; CHECK: ret i32 0
index ba38615898ede3adf4ec33d368196ac90bacf654..375202ec3d0feb6447c7df3fa4b7d1d773dea43e 100644 (file)
@@ -11,50 +11,50 @@ target datalayout = "E-p:64:64:64-p1:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-
 
 define void @frob() {
 ; CHECK-LABEL: @frob(
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 0), align 16
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 1), align 4
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 2), align 8
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 1, i64 0), align 4
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 1, i64 1), align 16
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 1, i64 2), align 4
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 1, i32 0, i64 0), align 8
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 1, i32 0, i64 1), align 4
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 1, i32 0, i64 2), align 16
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 1, i32 1, i64 0), align 4
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 1, i32 1, i64 1), align 8
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 1, i32 1, i64 2), align 4
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 2, i32 0, i64 0), align 16
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 2, i32 0, i64 1), align 4
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 2, i32 0, i64 2), align 8
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 2, i32 1, i64 0), align 4
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 2, i32 1, i64 1), align 16
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 2, i32 1, i64 2), align 4
-; CHECK-NEXT:    store i32 1, i32* getelementptr inbounds ([3 x %struct.X], [3 x %struct.X]* @Y, i64 1, i64 0, i32 0, i64 0), align 8
-; CHECK-NEXT:    store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 2, i64 0, i32 0, i64 0), align 16
-; CHECK-NEXT:    store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 1, i64 0, i32 0, i64 1), align 8
+; CHECK-NEXT:    store i32 1, ptr @Y, align 16
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 1), align 4
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 2), align 8
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 1, i64 0), align 4
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 1, i64 1), align 16
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 1, i64 2), align 4
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 1, i32 0, i64 0), align 8
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 1, i32 0, i64 1), align 4
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 1, i32 0, i64 2), align 16
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 1, i32 1, i64 0), align 4
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 1, i32 1, i64 1), align 8
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 1, i32 1, i64 2), align 4
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 2, i32 0, i64 0), align 16
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 2, i32 0, i64 1), align 4
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 2, i32 0, i64 2), align 8
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 2, i32 1, i64 0), align 4
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 2, i32 1, i64 1), align 16
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 0, i64 2, i32 1, i64 2), align 4
+; CHECK-NEXT:    store i32 1, ptr getelementptr inbounds ([3 x %struct.X], ptr @Y, i64 1, i64 0, i32 0, i64 0), align 8
+; CHECK-NEXT:    store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 2, i64 0, i32 0, i64 0), align 16
+; CHECK-NEXT:    store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 1, i64 0, i32 0, i64 1), align 8
 ; CHECK-NEXT:    ret void
 ;
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 0), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 1), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 2), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 3), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 4), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 5), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 6), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 7), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 8), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 9), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 10), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 11), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 12), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 13), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 14), align 8
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 15), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 16), align 8
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 17), align 4
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 18), align 8
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 36), align 8
-  store i32 1, i32* getelementptr ([3 x %struct.X], [3 x %struct.X]* @Y, i64 0, i64 0, i32 0, i64 19), align 8
+  store i32 1, ptr @Y, align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 1), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 2), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 3), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 4), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 5), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 6), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 7), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 8), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 9), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 10), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 11), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 12), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 13), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 14), align 8
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 15), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 16), align 8
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 17), align 4
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 18), align 8
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 36), align 8
+  store i32 1, ptr getelementptr ([3 x %struct.X], ptr @Y, i64 0, i64 0, i32 0, i64 19), align 8
   ret void
 }
 
@@ -68,13 +68,12 @@ define i64 @test2() {
 ; CHECK-NEXT:    ret i64 1000
 ;
 entry:
-  %A = bitcast i8* getelementptr inbounds ([1000 x i8], [1000 x i8]* @X, i64 1, i64 0) to i8*
-  %B = bitcast i8* getelementptr inbounds ([1000 x i8], [1000 x i8]* @X, i64 0, i64 0) to i8*
+  %A = bitcast ptr getelementptr inbounds ([1000 x i8], ptr @X, i64 1, i64 0) to ptr
 
-  %B2 = ptrtoint i8* %B to i64
+  %B2 = ptrtoint ptr @X to i64
   %C = sub i64 0, %B2
-  %D = getelementptr i8, i8* %A, i64 %C
-  %E = ptrtoint i8* %D to i64
+  %D = getelementptr i8, ptr %A, i64 %C
+  %E = ptrtoint ptr %D to i64
 
   ret i64 %E
 }
@@ -88,13 +87,12 @@ define i16 @test2_as1() {
 ;
 
 entry:
-  %A = bitcast i8 addrspace(1)* getelementptr inbounds ([1000 x i8], [1000 x i8] addrspace(1)* @X_as1, i64 1, i64 0) to i8 addrspace(1)*
-  %B = bitcast i8 addrspace(1)* getelementptr inbounds ([1000 x i8], [1000 x i8] addrspace(1)* @X_as1, i64 0, i64 0) to i8 addrspace(1)*
+  %A = bitcast ptr addrspace(1) getelementptr inbounds ([1000 x i8], ptr addrspace(1) @X_as1, i64 1, i64 0) to ptr addrspace(1)
 
-  %B2 = ptrtoint i8 addrspace(1)* %B to i16
+  %B2 = ptrtoint ptr addrspace(1) @X_as1 to i16
   %C = sub i16 0, %B2
-  %D = getelementptr i8, i8 addrspace(1)* %A, i16 %C
-  %E = ptrtoint i8 addrspace(1)* %D to i16
+  %D = getelementptr i8, ptr addrspace(1) %A, i16 %C
+  %E = ptrtoint ptr addrspace(1) %D to i16
 
   ret i16 %E
 }
@@ -104,17 +102,17 @@ entry:
 ; an offset of 8-byte.
 ; Every element in the @CallerInfos array is 16-byte aligned so
 ; any access from the following gep is 8-byte aligned.
-%struct.CallerInfo = type { i8*, i32 }
+%struct.CallerInfo = type { ptr, i32 }
 @CallerInfos = global [128 x %struct.CallerInfo] zeroinitializer, align 16
 
 define i32 @test_gep_in_struct(i64 %idx) {
 ; CHECK-LABEL: @test_gep_in_struct(
-; CHECK-NEXT:    [[NS7:%.*]] = getelementptr inbounds [128 x %struct.CallerInfo], [128 x %struct.CallerInfo]* @CallerInfos, i64 0, i64 [[IDX:%.*]], i32 1
-; CHECK-NEXT:    [[RES:%.*]] = load i32, i32* [[NS7]], align 8
+; CHECK-NEXT:    [[NS7:%.*]] = getelementptr inbounds [128 x %struct.CallerInfo], ptr @CallerInfos, i64 0, i64 [[IDX:%.*]], i32 1
+; CHECK-NEXT:    [[RES:%.*]] = load i32, ptr [[NS7]], align 8
 ; CHECK-NEXT:    ret i32 [[RES]]
 ;
-  %NS7 = getelementptr inbounds [128 x %struct.CallerInfo], [128 x %struct.CallerInfo]* @CallerInfos, i64 0, i64 %idx, i32 1
-  %res = load i32, i32* %NS7, align 1
+  %NS7 = getelementptr inbounds [128 x %struct.CallerInfo], ptr @CallerInfos, i64 0, i64 %idx, i32 1
+  %res = load i32, ptr %NS7, align 1
   ret i32 %res
 }
 
@@ -122,81 +120,81 @@ define i32 @test_gep_in_struct(i64 %idx) {
 @g2 = external global i8
 
 declare i64 @get.i64()
-declare void @use.ptr(i8*)
+declare void @use.ptr(ptr)
 
-define i8* @gep_sub_self() {
+define ptr @gep_sub_self() {
 ; CHECK-LABEL: @gep_sub_self(
-; CHECK-NEXT:    ret i8* getelementptr (i8, i8* @g, i64 sub (i64 0, i64 ptrtoint (i8* @g to i64)))
+; CHECK-NEXT:    ret ptr getelementptr (i8, ptr @g, i64 sub (i64 0, i64 ptrtoint (ptr @g to i64)))
 ;
-  %p.int = ptrtoint i8* @g to i64
+  %p.int = ptrtoint ptr @g to i64
   %p.int.neg = sub i64 0, %p.int
-  %p1 = getelementptr i8, i8* @g, i64 %p.int.neg
-  ret i8* %p1
+  %p1 = getelementptr i8, ptr @g, i64 %p.int.neg
+  ret ptr %p1
 }
 
-define i8* @gep_sub_self_plus_addr(i64 %addr) {
+define ptr @gep_sub_self_plus_addr(i64 %addr) {
 ; CHECK-LABEL: @gep_sub_self_plus_addr(
-; CHECK-NEXT:    [[P2:%.*]] = getelementptr i8, i8* getelementptr (i8, i8* @g, i64 sub (i64 0, i64 ptrtoint (i8* @g to i64))), i64 [[ADDR:%.*]]
-; CHECK-NEXT:    ret i8* [[P2]]
+; CHECK-NEXT:    [[P2:%.*]] = getelementptr i8, ptr getelementptr (i8, ptr @g, i64 sub (i64 0, i64 ptrtoint (ptr @g to i64))), i64 [[ADDR:%.*]]
+; CHECK-NEXT:    ret ptr [[P2]]
 ;
-  %p.int = ptrtoint i8* @g to i64
+  %p.int = ptrtoint ptr @g to i64
   %p.int.neg = sub i64 0, %p.int
-  %p1 = getelementptr i8, i8* @g, i64 %p.int.neg
-  %p2 = getelementptr i8, i8* %p1, i64 %addr
-  ret i8* %p2
+  %p1 = getelementptr i8, ptr @g, i64 %p.int.neg
+  %p2 = getelementptr i8, ptr %p1, i64 %addr
+  ret ptr %p2
 }
 
-define i8* @gep_plus_addr_sub_self(i64 %addr) {
+define ptr @gep_plus_addr_sub_self(i64 %addr) {
 ; CHECK-LABEL: @gep_plus_addr_sub_self(
-; CHECK-NEXT:    [[P1:%.*]] = getelementptr i8, i8* @g, i64 [[ADDR:%.*]]
-; CHECK-NEXT:    [[P2:%.*]] = getelementptr i8, i8* [[P1]], i64 sub (i64 0, i64 ptrtoint (i8* @g to i64))
-; CHECK-NEXT:    ret i8* [[P2]]
+; CHECK-NEXT:    [[P1:%.*]] = getelementptr i8, ptr @g, i64 [[ADDR:%.*]]
+; CHECK-NEXT:    [[P2:%.*]] = getelementptr i8, ptr [[P1]], i64 sub (i64 0, i64 ptrtoint (ptr @g to i64))
+; CHECK-NEXT:    ret ptr [[P2]]
 ;
-  %p.int = ptrtoint i8* @g to i64
+  %p.int = ptrtoint ptr @g to i64
   %p.int.neg = sub i64 0, %p.int
-  %p1 = getelementptr i8, i8* @g, i64 %addr
-  %p2 = getelementptr i8, i8* %p1, i64 %p.int.neg
-  ret i8* %p2
+  %p1 = getelementptr i8, ptr @g, i64 %addr
+  %p2 = getelementptr i8, ptr %p1, i64 %p.int.neg
+  ret ptr %p2
 }
 
-define i8* @gep_plus_addr_sub_self_in_loop() {
+define ptr @gep_plus_addr_sub_self_in_loop() {
 ; CHECK-LABEL: @gep_plus_addr_sub_self_in_loop(
 ; CHECK-NEXT:    br label [[LOOP:%.*]]
 ; CHECK:       loop:
 ; CHECK-NEXT:    [[ADDR:%.*]] = call i64 @get.i64()
-; CHECK-NEXT:    [[P2:%.*]] = getelementptr i8, i8* getelementptr (i8, i8* @g, i64 sub (i64 0, i64 ptrtoint (i8* @g to i64))), i64 [[ADDR]]
-; CHECK-NEXT:    call void @use.ptr(i8* [[P2]])
+; CHECK-NEXT:    [[P2:%.*]] = getelementptr i8, ptr getelementptr (i8, ptr @g, i64 sub (i64 0, i64 ptrtoint (ptr @g to i64))), i64 [[ADDR]]
+; CHECK-NEXT:    call void @use.ptr(ptr [[P2]])
 ; CHECK-NEXT:    br label [[LOOP]]
 ;
-  %p.int = ptrtoint i8* @g to i64
+  %p.int = ptrtoint ptr @g to i64
   %p.int.neg = sub i64 0, %p.int
   br label %loop
 
 loop:
   %addr = call i64 @get.i64()
-  %p1 = getelementptr i8, i8* @g, i64 %addr
-  %p2 = getelementptr i8, i8* %p1, i64 %p.int.neg
-  call void @use.ptr(i8* %p2)
+  %p1 = getelementptr i8, ptr @g, i64 %addr
+  %p2 = getelementptr i8, ptr %p1, i64 %p.int.neg
+  call void @use.ptr(ptr %p2)
   br label %loop
 }
 
-define i8* @gep_sub_other() {
+define ptr @gep_sub_other() {
 ; CHECK-LABEL: @gep_sub_other(
-; CHECK-NEXT:    ret i8* getelementptr (i8, i8* @g, i64 sub (i64 0, i64 ptrtoint (i8* @g2 to i64)))
+; CHECK-NEXT:    ret ptr getelementptr (i8, ptr @g, i64 sub (i64 0, i64 ptrtoint (ptr @g2 to i64)))
 ;
-  %p.int = ptrtoint i8* @g2 to i64
+  %p.int = ptrtoint ptr @g2 to i64
   %p.int.neg = sub i64 0, %p.int
-  %p1 = getelementptr i8, i8* @g, i64 %p.int.neg
-  ret i8* %p1
+  %p1 = getelementptr i8, ptr @g, i64 %p.int.neg
+  ret ptr %p1
 }
 
 define i64 @gep_sub_other_to_int() {
 ; CHECK-LABEL: @gep_sub_other_to_int(
-; CHECK-NEXT:    ret i64 sub (i64 ptrtoint (i8* @g to i64), i64 ptrtoint (i8* @g2 to i64))
+; CHECK-NEXT:    ret i64 sub (i64 ptrtoint (ptr @g to i64), i64 ptrtoint (ptr @g2 to i64))
 ;
-  %p.int = ptrtoint i8* @g2 to i64
+  %p.int = ptrtoint ptr @g2 to i64
   %p.int.neg = sub i64 0, %p.int
-  %p1 = getelementptr i8, i8* @g, i64 %p.int.neg
-  %p1.int = ptrtoint i8* %p1 to i64
+  %p1 = getelementptr i8, ptr @g, i64 %p.int.neg
+  %p1.int = ptrtoint ptr %p1 to i64
   ret i64 %p1.int
 }
index f256cc300b0b5de98f0fb7e438a32e8b136a3da6..a4acab5d767a49895eb3af2340e0262146020c47 100644 (file)
@@ -4,7 +4,7 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 
 define i32 @a() nounwind readnone {
 entry:
-  ret i32 zext (i1 icmp eq (i32 0, i32 ptrtoint (i32 ()* @a to i32)) to i32)
+  ret i32 zext (i1 icmp eq (i32 0, i32 ptrtoint (ptr @a to i32)) to i32)
 }
 ; CHECK: INSTCOMBINE ITERATION #1
 ; CHECK-NOT: INSTCOMBINE ITERATION #2
index 329d772850a24b0ea1f1d54c1b21205f75040cf6..bcbfdbb09cbdc99706a92e3ff770131ef0987729 100644 (file)
@@ -5,32 +5,32 @@
 
 ; OSS-Fuzz #14169
 ; https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14169
-define void @ossfuzz_14169_test1(i32* %a0) {
+define void @ossfuzz_14169_test1(ptr %a0) {
 ; CHECK-LABEL: @ossfuzz_14169_test1(
 ; CHECK-NEXT:  bb:
 ; CHECK-NEXT:    ret void
 ;
 bb:
-  %B = ptrtoint i32* @A to i64
+  %B = ptrtoint ptr @A to i64
   %C = icmp sge i64 %B, 0
   %X = select i1 %C, i712 0, i712 1
   %B9 = lshr i712 %X, 146783911423364576743092537299333564210980159306769991919205685720763064069663027716481187399048043939495936
-  %G5 = getelementptr i64, i64* undef, i712 %B9
-  store i64* %G5, i64** undef
+  %G5 = getelementptr i64, ptr undef, i712 %B9
+  store ptr %G5, ptr undef
   ret void
 }
 
-define void @ossfuzz_14169_test2(i32* %a0) {
+define void @ossfuzz_14169_test2(ptr %a0) {
 ; CHECK-LABEL: @ossfuzz_14169_test2(
 ; CHECK-NEXT:  bb:
 ; CHECK-NEXT:    ret void
 ;
 bb:
-  %B = ptrtoint i32* @A to i64
+  %B = ptrtoint ptr @A to i64
   %C = icmp sge i64 %B, 0
   %X = select i1 %C, i712 0, i712 1
   %B9 = shl i712 %X, 146783911423364576743092537299333564210980159306769991919205685720763064069663027716481187399048043939495936
-  %G5 = getelementptr i64, i64* undef, i712 %B9
-  store i64* %G5, i64** undef
+  %G5 = getelementptr i64, ptr undef, i712 %B9
+  store ptr %G5, ptr undef
   ret void
 }
index aa2f4a1b27733a4fe24273c22911d310e2ee5d65..3defcc94c304e368a90377b803a679aaa78714ec 100644 (file)
@@ -26,7 +26,7 @@ define i32 @no_extern() {
   ret i32 %a
 }
 
-define i32 @indirect_call(i32 ()* %f) {
+define i32 @indirect_call(ptr %f) {
   ; CHECK: call i32 %f() [[$CONVERGENT_ATTR]]
   %a = call i32 %f() convergent
   ret i32 %a
index ce25414ac98c280c8347d34db8ea78e807ee141f..5f86069ef73680302f173b7b3e03ff4b17936b81 100644 (file)
@@ -33,20 +33,20 @@ entry:
 
 
 ; PR4908
-define void @test2(<1 x i16>* nocapture %b, i32* nocapture %c) nounwind ssp {
+define void @test2(ptr nocapture %b, ptr nocapture %c) nounwind ssp {
 entry:
-  %arrayidx = getelementptr inbounds <1 x i16>, <1 x i16>* %b, i64 0 ; <<1 x i16>*>
-  %tmp2 = load <1 x i16>, <1 x i16>* %arrayidx               ; <<1 x i16>> [#uses=1]
+  %arrayidx = getelementptr inbounds <1 x i16>, ptr %b, i64 0 ; <ptr>
+  %tmp2 = load <1 x i16>, ptr %arrayidx               ; <<1 x i16>> [#uses=1]
   %tmp6 = bitcast <1 x i16> %tmp2 to i16          ; <i16> [#uses=1]
   %tmp7 = zext i16 %tmp6 to i32                   ; <i32> [#uses=1]
   %ins = or i32 0, %tmp7                          ; <i32> [#uses=1]
-  %arrayidx20 = getelementptr inbounds i32, i32* %c, i64 0 ; <i32*> [#uses=1]
-  store i32 %ins, i32* %arrayidx20
+  %arrayidx20 = getelementptr inbounds i32, ptr %c, i64 0 ; <ptr> [#uses=1]
+  store i32 %ins, ptr %arrayidx20
   ret void
 }
 
 ; PR5262
-@tmp2 = global i64 0                              ; <i64*> [#uses=1]
+@tmp2 = global i64 0                              ; <ptr> [#uses=1]
 
 declare void @use(i64) nounwind
 
@@ -60,7 +60,7 @@ define void @foo(i1) nounwind align 2 {
 ; <label>:3                                       ; preds = %2, %1
   %4 = phi i8 [ 1, %2 ], [ 0, %1 ]                ; <i8> [#uses=1]
   %5 = icmp eq i8 %4, 0                           ; <i1> [#uses=1]
-  %6 = load i64, i64* @tmp2, align 8                   ; <i64> [#uses=1]
+  %6 = load i64, ptr @tmp2, align 8                   ; <i64> [#uses=1]
   %7 = select i1 %5, i64 0, i64 %6                ; <i64> [#uses=1]
   br label %8
 
@@ -70,19 +70,19 @@ define void @foo(i1) nounwind align 2 {
 }
 
 %t0 = type { i32, i32 }
-%t1 = type { i32, i32, i32, i32, i32* }
+%t1 = type { i32, i32, i32, i32, ptr }
 
-declare %t0* @bar2(i64)
+declare ptr @bar2(i64)
 
 define void @bar3(i1, i1) nounwind align 2 {
 ; <label>:2
   br i1 %1, label %10, label %3
 
 ; <label>:3                                       ; preds = %2
-  %4 = getelementptr inbounds %t0, %t0* null, i64 0, i32 1 ; <i32*> [#uses=0]
-  %5 = getelementptr inbounds %t1, %t1* null, i64 0, i32 4 ; <i32**> [#uses=1]
-  %6 = load i32*, i32** %5, align 8                     ; <i32*> [#uses=1]
-  %7 = icmp ne i32* %6, null                      ; <i1> [#uses=1]
+  %4 = getelementptr inbounds %t0, ptr null, i64 0, i32 1 ; <ptr> [#uses=0]
+  %5 = getelementptr inbounds %t1, ptr null, i64 0, i32 4 ; <ptr> [#uses=1]
+  %6 = load ptr, ptr %5, align 8                     ; <ptr> [#uses=1]
+  %7 = icmp ne ptr %6, null                      ; <i1> [#uses=1]
   %8 = zext i1 %7 to i32                          ; <i32> [#uses=1]
   %9 = add i32 %8, 0                              ; <i32> [#uses=1]
   br label %10
@@ -96,7 +96,7 @@ define void @bar3(i1, i1) nounwind align 2 {
 
 ; <label>:13                                      ; preds = %12, %10
   %14 = zext i32 %11 to i64                       ; <i64> [#uses=1]
-  %15 = tail call %t0* @bar2(i64 %14) nounwind      ; <%0*> [#uses=0]
+  %15 = tail call ptr @bar2(i64 %14) nounwind      ; <ptr> [#uses=0]
   ret void
 }
 
@@ -106,7 +106,7 @@ define void @bar3(i1, i1) nounwind align 2 {
 ; PR5262
 ; Make sure the PHI node gets put in a place where all of its operands dominate
 ; it.
-define i64 @test4(i1 %c, i64* %P) nounwind align 2 {
+define i64 @test4(i1 %c, ptr %P) nounwind align 2 {
 BB0:
   br i1 %c, label %BB1, label %BB2
 
@@ -115,7 +115,7 @@ BB1:
 
 BB2:
   %v5_ = phi i1 [ true, %BB0], [false, %BB1]
-  %v6 = load i64, i64* %P
+  %v6 = load i64, ptr %P
   br label %l8
 
 l8:
@@ -131,11 +131,11 @@ define i32 @test5a() {
        ret i32 0
 }
 
-define void @test5(i1* %ptr) personality i32 (...)* @__gxx_personality_v0 {
-  store i1 true, i1* %ptr
+define void @test5(ptr %ptr) personality ptr @__gxx_personality_v0 {
+  store i1 true, ptr %ptr
   %r = invoke i32 @test5a() to label %exit unwind label %unwind
 unwind:
-  %exn = landingpad {i8*, i32}
+  %exn = landingpad {ptr, i32}
           cleanup
   br label %exit
 exit:
@@ -145,82 +145,82 @@ exit:
 
 ; PR5673
 
-@test6g = external global i32*  
+@test6g = external global ptr  
 
-define arm_aapcs_vfpcc i32 @test6(i32 %argc, i8** %argv) nounwind {
+define arm_aapcs_vfpcc i32 @test6(i32 %argc, ptr %argv) nounwind {
 entry:
-  store i32* getelementptr (i32, i32* bitcast (i32 (i32, i8**)* @test6 to i32*), i32 -2048), i32** @test6g, align 4
+  store ptr getelementptr (i32, ptr @test6, i32 -2048), ptr @test6g, align 4
   unreachable
 }
 
 
 ; PR5827
 
-%class.RuleBasedBreakIterator = type { i64 ()* }
-%class.UStack = type { i8** }
+%class.RuleBasedBreakIterator = type { ptr }
+%class.UStack = type { ptr }
 
-define i32 @_ZN22RuleBasedBreakIterator15checkDictionaryEi(%class.RuleBasedBreakIterator* %this, i32 %x) align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define i32 @_ZN22RuleBasedBreakIterator15checkDictionaryEi(ptr %this, i32 %x) align 2 personality ptr @__gxx_personality_v0 {
 entry:
-  %breaks = alloca %class.UStack, align 4         ; <%class.UStack*> [#uses=3]
-  call void @_ZN6UStackC1Ei(%class.UStack* %breaks, i32 0)
+  %breaks = alloca %class.UStack, align 4         ; <ptr> [#uses=3]
+  call void @_ZN6UStackC1Ei(ptr %breaks, i32 0)
   %tobool = icmp ne i32 %x, 0                     ; <i1> [#uses=1]
   br i1 %tobool, label %cond.end, label %cond.false
 
 terminate.handler:                                ; preds = %ehcleanup
-  %exc = landingpad { i8*, i32 }
+  %exc = landingpad { ptr, i32 }
            cleanup
   call void @_ZSt9terminatev() noreturn nounwind
   unreachable
 
 ehcleanup:                                        ; preds = %cond.false
-  %exc1 = landingpad { i8*, i32 }
-           catch i8* null
-  invoke void @_ZN6UStackD1Ev(%class.UStack* %breaks)
+  %exc1 = landingpad { ptr, i32 }
+           catch ptr null
+  invoke void @_ZN6UStackD1Ev(ptr %breaks)
           to label %cont unwind label %terminate.handler
 
 cont:                                             ; preds = %ehcleanup
-  resume { i8*, i32 } %exc1
+  resume { ptr, i32 } %exc1
 
 cond.false:                                       ; preds = %entry
-  %tmp4 = getelementptr inbounds %class.RuleBasedBreakIterator, %class.RuleBasedBreakIterator* %this, i32 0, i32 0 ; <i64 ()**> [#uses=1]
-  %tmp5 = load i64 ()*, i64 ()** %tmp4                     ; <i64 ()*> [#uses=1]
+  %tmp4 = getelementptr inbounds %class.RuleBasedBreakIterator, ptr %this, i32 0, i32 0 ; <ptr> [#uses=1]
+  %tmp5 = load ptr, ptr %tmp4                     ; <ptr> [#uses=1]
   %call = invoke i64 %tmp5()
           to label %cond.end unwind label %ehcleanup ; <i64> [#uses=1]
 
 cond.end:                                         ; preds = %cond.false, %entry
   %cond = phi i64 [ 0, %entry ], [ %call, %cond.false ] ; <i64> [#uses=1]
   %conv = trunc i64 %cond to i32                  ; <i32> [#uses=1]
-  call void @_ZN6UStackD1Ev(%class.UStack* %breaks)
+  call void @_ZN6UStackD1Ev(ptr %breaks)
   ret i32 %conv
 }
 
-declare void @_ZN6UStackC1Ei(%class.UStack*, i32)
+declare void @_ZN6UStackC1Ei(ptr, i32)
 
-declare void @_ZN6UStackD1Ev(%class.UStack*)
+declare void @_ZN6UStackD1Ev(ptr)
 
 declare i32 @__gxx_personality_v0(...)
 
 declare void @_ZSt9terminatev()
 
-declare void @_Unwind_Resume_or_Rethrow(i8*)
+declare void @_Unwind_Resume_or_Rethrow(ptr)
 
 
 
 ; rdar://7590304
-define i8* @test10(i8* %self, i8* %tmp3, i1* %ptr1, i1* %ptr2) personality i32 (...)* @__gxx_personality_v0 {
+define ptr @test10(ptr %self, ptr %tmp3, ptr %ptr1, ptr %ptr2) personality ptr @__gxx_personality_v0 {
 entry:
-  store i1 true, i1* %ptr1
-  store i1 true, i1* %ptr2
+  store i1 true, ptr %ptr1
+  store i1 true, ptr %ptr2
   invoke void @test10a()
-          to label %invoke.cont unwind label %try.handler ; <i8*> [#uses=0]
+          to label %invoke.cont unwind label %try.handler ; <ptr> [#uses=0]
 
 invoke.cont:                                      ; preds = %entry
   unreachable
 
 try.handler:                                      ; preds = %entry
-  %exn = landingpad {i8*, i32}
-           catch i8* null
-  ret i8* %self
+  %exn = landingpad {ptr, i32}
+           catch ptr null
+  ret ptr %self
 }
 
 define void @test10a() {
@@ -240,12 +240,12 @@ entry:
 }
 
 ; PR6503
-define void @test12(i32* %A) nounwind {
+define void @test12(ptr %A) nounwind {
 entry:
-  %tmp1 = load i32, i32* %A
+  %tmp1 = load i32, ptr %A
   %cmp = icmp ugt i32 1, %tmp1                    ; <i1> [#uses=1]
   %conv = zext i1 %cmp to i32                     ; <i32> [#uses=1]
-  %tmp2 = load i32, i32* %A
+  %tmp2 = load i32, ptr %A
   %cmp3 = icmp ne i32 %tmp2, 0                    ; <i1> [#uses=1]
   %conv4 = zext i1 %cmp3 to i32                   ; <i32> [#uses=1]
   %or = or i32 %conv, %conv4                      ; <i32> [#uses=1]
@@ -256,45 +256,43 @@ entry:
 
 %s1 = type { %s2, %s2, [6 x %s2], i32, i32, i32, [1 x i32], [0 x i8] }
 %s2 = type { i64 }
-define void @test13(i32* %ptr1, i32* %ptr2, i32* %ptr3) nounwind {
+define void @test13(ptr %ptr1, ptr %ptr2, ptr %ptr3) nounwind {
 entry:
-  %0 = getelementptr inbounds %s1, %s1* null, i64 0, i32 2, i64 0, i32 0
-  %1 = bitcast i64* %0 to i32*
-  %2 = getelementptr inbounds %s1, %s1* null, i64 0, i32 2, i64 1, i32 0
-  %.pre = load i32, i32* %1, align 8
-  %3 = lshr i32 %.pre, 19
+  %0 = getelementptr inbounds %s1, ptr null, i64 0, i32 2, i64 0, i32 0
+  %1 = getelementptr inbounds %s1, ptr null, i64 0, i32 2, i64 1, i32 0
+  %.pre = load i32, ptr %0, align 8
+  %2 = lshr i32 %.pre, 19
   %brmerge = or i1 1, 0
-  %4 = and i32 %3, 3
-  %5 = add nsw i32 %4, 1
-  %6 = shl i32 %5, 19
-  %7 = add i32 %6, 1572864
-  %8 = and i32 %7, 1572864
-  %9 = load i64, i64* %2, align 8
-  %trunc156 = trunc i64 %9 to i32
-  %10 = and i32 %trunc156, -1537
-  %11 = and i32 %10, -6145
-  %12 = or i32 %11, 2048
-  %13 = and i32 %12, -24577
-  %14 = or i32 %13, 16384
-  %15 = or i32 %14, 98304
-  store i32 %15, i32* %ptr1, align 8
-  %16 = and i32 %15, -1572865
-  %17 = or i32 %16, %8
-  store i32 %17, i32* %ptr2, align 8
-  %18 = and i32 %17, -449
-  %19 = or i32 %18, 64
-  store i32 %19, i32* %ptr3, align 8
+  %3 = and i32 %2, 3
+  %4 = add nsw i32 %3, 1
+  %5 = shl i32 %4, 19
+  %6 = add i32 %5, 1572864
+  %7 = and i32 %6, 1572864
+  %8 = load i64, ptr %1, align 8
+  %trunc156 = trunc i64 %8 to i32
+  %9 = and i32 %trunc156, -1537
+  %10 = and i32 %9, -6145
+  %11 = or i32 %10, 2048
+  %12 = and i32 %11, -24577
+  %13 = or i32 %12, 16384
+  %14 = or i32 %13, 98304
+  store i32 %14, ptr %ptr1, align 8
+  %15 = and i32 %14, -1572865
+  %16 = or i32 %15, %7
+  store i32 %16, ptr %ptr2, align 8
+  %17 = and i32 %16, -449
+  %18 = or i32 %17, 64
+  store i32 %18, ptr %ptr3, align 8
   unreachable
 }
 
 
 ; PR8807
-declare i32 @test14f(i8* (i8*)*) nounwind
+declare i32 @test14f(ptr) nounwind
 
-define void @test14(i32* %ptr) nounwind readnone {
+define void @test14(ptr %ptr) nounwind readnone {
 entry:
-  %tmp = bitcast i32 (i8* (i8*)*)* @test14f to i32 (i32*)*
-  %call10 = call i32 %tmp(i32* byval(i32) %ptr)
+  %call10 = call i32 @test14f(ptr byval(i32) %ptr)
   ret void
 }
 
@@ -302,9 +300,9 @@ entry:
 ; PR8896
 @g_54 = external global [7 x i16]
 
-define void @test15(i32* %p_92, i1 %c1) nounwind {
+define void @test15(ptr %p_92, i1 %c1) nounwind {
 entry:
-%0 = load i32, i32* %p_92, align 4
+%0 = load i32, ptr %p_92, align 4
 %1 = icmp ne i32 %0, 0
 %2 = zext i1 %1 to i32
 %3 = call i32 @func_14() nounwind
@@ -347,11 +345,9 @@ define double @test16(i32 %a) nounwind {
 ; PR8983
 %struct.basic_ios = type { i8 }
 
-define %struct.basic_ios *@test17() ssp {
+define ptr@test17() ssp {
 entry:
-  %add.ptr.i = getelementptr i8, i8* null, i64 0
-  %0 = bitcast i8* %add.ptr.i to %struct.basic_ios*
-  ret %struct.basic_ios* %0
+  ret ptr null
 }
 
 ; PR9013
@@ -374,24 +370,22 @@ return:                                           ; No predecessors!
 
 ; PR11275
 declare void @test18b() noreturn
-declare void @test18foo(double**)
+declare void @test18foo(ptr)
 declare void @test18a() noreturn
-define fastcc void @test18x(i8* %t0, i1 %b) uwtable align 2 personality i32 (...)* @__gxx_personality_v0 {
+define fastcc void @test18x(ptr %t0, i1 %b) uwtable align 2 personality ptr @__gxx_personality_v0 {
 entry:
   br i1 %b, label %e1, label %e2
 e1:
-  %t2 = bitcast i8* %t0 to double**
   invoke void @test18b() noreturn
           to label %u unwind label %lpad
 e2:
-  %t4 = bitcast i8* %t0 to double**
   invoke void @test18a() noreturn
           to label %u unwind label %lpad
 lpad:
-  %t5 = phi double** [ %t2, %e1 ], [ %t4, %e2 ]
-  %lpad.nonloopexit262 = landingpad { i8*, i32 }
+  %t5 = phi ptr [ %t0, %e1 ], [ %t0, %e2 ]
+  %lpad.nonloopexit262 = landingpad { ptr, i32 }
           cleanup
-  call void @test18foo(double** %t5)
+  call void @test18foo(ptr %t5)
   unreachable
 u:
   unreachable
index a7b0fb42f28c83f79565e801ab154ac96e702937..863b9a88c41bde5384059fd39a82f66f2cb4ea01 100644 (file)
@@ -108,15 +108,15 @@ define i8 @mask_one_bit(i8 %x) {
   ret i8 %r
 }
 
-define <2 x i32> @mask_one_bit_splat(<2 x i32> %x, <2 x i32>* %p) {
+define <2 x i32> @mask_one_bit_splat(<2 x i32> %x, ptr %p) {
 ; CHECK-LABEL: @mask_one_bit_splat(
 ; CHECK-NEXT:    [[A:%.*]] = and <2 x i32> [[X:%.*]], <i32 2048, i32 2048>
-; CHECK-NEXT:    store <2 x i32> [[A]], <2 x i32>* [[P:%.*]], align 8
+; CHECK-NEXT:    store <2 x i32> [[A]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[R:%.*]] = lshr exact <2 x i32> [[A]], <i32 11, i32 11>
 ; CHECK-NEXT:    ret <2 x i32> [[R]]
 ;
   %a = and <2 x i32> %x, <i32 2048, i32 2048>
-  store <2 x i32> %a, <2 x i32>* %p
+  store <2 x i32> %a, ptr %p
   %r = call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %a)
   ret <2 x i32> %r
 }
@@ -231,13 +231,13 @@ define <2 x i32> @ctpop_add_no_common_bits_vec(<2 x i32> %a, <2 x i32> %b) {
   ret <2 x i32> %res
 }
 
-define <2 x i32> @ctpop_add_no_common_bits_vec_use(<2 x i32> %a, <2 x i32> %b, <2 x i32>* %p) {
+define <2 x i32> @ctpop_add_no_common_bits_vec_use(<2 x i32> %a, <2 x i32> %b, ptr %p) {
 ; CHECK-LABEL: @ctpop_add_no_common_bits_vec_use(
 ; CHECK-NEXT:    [[SHL16:%.*]] = shl <2 x i32> [[A:%.*]], <i32 16, i32 16>
 ; CHECK-NEXT:    [[CTPOP1:%.*]] = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> [[SHL16]])
 ; CHECK-NEXT:    [[LSHL16:%.*]] = lshr <2 x i32> [[B:%.*]], <i32 16, i32 16>
 ; CHECK-NEXT:    [[CTPOP2:%.*]] = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> [[LSHL16]])
-; CHECK-NEXT:    store <2 x i32> [[CTPOP2]], <2 x i32>* [[P:%.*]], align 8
+; CHECK-NEXT:    store <2 x i32> [[CTPOP2]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[RES:%.*]] = add nuw nsw <2 x i32> [[CTPOP1]], [[CTPOP2]]
 ; CHECK-NEXT:    ret <2 x i32> [[RES]]
 ;
@@ -245,16 +245,16 @@ define <2 x i32> @ctpop_add_no_common_bits_vec_use(<2 x i32> %a, <2 x i32> %b, <
   %ctpop1 = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %shl16)
   %lshl16 = lshr <2 x i32> %b, <i32 16, i32 16>
   %ctpop2 = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %lshl16)
-  store <2 x i32> %ctpop2, <2 x i32>* %p
+  store <2 x i32> %ctpop2, ptr %p
   %res = add <2 x i32> %ctpop1, %ctpop2
   ret <2 x i32> %res
 }
 
-define <2 x i32> @ctpop_add_no_common_bits_vec_use2(<2 x i32> %a, <2 x i32> %b, <2 x i32>* %p) {
+define <2 x i32> @ctpop_add_no_common_bits_vec_use2(<2 x i32> %a, <2 x i32> %b, ptr %p) {
 ; CHECK-LABEL: @ctpop_add_no_common_bits_vec_use2(
 ; CHECK-NEXT:    [[SHL16:%.*]] = shl <2 x i32> [[A:%.*]], <i32 16, i32 16>
 ; CHECK-NEXT:    [[CTPOP1:%.*]] = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> [[SHL16]])
-; CHECK-NEXT:    store <2 x i32> [[CTPOP1]], <2 x i32>* [[P:%.*]], align 8
+; CHECK-NEXT:    store <2 x i32> [[CTPOP1]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[LSHL16:%.*]] = lshr <2 x i32> [[B:%.*]], <i32 16, i32 16>
 ; CHECK-NEXT:    [[CTPOP2:%.*]] = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> [[LSHL16]])
 ; CHECK-NEXT:    [[RES:%.*]] = add nuw nsw <2 x i32> [[CTPOP1]], [[CTPOP2]]
@@ -262,7 +262,7 @@ define <2 x i32> @ctpop_add_no_common_bits_vec_use2(<2 x i32> %a, <2 x i32> %b,
 ;
   %shl16 = shl <2 x i32> %a, <i32 16, i32 16>
   %ctpop1 = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %shl16)
-  store <2 x i32> %ctpop1, <2 x i32>* %p
+  store <2 x i32> %ctpop1, ptr %p
   %lshl16 = lshr <2 x i32> %b, <i32 16, i32 16>
   %ctpop2 = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %lshl16)
   %res = add <2 x i32> %ctpop1, %ctpop2
@@ -336,15 +336,15 @@ define <2 x i32> @sub_ctpop_vec(<2 x i32> %a) {
   ret <2 x i32> %res
 }
 
-define <2 x i32> @sub_ctpop_vec_extra_use(<2 x i32> %a, <2 x i32>* %p) {
+define <2 x i32> @sub_ctpop_vec_extra_use(<2 x i32> %a, ptr %p) {
 ; CHECK-LABEL: @sub_ctpop_vec_extra_use(
 ; CHECK-NEXT:    [[CNT:%.*]] = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> [[A:%.*]])
-; CHECK-NEXT:    store <2 x i32> [[CNT]], <2 x i32>* [[P:%.*]], align 8
+; CHECK-NEXT:    store <2 x i32> [[CNT]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[RES:%.*]] = sub nuw nsw <2 x i32> <i32 32, i32 32>, [[CNT]]
 ; CHECK-NEXT:    ret <2 x i32> [[RES]]
 ;
   %cnt = tail call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %a)
-  store <2 x i32> %cnt, <2 x i32>* %p
+  store <2 x i32> %cnt, ptr %p
   %res = sub <2 x i32> <i32 32, i32 32>, %cnt
   ret <2 x i32> %res
 }
@@ -371,15 +371,15 @@ define <2 x i32> @zext_ctpop_vec(<2 x i7> %x) {
   ret <2 x i32> %p
 }
 
-define i32 @zext_ctpop_extra_use(i16 %x, i32* %q) {
+define i32 @zext_ctpop_extra_use(i16 %x, ptr %q) {
 ; CHECK-LABEL: @zext_ctpop_extra_use(
 ; CHECK-NEXT:    [[Z:%.*]] = zext i16 [[X:%.*]] to i32
-; CHECK-NEXT:    store i32 [[Z]], i32* [[Q:%.*]], align 4
+; CHECK-NEXT:    store i32 [[Z]], ptr [[Q:%.*]], align 4
 ; CHECK-NEXT:    [[P:%.*]] = call i32 @llvm.ctpop.i32(i32 [[Z]]), !range [[RNG4:![0-9]+]]
 ; CHECK-NEXT:    ret i32 [[P]]
 ;
   %z = zext i16 %x to i32
-  store i32 %z, i32* %q
+  store i32 %z, ptr %q
   %p = call i32 @llvm.ctpop.i32(i32 %z)
   ret i32 %p
 }
index 69d59f0f765a9f23a6d786f3ccc2c8a5220dbc57..bac5f706ec099e7ab97bbd9298d1337c32049715 100644 (file)
@@ -14,20 +14,20 @@ C:          ; preds = %T, %0
        ret i32 %C.upgrd.1
 }
 
-define i32* @test2(i32 %width) {
-       %tmp = call i8* @llvm.stacksave( )
+define ptr @test2(i32 %width) {
+       %tmp = call ptr @llvm.stacksave( )
         %tmp14 = alloca i32, i32 %width
-       ret i32* %tmp14
+       ret ptr %tmp14
 } 
 
-declare i8* @llvm.stacksave()
+declare ptr @llvm.stacksave()
 
-declare void @llvm.lifetime.start.p0i8(i64, i8*)
-declare void @llvm.lifetime.end.p0i8(i64, i8*)
+declare void @llvm.lifetime.start.p0(i64, ptr)
+declare void @llvm.lifetime.end.p0(i64, ptr)
 
 define void @test3() {
-  call void @llvm.lifetime.start.p0i8(i64 -1, i8* undef)
-  call void @llvm.lifetime.end.p0i8(i64 -1, i8* undef)
+  call void @llvm.lifetime.start.p0(i64 -1, ptr undef)
+  call void @llvm.lifetime.end.p0(i64 -1, ptr undef)
   ret void
 }
 
index e5d55bdd0b6972639b3c3ff6a9788a692d16ebea..6fe56e4d7ae566d663cd1e971de2dfa993bae764 100644 (file)
@@ -5,11 +5,11 @@
 
 define void @foo() nounwind ssp !dbg !0 {
 ;CHECK: call i32 @putchar{{.+}} !dbg
-  %1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i32 97), !dbg !5
+  %1 = call i32 (ptr, ...) @printf(ptr @.str, i32 97), !dbg !5
   ret void, !dbg !7
 }
 
-declare i32 @printf(i8*, ...)
+declare i32 @printf(ptr, ...)
 
 !llvm.dbg.cu = !{!2}
 !llvm.module.flags = !{!10}
index 05d8b1b9665fcf62d7adc270812b2a3f8512e38c..8e59f278eee923c67955f5cbcc2253882283ab67 100644 (file)
@@ -1,11 +1,11 @@
 ; RUN: opt -passes=instcombine -S %s -o - | FileCheck %s
 
-; In this example, the cast from i8* to i32* becomes trivially dead. We should
+; In this example, the cast from ptr to ptr becomes trivially dead. We should
 ; salvage its debug info.
 
 ; C source:
-; void use_as_void(void *);
-; void f(void *p) {
+; void use_as_void(ptr);
+; void f(ptr p) {
 ;   int *q = (int *)p;
 ;   use_as_void(q);
 ; }
@@ -16,27 +16,25 @@ target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-pc-windows-msvc19.11.25508"
 
 ; Function Attrs: nounwind uwtable
-define void @f(i8* %p) !dbg !11 {
+define void @f(ptr %p) !dbg !11 {
 entry:
-  call void @llvm.dbg.value(metadata i8* %p, metadata !16, metadata !DIExpression()), !dbg !18
-  %0 = bitcast i8* %p to i32*, !dbg !19
-  call void @llvm.dbg.value(metadata i32* %0, metadata !17, metadata !DIExpression()), !dbg !20
-  %1 = bitcast i32* %0 to i8*, !dbg !21
-  call void @use_as_void(i8* %1), !dbg !22
+  call void @llvm.dbg.value(metadata ptr %p, metadata !16, metadata !DIExpression()), !dbg !18
+  call void @llvm.dbg.value(metadata ptr %p, metadata !17, metadata !DIExpression()), !dbg !20
+  call void @use_as_void(ptr %p), !dbg !22
   ret void, !dbg !23
 }
 
-; CHECK-LABEL: define void @f(i8* %p)
-; CHECK: call void @llvm.dbg.value(metadata i8* %p, metadata ![[P_VAR:[0-9]+]], metadata !DIExpression())
+; CHECK-LABEL: define void @f(ptr %p)
+; CHECK: call void @llvm.dbg.value(metadata ptr %p, metadata ![[P_VAR:[0-9]+]], metadata !DIExpression())
 ; CHECK-NOT: bitcast
-; CHECK: call void @llvm.dbg.value(metadata i8* %p, metadata ![[Q_VAR:[0-9]+]], metadata !DIExpression())
+; CHECK: call void @llvm.dbg.value(metadata ptr %p, metadata ![[Q_VAR:[0-9]+]], metadata !DIExpression())
 ; CHECK-NOT: bitcast
 ; CHECK: ret void
 
 ; CHECK: ![[P_VAR]] = !DILocalVariable(name: "p", {{.*}})
 ; CHECK: ![[Q_VAR]] = !DILocalVariable(name: "q", {{.*}})
 
-declare void @use_as_void(i8*)
+declare void @use_as_void(ptr)
 
 declare void @llvm.dbg.value(metadata, metadata, metadata)
 
index c08d25e38a241a13ebaad59be203c51a6eb0e44c..b2e78f1eff002e611185d11aec554745ba535b6f 100644 (file)
@@ -8,19 +8,18 @@
 ; CHECK-LABEL: @debug_local_scalable(
 define <vscale x 2 x double> @debug_local_scalable(<vscale x 2 x double> %tostore) {
   %vx = alloca <vscale x 2 x double>, align 16
-  call void @llvm.dbg.declare(metadata <vscale x 2 x double>* %vx, metadata !3, metadata !DIExpression()), !dbg !5
-  store <vscale x 2 x double> %tostore, <vscale x 2 x double>* %vx, align 16
-  %ret = call <vscale x 2 x double> @f(<vscale x 2 x double>* %vx)
+  call void @llvm.dbg.declare(metadata ptr %vx, metadata !3, metadata !DIExpression()), !dbg !5
+  store <vscale x 2 x double> %tostore, ptr %vx, align 16
+  %ret = call <vscale x 2 x double> @f(ptr %vx)
   ret <vscale x 2 x double> %ret
 }
 
-declare <vscale x 2 x double> @f(<vscale x 2 x double>*)
+declare <vscale x 2 x double> @f(ptr)
 
 define float @debug_scalablevec_bitcast_to_scalar() {
   %v.addr = alloca <vscale x 4 x float>, align 16
-  call void @llvm.dbg.declare(metadata <vscale x 4 x float>* %v.addr, metadata !3, metadata !DIExpression()), !dbg !5
-  %a = bitcast <vscale x 4 x float>* %v.addr to float*
-  %b = load float, float* %a, align 16
+  call void @llvm.dbg.declare(metadata ptr %v.addr, metadata !3, metadata !DIExpression()), !dbg !5
+  %b = load float, ptr %v.addr, align 16
   ret float %b
 }
 
index 472197f23c2cbd62726699a505ced0bfd306ddbc..842ea0ee2ad6c2c2fbf373e46c2151cde325258b 100644 (file)
@@ -8,23 +8,23 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
 ; gets folded. The dbg.value should be duplicated in the block its sunk
 ; into, to maximise liveness.
 ;
-; CHECK-LABEL: define i32 @foo(i32*
-; CHECK:       call void @llvm.dbg.value(metadata i32* %a, metadata !{{[0-9]+}},
+; CHECK-LABEL: define i32 @foo(ptr
+; CHECK:       call void @llvm.dbg.value(metadata ptr %a, metadata !{{[0-9]+}},
 ; CHECK-SAME:  metadata !DIExpression(DW_OP_plus_uconst, 4, DW_OP_stack_value))
 ; CHECK-NEXT:  br label %sink1
 
-define i32 @foo(i32 *%a) !dbg !7 {
+define i32 @foo(ptr %a) !dbg !7 {
 entry:
-  %gep = getelementptr i32, i32 *%a, i32 1
-  call void @llvm.dbg.value(metadata i32 *%gep, metadata !16, metadata !12), !dbg !15
+  %gep = getelementptr i32, ptr %a, i32 1
+  call void @llvm.dbg.value(metadata ptr %gep, metadata !16, metadata !12), !dbg !15
   br label %sink1
 
 sink1:
 ; CHECK-LABEL: sink1:
-; CHECK:       call void @llvm.dbg.value(metadata i32* %gep,
+; CHECK:       call void @llvm.dbg.value(metadata ptr %gep,
 ; CHECK-SAME:                    metadata !{{[0-9]+}}, metadata !DIExpression())
 ; CHECK-NEXT:  load
-  %0 = load i32, i32* %gep, align 4, !dbg !15
+  %0 = load i32, ptr %gep, align 4, !dbg !15
   ret i32 %0, !dbg !15
 }
 
@@ -33,23 +33,23 @@ sink1:
 ; value range.
 
 ; CHECK-LABEL: define i32 @bar(
-; CHECK:       call void @llvm.dbg.value(metadata <vscale x 4 x i32>* undef,
+; CHECK:       call void @llvm.dbg.value(metadata ptr undef,
 ; CHECK-NEXT:  br label %sink2
 
-define i32 @bar(<vscale x 4 x i32>* %a, i32 %b) !dbg !70 {
+define i32 @bar(ptr %a, i32 %b) !dbg !70 {
 entry:
-  %gep = getelementptr <vscale x 4 x i32>, <vscale x 4 x i32>* %a, i32 %b
-  call void @llvm.dbg.value(metadata <vscale x 4 x i32>* %gep, metadata !73, metadata !12), !dbg !74
+  %gep = getelementptr <vscale x 4 x i32>, ptr %a, i32 %b
+  call void @llvm.dbg.value(metadata ptr %gep, metadata !73, metadata !12), !dbg !74
   br label %sink2
 
 sink2:
 ; CHECK-LABEL: sink2:
-; CHECK:       call void @llvm.dbg.value(metadata <vscale x 4 x i32>* %gep,
+; CHECK:       call void @llvm.dbg.value(metadata ptr %gep,
 ; CHECK-SAME:                    metadata !{{[0-9]+}}, metadata !DIExpression())
 ; CHECK-NEXT:  load
 ; CHECK-NEXT:  extractelement
 ; CHECK-NEXT:  ret
-  %0 = load <vscale x 4 x i32>, <vscale x 4 x i32>* %gep
+  %0 = load <vscale x 4 x i32>, ptr %gep
   %extract = extractelement <vscale x 4 x i32> %0, i32 1
   ret i32 %extract
 }
@@ -58,26 +58,26 @@ sink2:
 ; only the last use is cloned into the sunk block, and that both of the\r
 ; original dbg.values are salvaged.\r
 ;\r
-; CHECK-LABEL: define i32 @baz(i32*\r
-; CHECK:       call void @llvm.dbg.value(metadata i32* %a, metadata !{{[0-9]+}},\r
+; CHECK-LABEL: define i32 @baz(ptr\r
+; CHECK:       call void @llvm.dbg.value(metadata ptr %a, metadata !{{[0-9]+}},\r
 ; CHECK-SAME:  metadata !DIExpression(DW_OP_plus_uconst, 4, DW_OP_stack_value))\r
-; CHECK-NEXT:  call void @llvm.dbg.value(metadata i32* %a, metadata !{{[0-9]+}},\r
+; CHECK-NEXT:  call void @llvm.dbg.value(metadata ptr %a, metadata !{{[0-9]+}},\r
 ; CHECK-SAME:  metadata !DIExpression(DW_OP_plus_uconst, 4, DW_OP_plus_uconst, 5, DW_OP_stack_value))\r
 ; CHECK-NEXT:  br label %sink1\r
 \r
-define i32 @baz(i32 *%a) !dbg !80 {\r
+define i32 @baz(ptr %a) !dbg !80 {\r
 entry:\r
-  %gep = getelementptr i32, i32 *%a, i32 1\r
-  call void @llvm.dbg.value(metadata i32 *%gep, metadata !83, metadata !12), !dbg !84\r
-  call void @llvm.dbg.value(metadata i32 *%gep, metadata !83, metadata !DIExpression(DW_OP_plus_uconst, 5)), !dbg !85\r
+  %gep = getelementptr i32, ptr %a, i32 1\r
+  call void @llvm.dbg.value(metadata ptr %gep, metadata !83, metadata !12), !dbg !84\r
+  call void @llvm.dbg.value(metadata ptr %gep, metadata !83, metadata !DIExpression(DW_OP_plus_uconst, 5)), !dbg !85\r
   br label %sink1\r
 \r
 sink1:\r
 ; CHECK-LABEL: sink1:\r
-; CHECK:       call void @llvm.dbg.value(metadata i32* %gep,\r
+; CHECK:       call void @llvm.dbg.value(metadata ptr %gep,\r
 ; CHECK-SAME:  metadata !{{[0-9]+}}, metadata !DIExpression(DW_OP_plus_uconst, 5))\r
 ; CHECK-NEXT:  load\r
-  %0 = load i32, i32* %gep, align 4, !dbg !85\r
+  %0 = load i32, ptr %gep, align 4, !dbg !85\r
   ret i32 %0, !dbg !85\r
 }\r
 \r
index 2fe0c77413be259ae2f88340c3f9db03a4510bac..d142cf19213776e813bd2d9a7f294a751cf7f485 100644 (file)
@@ -4,10 +4,10 @@
 define i32 @foo(i32 %j) #0 !dbg !7 {
 entry:
   %j.addr = alloca i32, align 4
-  store i32 %j, i32* %j.addr, align 4
-  call void @llvm.dbg.declare(metadata i32* %j.addr, metadata !11, metadata !12), !dbg !13
+  store i32 %j, ptr %j.addr, align 4
+  call void @llvm.dbg.declare(metadata ptr %j.addr, metadata !11, metadata !12), !dbg !13
   call void @llvm.dbg.value(metadata i32 10, metadata !16, metadata !12), !dbg !15
-  %0 = load i32, i32* %j.addr, align 4, !dbg !14
+  %0 = load i32, ptr %j.addr, align 4, !dbg !14
   ret i32 %0, !dbg !15
 }
 
index dcb07d5e678839ee62a3fdb7ca5ec6cad829402f..404344cff3f3fd3ea8795707ea9fd398c2179fe1 100644 (file)
@@ -107,10 +107,10 @@ define void @test_srem(i64 %A) {
   ret void
 }
 
-define void @test_ptrtoint(i64* %P) {
+define void @test_ptrtoint(ptr %P) {
 ; CHECK-LABEL: @test_ptrtoint
-; CHECK-NEXT:  call void @llvm.dbg.value(metadata i64* %P, {{.*}}, metadata !DIExpression())
-  %1 = ptrtoint i64* %P to i64
+; CHECK-NEXT:  call void @llvm.dbg.value(metadata ptr %P, {{.*}}, metadata !DIExpression())
+  %1 = ptrtoint ptr %P to i64
   ret void
 }
 
index 05466590a0177a38c0efb5c7a2f8ea9073685dc4..b97c5002f2051187e97035ab93baefc2d4278dc2 100644 (file)
@@ -9,41 +9,41 @@ target triple = "x86_64--linux"
 
 declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
 
-declare i64 @llvm.objectsize.i64.p0i8(i8*, i1) nounwind readnone
+declare i64 @llvm.objectsize.i64.p0(ptr, i1) nounwind readnone
 
-declare i8* @passthru_callee(i8*, i32, i64, i64)
+declare ptr @passthru_callee(ptr, i32, i64, i64)
 
-define i8* @passthru(i8* %a, i32 %b, i64 %c) !dbg !1 {
+define ptr @passthru(ptr %a, i32 %b, i64 %c) !dbg !1 {
 entry:
-  %a.addr = alloca i8*, align 8
+  %a.addr = alloca ptr, align 8
   %b.addr = alloca i32, align 4
   %c.addr = alloca i64, align 8
-  store i8* %a, i8** %a.addr, align 8
-  call void @llvm.dbg.declare(metadata i8** %a.addr, metadata !0, metadata !DIExpression()), !dbg !16
-  store i32 %b, i32* %b.addr, align 4
-  call void @llvm.dbg.declare(metadata i32* %b.addr, metadata !7, metadata !DIExpression()), !dbg !18
-  store i64 %c, i64* %c.addr, align 8
-  call void @llvm.dbg.declare(metadata i64* %c.addr, metadata !9, metadata !DIExpression()), !dbg !20
-  %tmp = load i8*, i8** %a.addr, align 8, !dbg !21
-  %tmp1 = load i32, i32* %b.addr, align 4, !dbg !21
-  %tmp2 = load i64, i64* %c.addr, align 8, !dbg !21
-  %tmp3 = load i8*, i8** %a.addr, align 8, !dbg !21
-  %0 = call i64 @llvm.objectsize.i64.p0i8(i8* %tmp3, i1 false), !dbg !21
-  %call = call i8* @passthru_callee(i8* %tmp, i32 %tmp1, i64 %tmp2, i64 %0), !dbg !21
-  ret i8* %call, !dbg !21
+  store ptr %a, ptr %a.addr, align 8
+  call void @llvm.dbg.declare(metadata ptr %a.addr, metadata !0, metadata !DIExpression()), !dbg !16
+  store i32 %b, ptr %b.addr, align 4
+  call void @llvm.dbg.declare(metadata ptr %b.addr, metadata !7, metadata !DIExpression()), !dbg !18
+  store i64 %c, ptr %c.addr, align 8
+  call void @llvm.dbg.declare(metadata ptr %c.addr, metadata !9, metadata !DIExpression()), !dbg !20
+  %tmp = load ptr, ptr %a.addr, align 8, !dbg !21
+  %tmp1 = load i32, ptr %b.addr, align 4, !dbg !21
+  %tmp2 = load i64, ptr %c.addr, align 8, !dbg !21
+  %tmp3 = load ptr, ptr %a.addr, align 8, !dbg !21
+  %0 = call i64 @llvm.objectsize.i64.p0(ptr %tmp3, i1 false), !dbg !21
+  %call = call ptr @passthru_callee(ptr %tmp, i32 %tmp1, i64 %tmp2, i64 %0), !dbg !21
+  ret ptr %call, !dbg !21
 }
 
-; CHECK-LABEL: define i8* @passthru(i8* %a, i32 %b, i64 %c)
+; CHECK-LABEL: define ptr @passthru(ptr %a, i32 %b, i64 %c)
 ; CHECK-NOT: alloca
 ; CHECK-NOT: store
 ; CHECK-NOT: call void @llvm.dbg.declare
-; CHECK: call void @llvm.dbg.value(metadata i8* %a, {{.*}})
+; CHECK: call void @llvm.dbg.value(metadata ptr %a, {{.*}})
 ; CHECK-NOT: store
 ; CHECK: call void @llvm.dbg.value(metadata i32 %b, {{.*}})
 ; CHECK-NOT: store
 ; CHECK: call void @llvm.dbg.value(metadata i64 %c, {{.*}})
 ; CHECK-NOT: store
-; CHECK: call i8* @passthru_callee(i8* %a, i32 %b, i64 %c, i64 %{{.*}})
+; CHECK: call ptr @passthru_callee(ptr %a, i32 %b, i64 %c, i64 %{{.*}})
 
 declare void @tworegs_callee(i64, i64)
 
@@ -52,18 +52,16 @@ declare void @tworegs_callee(i64, i64)
 define void @tworegs(i64 %o.coerce0, i64 %o.coerce1) !dbg !31 {
 entry:
   %o = alloca %struct.TwoRegs, align 8
-  %0 = bitcast %struct.TwoRegs* %o to { i64, i64 }*
-  %1 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 0
-  store i64 %o.coerce0, i64* %1, align 8
-  %2 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 1
-  store i64 %o.coerce1, i64* %2, align 8
-  call void @llvm.dbg.declare(metadata %struct.TwoRegs* %o, metadata !35, metadata !DIExpression()), !dbg !32
-  %3 = bitcast %struct.TwoRegs* %o to { i64, i64 }*, !dbg !33
-  %4 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %3, i32 0, i32 0, !dbg !33
-  %5 = load i64, i64* %4, align 8, !dbg !33
-  %6 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %3, i32 0, i32 1, !dbg !33
-  %7 = load i64, i64* %6, align 8, !dbg !33
-  call void @tworegs_callee(i64 %5, i64 %7), !dbg !33
+  %0 = getelementptr inbounds { i64, i64 }, ptr %o, i32 0, i32 0
+  store i64 %o.coerce0, ptr %0, align 8
+  %1 = getelementptr inbounds { i64, i64 }, ptr %o, i32 0, i32 1
+  store i64 %o.coerce1, ptr %1, align 8
+  call void @llvm.dbg.declare(metadata ptr %o, metadata !35, metadata !DIExpression()), !dbg !32
+  %2 = getelementptr inbounds { i64, i64 }, ptr %o, i32 0, i32 0, !dbg !33
+  %3 = load i64, ptr %2, align 8, !dbg !33
+  %4 = getelementptr inbounds { i64, i64 }, ptr %o, i32 0, i32 1, !dbg !33
+  %5 = load i64, ptr %4, align 8, !dbg !33
+  call void @tworegs_callee(i64 %3, i64 %5), !dbg !33
   ret void, !dbg !33
 }
 
index e5d568becd86d5ba50c78f65e8d5f855c28e5f34..83c428803daa55259380f08e14c05932cb9bf9f5 100644 (file)
@@ -20,11 +20,11 @@ target triple = "thumbv7s-apple-ios5.0.0"
 %struct.vm_object = type { i64 }
 
 ; Function Attrs: nounwind ssp
-define void @f(%struct.vm_object* %object, i64* nocapture readonly %start, i1 %c1) local_unnamed_addr #0 !dbg !11 {
+define void @f(ptr %object, ptr nocapture readonly %start, i1 %c1) local_unnamed_addr #0 !dbg !11 {
 entry:
-  tail call void @llvm.dbg.value(metadata %struct.vm_object* %object, metadata !21, metadata !DIExpression()), !dbg !27
-  tail call void @llvm.dbg.value(metadata i64* %start, metadata !22, metadata !DIExpression()), !dbg !28
-  %0 = load i64, i64* %start, align 4, !dbg !29
+  tail call void @llvm.dbg.value(metadata ptr %object, metadata !21, metadata !DIExpression()), !dbg !27
+  tail call void @llvm.dbg.value(metadata ptr %start, metadata !22, metadata !DIExpression()), !dbg !28
+  %0 = load i64, ptr %start, align 4, !dbg !29
   tail call void @llvm.dbg.value(metadata i64 %0, metadata !25, metadata !DIExpression()), !dbg !30
   %offset.08 = add i64 %0, -4096
   tail call void @llvm.dbg.value(metadata i64 %offset.08, metadata !26, metadata !DIExpression()), !dbg !31
@@ -45,7 +45,7 @@ for.body:                                         ; preds = %for.body.lr.ph, %fo
   %offset.010 = phi i64 [ %offset.08, %for.body.lr.ph ], [ %offset.0, %for.body ]
   %head_size.09 = phi i32 [ poison, %for.body.lr.ph ], [ %sub2, %for.body ]
   tail call void @llvm.dbg.value(metadata i32 %head_size.09, metadata !23, metadata !DIExpression()), !dbg !31
-  %call = tail call i32 bitcast (i32 (...)* @use to i32 (i64, %struct.vm_object*)*)(i64 %offset.010, %struct.vm_object* %object) #3, !dbg !34
+  %call = tail call i32 @use(i64 %offset.010, ptr %object) #3, !dbg !34
   %sub2 = add i32 %head_size.09, -4096, !dbg !37
   %offset.0 = add i64 %offset.010, -4096
   tail call void @llvm.dbg.value(metadata i64 %offset.0, metadata !26, metadata !DIExpression()), !dbg !30
index 718da2136717ba9444101df89e84ff0a1488f3a9..39eb2981fbc716a249ffd11fbf9afd32075538d0 100644 (file)
@@ -1,10 +1,9 @@
 ; RUN: opt -verify -instcombine < %s
 %Foo = type <{ i8, x86_fp80 }>
 
-define i8 @t(%Foo* %arg) {
+define i8 @t(ptr %arg) {
 entry:
-  %0 = getelementptr %Foo, %Foo* %arg, i32 0, i32 0
-  %1 = load i8, i8* %0, align 1
-  ret i8 %1
+  %0 = load i8, ptr %arg, align 1
+  ret i8 %0
 }
 
index 64a18d1aa4e65ff4474bad9c031ce8ac7f4d0106..c743caf960b9941ec8a616ffc62086449ef50d73 100644 (file)
@@ -9,13 +9,12 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 
 @empty = constant [1 x i8] c"\00", align 1
 
-declare i8* @strcat(i8*, i8*)
+declare ptr @strcat(ptr, ptr)
 
-define i8* @test_strcat(i8* %x) {
+define ptr @test_strcat(ptr %x) {
 ; CHECK-LABEL: @test_strcat(
-  %empty = getelementptr [1 x i8], [1 x i8]* @empty, i32 0, i32 0
-  %ret = call i8* @strcat(i8* %x, i8* %empty)
-  ret i8* %ret
-; CHECK: call i8* @strcat
+  %ret = call ptr @strcat(ptr %x, ptr @empty)
+  ret ptr %ret
+; CHECK: call ptr @strcat
 }
 
index 04b80ac541862f871285d7fb832d26dc1b1116c4..88fa4fd5a91bd2cf5dfc3a07bef7fa156eedcf5f 100644 (file)
@@ -18,38 +18,38 @@ declare double @copysign(double, double)
 declare double @cos(double)
 declare double @fabs(double)
 declare double @floor(double)
-declare i8* @strcat(i8*, i8*)
-declare i8* @strncat(i8*, i8*, i32)
-declare i8* @strchr(i8*, i32)
-declare i8* @strrchr(i8*, i32)
-declare i32 @strcmp(i8*, i8*)
-declare i32 @strncmp(i8*, i8*, i64)
-declare i8* @strcpy(i8*, i8*)
-declare i8* @stpcpy(i8*, i8*)
-declare i8* @strncpy(i8*, i8*, i64)
-declare i64 @strlen(i8*)
-declare i8* @strpbrk(i8*, i8*)
-declare i64 @strspn(i8*, i8*)
-declare double @strtod(i8*, i8**)
-declare float @strtof(i8*, i8**)
-declare x86_fp80 @strtold(i8*, i8**)
-declare i64 @strtol(i8*, i8**, i32)
-declare i64 @strtoll(i8*, i8**, i32)
-declare i64 @strtoul(i8*, i8**, i32)
-declare i64 @strtoull(i8*, i8**, i32)
-declare i64 @strcspn(i8*, i8*)
+declare ptr @strcat(ptr, ptr)
+declare ptr @strncat(ptr, ptr, i32)
+declare ptr @strchr(ptr, i32)
+declare ptr @strrchr(ptr, i32)
+declare i32 @strcmp(ptr, ptr)
+declare i32 @strncmp(ptr, ptr, i64)
+declare ptr @strcpy(ptr, ptr)
+declare ptr @stpcpy(ptr, ptr)
+declare ptr @strncpy(ptr, ptr, i64)
+declare i64 @strlen(ptr)
+declare ptr @strpbrk(ptr, ptr)
+declare i64 @strspn(ptr, ptr)
+declare double @strtod(ptr, ptr)
+declare float @strtof(ptr, ptr)
+declare x86_fp80 @strtold(ptr, ptr)
+declare i64 @strtol(ptr, ptr, i32)
+declare i64 @strtoll(ptr, ptr, i32)
+declare i64 @strtoul(ptr, ptr, i32)
+declare i64 @strtoull(ptr, ptr, i32)
+declare i64 @strcspn(ptr, ptr)
 declare i32 @abs(i32)
 declare i32 @ffs(i32)
 declare i32 @ffsl(i64)
 declare i32 @ffsll(i64)
-declare i32 @fprintf(i8*, i8*)
+declare i32 @fprintf(ptr, ptr)
 declare i32 @isascii(i32)
 declare i32 @isdigit(i32)
 declare i32 @toascii(i32)
 declare i64 @labs(i64)
 declare i64 @llabs(i64)
-declare i32 @printf(i8*)
-declare i32 @sprintf(i8*, i8*)
+declare i32 @printf(ptr)
+declare i32 @sprintf(ptr, ptr)
 
 define double @t1(double %x) {
 ; CHECK-LABEL: @t1(
@@ -86,164 +86,142 @@ define double @t5(double %x) {
 ; CHECK: call double @floor
 }
 
-define i8* @t6(i8* %x) {
+define ptr @t6(ptr %x) {
 ; CHECK-LABEL: @t6(
-  %empty = getelementptr [1 x i8], [1 x i8]* @empty, i32 0, i32 0
-  %ret = call i8* @strcat(i8* %x, i8* %empty)
-  ret i8* %ret
-; CHECK: call i8* @strcat
+  %ret = call ptr @strcat(ptr %x, ptr @empty)
+  ret ptr %ret
+; CHECK: call ptr @strcat
 }
 
-define i8* @t7(i8* %x) {
+define ptr @t7(ptr %x) {
 ; CHECK-LABEL: @t7(
-  %empty = getelementptr [1 x i8], [1 x i8]* @empty, i32 0, i32 0
-  %ret = call i8* @strncat(i8* %x, i8* %empty, i32 1)
-  ret i8* %ret
-; CHECK: call i8* @strncat
+  %ret = call ptr @strncat(ptr %x, ptr @empty, i32 1)
+  ret ptr %ret
+; CHECK: call ptr @strncat
 }
 
-define i8* @t8() {
+define ptr @t8() {
 ; CHECK-LABEL: @t8(
-  %x = getelementptr inbounds [13 x i8], [13 x i8]* @.str1, i32 0, i32 0
-  %ret = call i8* @strchr(i8* %x, i32 119)
-  ret i8* %ret
-; CHECK: call i8* @strchr
+  %ret = call ptr @strchr(ptr @.str1, i32 119)
+  ret ptr %ret
+; CHECK: call ptr @strchr
 }
 
-define i8* @t9() {
+define ptr @t9() {
 ; CHECK-LABEL: @t9(
-  %x = getelementptr inbounds [13 x i8], [13 x i8]* @.str1, i32 0, i32 0
-  %ret = call i8* @strrchr(i8* %x, i32 119)
-  ret i8* %ret
-; CHECK: call i8* @strrchr
+  %ret = call ptr @strrchr(ptr @.str1, i32 119)
+  ret ptr %ret
+; CHECK: call ptr @strrchr
 }
 
 define i32 @t10() {
 ; CHECK-LABEL: @t10(
-  %x = getelementptr inbounds [4 x i8], [4 x i8]* @.str2, i32 0, i32 0
-  %y = getelementptr inbounds [4 x i8], [4 x i8]* @.str3, i32 0, i32 0
-  %ret = call i32 @strcmp(i8* %x, i8* %y)
+  %ret = call i32 @strcmp(ptr @.str2, ptr @.str3)
   ret i32 %ret
 ; CHECK: call i32 @strcmp
 }
 
 define i32 @t11() {
 ; CHECK-LABEL: @t11(
-  %x = getelementptr inbounds [4 x i8], [4 x i8]* @.str2, i32 0, i32 0
-  %y = getelementptr inbounds [4 x i8], [4 x i8]* @.str3, i32 0, i32 0
-  %ret = call i32 @strncmp(i8* %x, i8* %y, i64 3)
+  %ret = call i32 @strncmp(ptr @.str2, ptr @.str3, i64 3)
   ret i32 %ret
 ; CHECK: call i32 @strncmp
 }
 
-define i8* @t12(i8* %x) {
+define ptr @t12(ptr %x) {
 ; CHECK-LABEL: @t12(
-  %y = getelementptr inbounds [4 x i8], [4 x i8]* @.str2, i32 0, i32 0
-  %ret = call i8* @strcpy(i8* %x, i8* %y)
-  ret i8* %ret
-; CHECK: call i8* @strcpy
+  %ret = call ptr @strcpy(ptr %x, ptr @.str2)
+  ret ptr %ret
+; CHECK: call ptr @strcpy
 }
 
-define i8* @t13(i8* %x) {
+define ptr @t13(ptr %x) {
 ; CHECK-LABEL: @t13(
-  %y = getelementptr inbounds [4 x i8], [4 x i8]* @.str2, i32 0, i32 0
-  %ret = call i8* @stpcpy(i8* %x, i8* %y)
-  ret i8* %ret
-; CHECK: call i8* @stpcpy
+  %ret = call ptr @stpcpy(ptr %x, ptr @.str2)
+  ret ptr %ret
+; CHECK: call ptr @stpcpy
 }
 
-define i8* @t14(i8* %x) {
+define ptr @t14(ptr %x) {
 ; CHECK-LABEL: @t14(
-  %y = getelementptr inbounds [4 x i8], [4 x i8]* @.str2, i32 0, i32 0
-  %ret = call i8* @strncpy(i8* %x, i8* %y, i64 3)
-  ret i8* %ret
-; CHECK: call i8* @strncpy
+  %ret = call ptr @strncpy(ptr %x, ptr @.str2, i64 3)
+  ret ptr %ret
+; CHECK: call ptr @strncpy
 }
 
 define i64 @t15() {
 ; CHECK-LABEL: @t15(
-  %x = getelementptr inbounds [4 x i8], [4 x i8]* @.str2, i32 0, i32 0
-  %ret = call i64 @strlen(i8* %x)
+  %ret = call i64 @strlen(ptr @.str2)
   ret i64 %ret
 ; CHECK: call i64 @strlen
 }
 
-define i8* @t16(i8* %x) {
+define ptr @t16(ptr %x) {
 ; CHECK-LABEL: @t16(
-  %y = getelementptr inbounds [1 x i8], [1 x i8]* @.str, i32 0, i32 0
-  %ret = call i8* @strpbrk(i8* %x, i8* %y)
-  ret i8* %ret
-; CHECK: call i8* @strpbrk
+  %ret = call ptr @strpbrk(ptr %x, ptr @.str)
+  ret ptr %ret
+; CHECK: call ptr @strpbrk
 }
 
-define i64 @t17(i8* %x) {
+define i64 @t17(ptr %x) {
 ; CHECK-LABEL: @t17(
-  %y = getelementptr inbounds [1 x i8], [1 x i8]* @.str, i32 0, i32 0
-  %ret = call i64 @strspn(i8* %x, i8* %y)
+  %ret = call i64 @strspn(ptr %x, ptr @.str)
   ret i64 %ret
 ; CHECK: call i64 @strspn
 }
 
-define double @t18(i8** %y) {
+define double @t18(ptr %y) {
 ; CHECK-LABEL: @t18(
-  %x = getelementptr inbounds [6 x i8], [6 x i8]* @.str4, i64 0, i64 0
-  %ret = call double @strtod(i8* %x, i8** %y)
+  %ret = call double @strtod(ptr @.str4, ptr %y)
   ret double %ret
 ; CHECK: call double @strtod
 }
 
-define float @t19(i8** %y) {
+define float @t19(ptr %y) {
 ; CHECK-LABEL: @t19(
-  %x = getelementptr inbounds [6 x i8], [6 x i8]* @.str4, i64 0, i64 0
-  %ret = call float @strtof(i8* %x, i8** %y)
+  %ret = call float @strtof(ptr @.str4, ptr %y)
   ret float %ret
 ; CHECK: call float @strtof
 }
 
-define x86_fp80 @t20(i8** %y) {
+define x86_fp80 @t20(ptr %y) {
 ; CHECK-LABEL: @t20(
-  %x = getelementptr inbounds [6 x i8], [6 x i8]* @.str4, i64 0, i64 0
-  %ret = call x86_fp80 @strtold(i8* %x, i8** %y)
+  %ret = call x86_fp80 @strtold(ptr @.str4, ptr %y)
   ret x86_fp80 %ret
 ; CHECK: call x86_fp80 @strtold
 }
 
-define i64 @t21(i8** %y) {
+define i64 @t21(ptr %y) {
 ; CHECK-LABEL: @t21(
-  %x = getelementptr inbounds [5 x i8], [5 x i8]* @.str5, i64 0, i64 0
-  %ret = call i64 @strtol(i8* %x, i8** %y, i32 10)
+  %ret = call i64 @strtol(ptr @.str5, ptr %y, i32 10)
   ret i64 %ret
 ; CHECK: call i64 @strtol
 }
 
-define i64 @t22(i8** %y) {
+define i64 @t22(ptr %y) {
 ; CHECK-LABEL: @t22(
-  %x = getelementptr inbounds [5 x i8], [5 x i8]* @.str5, i64 0, i64 0
-  %ret = call i64 @strtoll(i8* %x, i8** %y, i32 10)
+  %ret = call i64 @strtoll(ptr @.str5, ptr %y, i32 10)
   ret i64 %ret
 ; CHECK: call i64 @strtoll
 }
 
-define i64 @t23(i8** %y) {
+define i64 @t23(ptr %y) {
 ; CHECK-LABEL: @t23(
-  %x = getelementptr inbounds [5 x i8], [5 x i8]* @.str5, i64 0, i64 0
-  %ret = call i64 @strtoul(i8* %x, i8** %y, i32 10)
+  %ret = call i64 @strtoul(ptr @.str5, ptr %y, i32 10)
   ret i64 %ret
 ; CHECK: call i64 @strtoul
 }
 
-define i64 @t24(i8** %y) {
+define i64 @t24(ptr %y) {
 ; CHECK-LABEL: @t24(
-  %x = getelementptr inbounds [5 x i8], [5 x i8]* @.str5, i64 0, i64 0
-  %ret = call i64 @strtoull(i8* %x, i8** %y, i32 10)
+  %ret = call i64 @strtoull(ptr @.str5, ptr %y, i32 10)
   ret i64 %ret
 ; CHECK: call i64 @strtoull
 }
 
-define i64 @t25(i8* %y) {
+define i64 @t25(ptr %y) {
 ; CHECK-LABEL: @t25(
-  %x = getelementptr [1 x i8], [1 x i8]* @empty, i32 0, i32 0
-  %ret = call i64 @strcspn(i8* %x, i8* %y)
+  %ret = call i64 @strcspn(ptr @empty, ptr %y)
   ret i64 %ret
 ; CHECK: call i64 @strcspn
 }
@@ -278,8 +256,7 @@ define i32 @t29(i64 %y) {
 
 define void @t30() {
 ; CHECK-LABEL: @t30(
-  %x = getelementptr inbounds [13 x i8], [13 x i8]* @.str1, i32 0, i32 0
-  call i32 @fprintf(i8* null, i8* %x)
+  call i32 @fprintf(ptr null, ptr @.str1)
   ret void
 ; CHECK: call i32 @fprintf
 }
@@ -321,16 +298,14 @@ define i64 @t35(i64 %y) {
 
 define void @t36() {
 ; CHECK-LABEL: @t36(
-  %x = getelementptr inbounds [1 x i8], [1 x i8]* @empty, i32 0, i32 0
-  call i32 @printf(i8* %x)
+  call i32 @printf(ptr @empty)
   ret void
 ; CHECK: call i32 @printf
 }
 
-define void @t37(i8* %x) {
+define void @t37(ptr %x) {
 ; CHECK-LABEL: @t37(
-  %y = getelementptr inbounds [13 x i8], [13 x i8]* @.str1, i32 0, i32 0
-  call i32 @sprintf(i8* %x, i8* %y)
+  call i32 @sprintf(ptr %x, ptr @.str1)
   ret void
 ; CHECK: call i32 @sprintf
 }
index 543161ef0f295a216bbddd85e4afb7b586a3d79e..9be3264a3727099014e9b355ceaf678351d803d0 100644 (file)
@@ -13,7 +13,6 @@ land.lhs.true:                                    ; preds = %entry
   br label %for.cond.i
 
 for.cond.i:                                       ; preds = %land.lhs.true, %entry
-  %0 = getelementptr inbounds %struct.S0.0.1.2.3.4.13.22.31.44.48.53.54.55.56.58.59.60.66.68.70.74.77.106.107.108.109.110.113.117.118.128.129, %struct.S0.0.1.2.3.4.13.22.31.44.48.53.54.55.56.58.59.60.66.68.70.74.77.106.107.108.109.110.113.117.118.128.129* %l_819.i.i, i64 0, i32 0
   br label %for.cond.i6.i.i
 
 for.cond.i6.i.i:                                  ; preds = %for.body.i8.i.i, %for.cond.i
@@ -38,7 +37,7 @@ for.body4.i.i.i.i:                                ; preds = %for.cond1.i.i.i.i
   br label %for.cond1.i.i.i.i
 
 func_39.exit.i.i:                                 ; preds = %for.cond1.i.i.i.i
-  %l_8191.sroa.0.0.copyload.i.i = load i64, i64* %0, align 1
+  %l_8191.sroa.0.0.copyload.i.i = load i64, ptr %l_819.i.i, align 1
   br label %for.cond1.i.i.i
 
 for.cond1.i.i.i:                                  ; preds = %safe_div_func_uint32_t_u_u.exit.i.i.i, %func_39.exit.i.i
index 39864aca44cf8cfc93c4c4ccc653b3d3f67f4d32..9457cd0f13b98eeaf57bd66159a028fd56b4237a 100644 (file)
@@ -602,10 +602,10 @@ define <2 x i32> @test36vec(<2 x i32> %A) {
   ret <2 x i32> %mul
 }
 
-define i32 @test37(i32* %b, i1 %c1) {
+define i32 @test37(ptr %b, i1 %c1) {
 ; CHECK-LABEL: @test37(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    store i32 0, i32* [[B:%.*]], align 4
+; CHECK-NEXT:    store i32 0, ptr [[B:%.*]], align 4
 ; CHECK-NEXT:    br i1 [[C1:%.*]], label [[LOR_RHS:%.*]], label [[LOR_END:%.*]]
 ; CHECK:       lor.rhs:
 ; CHECK-NEXT:    br label [[LOR_END]]
@@ -613,8 +613,8 @@ define i32 @test37(i32* %b, i1 %c1) {
 ; CHECK-NEXT:    ret i32 0
 ;
 entry:
-  store i32 0, i32* %b, align 4
-  %0 = load i32, i32* %b, align 4
+  store i32 0, ptr %b, align 4
+  %0 = load i32, ptr %b, align 4
   br i1 %c1, label %lor.rhs, label %lor.end
 
 lor.rhs:                                          ; preds = %entry
index 71dca0c3d689be924c99b2e3f806e5214a6d048b..9a260cc06ee1fb5f6c3bdd23eabe1b08f4d40785 100644 (file)
@@ -710,13 +710,13 @@ define float @test_shrink_intrin_fabs_fast_fp16_src(half %C) {
 define float @test_no_shrink_intrin_floor_multi_use_fpext(half %C) {
 ; CHECK-LABEL: @test_no_shrink_intrin_floor_multi_use_fpext(
 ; CHECK-NEXT:    [[D:%.*]] = fpext half [[C:%.*]] to double
-; CHECK-NEXT:    store volatile double [[D]], double* undef, align 8
+; CHECK-NEXT:    store volatile double [[D]], ptr undef, align 8
 ; CHECK-NEXT:    [[E:%.*]] = call double @llvm.floor.f64(double [[D]])
 ; CHECK-NEXT:    [[F:%.*]] = fptrunc double [[E]] to float
 ; CHECK-NEXT:    ret float [[F]]
 ;
   %D = fpext half %C to double
-  store volatile double %D, double* undef
+  store volatile double %D, ptr undef
   %E = call double @llvm.floor.f64(double %D)
   %F = fptrunc double %E to float
   ret float %F
@@ -725,13 +725,13 @@ define float @test_no_shrink_intrin_floor_multi_use_fpext(half %C) {
 define float @test_no_shrink_intrin_fabs_multi_use_fpext(half %C) {
 ; CHECK-LABEL: @test_no_shrink_intrin_fabs_multi_use_fpext(
 ; CHECK-NEXT:    [[D:%.*]] = fpext half [[C:%.*]] to double
-; CHECK-NEXT:    store volatile double [[D]], double* undef, align 8
+; CHECK-NEXT:    store volatile double [[D]], ptr undef, align 8
 ; CHECK-NEXT:    [[E:%.*]] = call double @llvm.fabs.f64(double [[D]])
 ; CHECK-NEXT:    [[F:%.*]] = fptrunc double [[E]] to float
 ; CHECK-NEXT:    ret float [[F]]
 ;
   %D = fpext half %C to double
-  store volatile double %D, double* undef
+  store volatile double %D, ptr undef
   %E = call double @llvm.fabs.f64(double %D)
   %F = fptrunc double %E to float
   ret float %F
index f55cfb9b04f8ee27826c970f37ad34dc9efa7178..d2a2a135cfa938e729fa7e3b5494f3f56b4ed629 100644 (file)
@@ -7,32 +7,30 @@ define void @foo(i32) {
 ; CHECK-LABEL: @foo(
 ; CHECK: alloca
 ; CHECK: align 16
-       %2 = alloca [3 x <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>], align 16                ; <[3 x <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>]*> [#uses=1]
-       %3 = getelementptr [3 x <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>], [3 x <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>]* %2, i32 0, i32 0             ; <<{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>*> [#uses=1]
-       %4 = getelementptr <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>, <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>* %3, i32 0, i32 0         ; <{ { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } }*> [#uses=1]
-       %5 = getelementptr { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } }, { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } }* %4, i32 0, i32 0             ; <{ [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 }*> [#uses=1]
-       %6 = bitcast { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 }* %5 to { [8 x i16] }*           ; <{ [8 x i16] }*> [#uses=1]
-       %7 = getelementptr { [8 x i16] }, { [8 x i16] }* %6, i32 0, i32 0               ; <[8 x i16]*> [#uses=1]
-       %8 = getelementptr [8 x i16], [8 x i16]* %7, i32 0, i32 0               ; <i16*> [#uses=1]
-       store i16 0, i16* %8, align 16
-    call void @bar(i16* %8)
+       %2 = alloca [3 x <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>], align 16                ; <ptr> [#uses=1]
+       %3 = getelementptr [3 x <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>], ptr %2, i32 0, i32 0             ; <ptr> [#uses=1]
+       %4 = getelementptr <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>, ptr %3, i32 0, i32 0           ; <ptr> [#uses=1]
+       %5 = getelementptr { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } }, ptr %4, i32 0, i32 0         ; <ptr> [#uses=1]
+       %6 = getelementptr { [8 x i16] }, ptr %5, i32 0, i32 0          ; <ptr> [#uses=1]
+       %7 = getelementptr [8 x i16], ptr %6, i32 0, i32 0              ; <ptr> [#uses=1]
+       store i16 0, ptr %7, align 16
+    call void @bar(ptr %7)
        ret void
 }
 
-declare void @bar(i16*)
+declare void @bar(ptr)
 
-define void @foo_as1(i32 %a, [3 x <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>] addrspace(1)* %b) {
+define void @foo_as1(i32 %a, ptr addrspace(1) %b) {
 ; CHECK-LABEL: @foo_as1(
 ; CHECK: align 16
-  %1 = getelementptr [3 x <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>], [3 x <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>] addrspace(1)* %b, i32 0, i32 0        ; <<{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>*> [#uses=1]
-  %2 = getelementptr <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>, <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }> addrspace(1)* %1, i32 0, i32 0      ; <{ { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } }*> [#uses=1]
-  %3 = getelementptr { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } }, { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } addrspace(1)* %2, i32 0, i32 0        ; <{ [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 }*> [#uses=1]
-  %4 = bitcast { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } addrspace(1)* %3 to { [8 x i16] } addrspace(1)*     ; <{ [8 x i16] }*> [#uses=1]
-  %5 = getelementptr { [8 x i16] }, { [8 x i16] } addrspace(1)* %4, i32 0, i32 0     ; <[8 x i16]*> [#uses=1]
-  %6 = getelementptr [8 x i16], [8 x i16] addrspace(1)* %5, i32 0, i32 0     ; <i16*> [#uses=1]
-  store i16 0, i16 addrspace(1)* %6, align 16
-  call void @bar_as1(i16 addrspace(1)* %6)
+  %1 = getelementptr [3 x <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>], ptr addrspace(1) %b, i32 0, i32 0        ; <ptr> [#uses=1]
+  %2 = getelementptr <{ { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } } }>, ptr addrspace(1) %1, i32 0, i32 0      ; <ptr> [#uses=1]
+  %3 = getelementptr { { [2 x { { i32 } }], [2 x i8], { i16 }, [2 x i8], i8, i8 } }, ptr addrspace(1) %2, i32 0, i32 0        ; <ptr> [#uses=1]
+  %4 = getelementptr { [8 x i16] }, ptr addrspace(1) %3, i32 0, i32 0     ; <ptr> [#uses=1]
+  %5 = getelementptr [8 x i16], ptr addrspace(1) %4, i32 0, i32 0     ; <ptr> [#uses=1]
+  store i16 0, ptr addrspace(1) %5, align 16
+  call void @bar_as1(ptr addrspace(1) %5)
   ret void
 }
 
-declare void @bar_as1(i16 addrspace(1)*)
+declare void @bar_as1(ptr addrspace(1))
index 32d76532cfa932ad8462dcd78069379c61eec2dd..91267377567fddfdd9027290ad05a111cde90191 100644 (file)
@@ -3,7 +3,7 @@
 ; This example was reduced from a test case in which InstCombine ran at least
 ; twice:
 ;   - The first InstCombine run converted dbg.declares to dbg.values using the
-;     LowerDbgDeclare utility. This produced a dbg.value(i32* %2, DW_OP_deref)
+;     LowerDbgDeclare utility. This produced a dbg.value(ptr %2, DW_OP_deref)
 ;     (this happens when the contents of an alloca are passed by-value), and a
 ;     dbg.value(i32 %0) (due to the store of %0 into the alloca).
 ;   - The second InstCombine run deleted the alloca (%2).
 ;
 ; RUN-ONCE-LABEL: @t1(
 ; RUN-ONCE-NEXT: llvm.dbg.value(metadata i32 %0, metadata [[t1_arg0:![0-9]+]], metadata !DIExpression())
-; RUN-ONCE-NEXT: llvm.dbg.value(metadata i32* undef, metadata [[t1_fake_ptr:![0-9]+]], metadata !DIExpression())
+; RUN-ONCE-NEXT: llvm.dbg.value(metadata ptr undef, metadata [[t1_fake_ptr:![0-9]+]], metadata !DIExpression())
 ; RUN-ONCE-NEXT: ret void
 define void @t1(i32) !dbg !9 {
   %2 = alloca i32, align 4
-  store i32 %0, i32* %2, align 4
+  store i32 %0, ptr %2, align 4
   call void @llvm.dbg.value(metadata i32 %0, metadata !14, metadata !DIExpression()), !dbg !15
-  call void @llvm.dbg.value(metadata i32* %2, metadata !14, metadata !DIExpression(DW_OP_deref)), !dbg !15
-  call void @llvm.dbg.value(metadata i32* %2, metadata !20, metadata !DIExpression()), !dbg !15
+  call void @llvm.dbg.value(metadata ptr %2, metadata !14, metadata !DIExpression(DW_OP_deref)), !dbg !15
+  call void @llvm.dbg.value(metadata ptr %2, metadata !20, metadata !DIExpression()), !dbg !15
   ret void
 }
 
@@ -27,19 +27,19 @@ define void @t1(i32) !dbg !9 {
 ; been produced by a frontend compiling at -O0.
 ;
 ; Here's what happens:
-; 1) We run InstCombine. This puts a dbg.value(i32* %x.addr, DW_OP_deref)
+; 1) We run InstCombine. This puts a dbg.value(ptr %x.addr, DW_OP_deref)
 ;    before the call to @use, and a dbg.value(i32 %x) after the store.
 ; 2) We inline @use.
 ; 3) We run InstCombine again. The alloca %x.addr is erased. We should just get
-;    dbg.value(i32 %x). There should be no leftover dbg.value(metadata i32*
+;    dbg.value(i32 %x). There should be no leftover dbg.value(metadata ptr
 ;    undef).
 ;
-;;; define void @use(i32* %addr) alwaysinline { ret void }
+;;; define void @use(ptr %addr) alwaysinline { ret void }
 ;;; define void @t2(i32 %x) !dbg !17 {
 ;;;   %x.addr = alloca i32, align 4
-;;;   store i32 %x, i32* %x.addr, align 4
-;;;   call void @llvm.dbg.declare(metadata i32* %x.addr, metadata !18, metadata !DIExpression()), !dbg !19
-;;;   call void @use(i32* %x.addr)
+;;;   store i32 %x, ptr %x.addr, align 4
+;;;   call void @llvm.dbg.declare(metadata ptr %x.addr, metadata !18, metadata !DIExpression()), !dbg !19
+;;;   call void @use(ptr %x.addr)
 ;;;   ret void
 ;;; }
 
index 3148f6192b9bc770f269e127b477af064374e12b..244750c923eb6070aac8ee4239ae0c6fa33d33c4 100644 (file)
@@ -313,18 +313,18 @@ define float @bitcasted_inselt_to_and_from_FP_uses2(double %x) {
 ; This would crash/assert because the logic for collectShuffleElements()
 ; does not consider the possibility of invalid insert/extract operands.
 
-define <4 x double> @invalid_extractelement(<2 x double> %a, <4 x double> %b, double* %p) {
+define <4 x double> @invalid_extractelement(<2 x double> %a, <4 x double> %b, ptr %p) {
 ; ANY-LABEL: @invalid_extractelement(
 ; ANY-NEXT:    [[TMP1:%.*]] = shufflevector <2 x double> [[A:%.*]], <2 x double> poison, <4 x i32> <i32 0, i32 undef, i32 undef, i32 undef>
 ; ANY-NEXT:    [[T4:%.*]] = shufflevector <4 x double> [[B:%.*]], <4 x double> [[TMP1]], <4 x i32> <i32 undef, i32 1, i32 4, i32 3>
 ; ANY-NEXT:    [[E:%.*]] = extractelement <4 x double> [[B]], i64 1
-; ANY-NEXT:    store double [[E]], double* [[P:%.*]], align 8
+; ANY-NEXT:    store double [[E]], ptr [[P:%.*]], align 8
 ; ANY-NEXT:    ret <4 x double> [[T4]]
 ;
   %t3 = extractelement <2 x double> %a, i32 0
   %t4 = insertelement <4 x double> %b, double %t3, i32 2
   %e = extractelement <4 x double> %t4, i32 1
-  store double %e, double* %p
+  store double %e, ptr %p
   %e1 = extractelement <2 x double> %a, i32 4 ; invalid index
   %r = insertelement <4 x double> %t4, double %e1, i64 0
   ret <4 x double> %r
index e045804e17f74ca6f382b9436454711193772d7a..1e8d049c96e7d4434d9305a61997812c9360e69f 100644 (file)
@@ -315,18 +315,18 @@ define float @bitcasted_inselt_to_and_from_FP_uses2(double %x) {
 ; This would crash/assert because the logic for collectShuffleElements()
 ; does not consider the possibility of invalid insert/extract operands.
 
-define <4 x double> @invalid_extractelement(<2 x double> %a, <4 x double> %b, double* %p) {
+define <4 x double> @invalid_extractelement(<2 x double> %a, <4 x double> %b, ptr %p) {
 ; ANY-LABEL: @invalid_extractelement(
 ; ANY-NEXT:    [[TMP1:%.*]] = shufflevector <2 x double> [[A:%.*]], <2 x double> poison, <4 x i32> <i32 0, i32 undef, i32 undef, i32 undef>
 ; ANY-NEXT:    [[T4:%.*]] = shufflevector <4 x double> [[B:%.*]], <4 x double> [[TMP1]], <4 x i32> <i32 undef, i32 1, i32 4, i32 3>
 ; ANY-NEXT:    [[E:%.*]] = extractelement <4 x double> [[B]], i64 1
-; ANY-NEXT:    store double [[E]], double* [[P:%.*]], align 8
+; ANY-NEXT:    store double [[E]], ptr [[P:%.*]], align 8
 ; ANY-NEXT:    ret <4 x double> [[T4]]
 ;
   %t3 = extractelement <2 x double> %a, i32 0
   %t4 = insertelement <4 x double> %b, double %t3, i32 2
   %e = extractelement <4 x double> %t4, i32 1
-  store double %e, double* %p
+  store double %e, ptr %p
   %e1 = extractelement <2 x double> %a, i32 4 ; invalid index
   %r = insertelement <4 x double> %t4, double %e1, i64 0
   ret <4 x double> %r
index 0c463928295929d5b840490b31843b389bd9f785..62c2955235abba86f5afda1f812910f585082245 100644 (file)
@@ -3,40 +3,40 @@
 %Complex = type { double, double }
 
 ; Check that instcombine preserves TBAA when narrowing loads
-define double @teststructextract(%Complex *%val) {
+define double @teststructextract(ptr %val) {
 ; CHECK: load double, {{.*}}, !tbaa
 ; CHECK-NOT: load %Complex
-    %loaded = load %Complex, %Complex *%val, !tbaa !1
+    %loaded = load %Complex, ptr %val, !tbaa !1
     %real = extractvalue %Complex %loaded, 0
     ret double %real
 }
 
-define double @testarrayextract([2 x double] *%val) {
+define double @testarrayextract(ptr %val) {
 ; CHECK: load double, {{.*}}, !tbaa
 ; CHECK-NOT: load [2 x double]
-    %loaded = load [2 x double], [2 x double] *%val, !tbaa !1
+    %loaded = load [2 x double], ptr %val, !tbaa !1
     %real = extractvalue [2 x double] %loaded, 0
     ret double %real
 }
 
 ; Check that inscombine preserves TBAA when breaking up stores
-define void @teststructinsert(%Complex *%loc, double %a, double %b) {
+define void @teststructinsert(ptr %loc, double %a, double %b) {
 ; CHECK: store double %a, {{.*}}, !tbaa
 ; CHECK: store double %b, {{.*}}, !tbaa
 ; CHECK-NOT: store %Complex
     %inserted  = insertvalue %Complex undef,      double %a, 0
     %inserted2 = insertvalue %Complex %inserted,  double %b, 1
-    store %Complex %inserted2, %Complex *%loc, !tbaa !1
+    store %Complex %inserted2, ptr %loc, !tbaa !1
     ret void
 }
 
-define void @testarrayinsert([2 x double] *%loc, double %a, double %b) {
+define void @testarrayinsert(ptr %loc, double %a, double %b) {
 ; CHECK: store double %a, {{.*}}, !tbaa
 ; CHECK: store double %b, {{.*}}, !tbaa
 ; CHECK-NOT: store [2 x double]
     %inserted  = insertvalue [2 x double] undef,      double %a, 0
     %inserted2 = insertvalue [2 x double] %inserted,  double %b, 1
-    store [2 x double] %inserted2, [2 x double] *%loc, !tbaa !1
+    store [2 x double] %inserted2, ptr %loc, !tbaa !1
     ret void
 }
 
index bbdcc3b51832d139784fe10e4289a085e3be5ba0..3c16f3c29259ca4daad6095b9e71987f43a85b85 100644 (file)
@@ -40,26 +40,26 @@ define i32 @foo(i32 %a, i32 %b) {
 }
 
 ; CHECK-LABEL: define i32 @extract2gep(
-; CHECK-NEXT: [[GEP:%[a-z0-9]+]] = getelementptr inbounds {{.*}}, {{.*}}* %pair, i64 0, i32 1
-; CHECK-NEXT: [[LOAD:%[A-Za-z0-9]+]] = load i32, i32* [[GEP]]
+; CHECK-NEXT: [[GEP:%[a-z0-9]+]] = getelementptr inbounds {{.*}}, ptr %pair, i64 0, i32 1
+; CHECK-NEXT: [[LOAD:%[A-Za-z0-9]+]] = load i32, ptr [[GEP]]
 ; CHECK-NEXT: store
 ; CHECK-NEXT: br label %loop
 ; CHECK-NOT: extractvalue
 ; CHECK: call {{.*}}(i32 [[LOAD]])
 ; CHECK-NOT: extractvalue
 ; CHECK: ret i32 [[LOAD]]
-define i32 @extract2gep({i16, i32}* %pair, i32* %P) {
+define i32 @extract2gep(ptr %pair, ptr %P) {
         ; The load + extractvalue should be converted
         ; to an inbounds gep + smaller load.
         ; The new load should be in the same spot as the old load.
-        %L = load {i16, i32}, {i16, i32}* %pair
-        store i32 0, i32* %P
+        %L = load {i16, i32}, ptr %pair
+        store i32 0, ptr %P
         br label %loop
 
 loop:
         %E = extractvalue {i16, i32} %L, 1
         %C = call i32 @baz(i32 %E)
-        store i32 %C, i32* %P
+        store i32 %C, ptr %P
         %cond = icmp eq i32 %C, 0
         br i1 %cond, label %end, label %loop
 
@@ -68,13 +68,13 @@ end:
 }
 
 ; CHECK-LABEL: define i16 @doubleextract2gep(
-; CHECK-NEXT: [[GEP:%[a-z0-9]+]] = getelementptr inbounds {{.*}}, {{.*}}* %arg, i64 0, i32 1, i32 1
-; CHECK-NEXT: [[LOAD:%[A-Za-z0-9]+]] = load i16, i16* [[GEP]]
+; CHECK-NEXT: [[GEP:%[a-z0-9]+]] = getelementptr inbounds {{.*}}, ptr %arg, i64 0, i32 1, i32 1
+; CHECK-NEXT: [[LOAD:%[A-Za-z0-9]+]] = load i16, ptr [[GEP]]
 ; CHECK-NEXT: ret i16 [[LOAD]]
-define i16 @doubleextract2gep({i16, {i32, i16}}* %arg) {
+define i16 @doubleextract2gep(ptr %arg) {
         ; The load + extractvalues should be converted
         ; to a 3-index inbounds gep + smaller load.
-        %L = load {i16, {i32, i16}}, {i16, {i32, i16}}* %arg
+        %L = load {i16, {i32, i16}}, ptr %arg
         %E1 = extractvalue {i16, {i32, i16}} %L, 1
         %E2 = extractvalue {i32, i16} %E1, 1
         ret i16 %E2
@@ -86,9 +86,9 @@ define i16 @doubleextract2gep({i16, {i32, i16}}* %arg) {
 ; CHECK-NEXT: extractvalue
 ; CHECK-NEXT: add
 ; CHECK-NEXT: ret
-define i32 @nogep-multiuse({i32, i32}* %pair) {
+define i32 @nogep-multiuse(ptr %pair) {
         ; The load should be left unchanged since both parts are needed.
-        %L = load volatile {i32, i32}, {i32, i32}* %pair
+        %L = load volatile {i32, i32}, ptr %pair
         %LHS = extractvalue {i32, i32} %L, 0
         %RHS = extractvalue {i32, i32} %L, 1
         %R = add i32 %LHS, %RHS
@@ -99,9 +99,9 @@ define i32 @nogep-multiuse({i32, i32}* %pair) {
 ; CHECK-NEXT: load volatile {{.*}} %pair
 ; CHECK-NEXT: extractvalue
 ; CHECK-NEXT: ret
-define i32 @nogep-volatile({i32, i32}* %pair) {
+define i32 @nogep-volatile(ptr %pair) {
         ; The load volatile should be left unchanged.
-        %L = load volatile {i32, i32}, {i32, i32}* %pair
+        %L = load volatile {i32, i32}, ptr %pair
         %E = extractvalue {i32, i32} %L, 1
         ret i32 %E
 }
index 725b906f92bb94855206e79011bbbf4c58097441..1b9f4a3c3315508f52889c906b88a3b36a3c924f 100644 (file)
@@ -240,12 +240,12 @@ define double @multi_use_fabs_fpext(float %x) {
 ; CHECK-LABEL: @multi_use_fabs_fpext(
 ; CHECK-NEXT:    [[FPEXT:%.*]] = fpext float [[X:%.*]] to double
 ; CHECK-NEXT:    [[FABS:%.*]] = call double @llvm.fabs.f64(double [[FPEXT]])
-; CHECK-NEXT:    store volatile double [[FPEXT]], double* undef, align 8
+; CHECK-NEXT:    store volatile double [[FPEXT]], ptr undef, align 8
 ; CHECK-NEXT:    ret double [[FABS]]
 ;
   %fpext = fpext float %x to double
   %fabs = call double @llvm.fabs.f64(double %fpext)
-  store volatile double %fpext, double* undef
+  store volatile double %fpext, ptr undef
   ret double %fabs
 }
 
index 960e1b7712a6201d22d9c01babb1ed72edd0813f..5c4380b14397dcbab8a7b099279a5d39ccb628dc 100644 (file)
@@ -439,7 +439,7 @@ define <2 x i1> @fabs_uno(<2 x float> %a) {
 }
 
 ; Don't crash.
-define i32 @test17(double %a, double (double)* %p) {
+define i32 @test17(double %a, ptr %p) {
 ; CHECK-LABEL: @test17(
 ; CHECK-NEXT:    [[CALL:%.*]] = tail call double [[P:%.*]](double [[A:%.*]])
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ueq double [[CALL]], 0.000000e+00
@@ -688,15 +688,15 @@ define i1 @is_signbit_clear_3(double %x) {
 
 ; Negative test - uses
 
-define i1 @is_signbit_set_extra_use(double %x, double* %p) {
+define i1 @is_signbit_set_extra_use(double %x, ptr %p) {
 ; CHECK-LABEL: @is_signbit_set_extra_use(
 ; CHECK-NEXT:    [[S:%.*]] = call double @llvm.copysign.f64(double 1.000000e+00, double [[X:%.*]])
-; CHECK-NEXT:    store double [[S]], double* [[P:%.*]], align 8
+; CHECK-NEXT:    store double [[S]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[R:%.*]] = fcmp olt double [[S]], 0.000000e+00
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %s = call double @llvm.copysign.f64(double 1.0, double %x)
-  store double %s, double* %p
+  store double %s, ptr %p
   %r = fcmp olt double %s, 0.0
   ret i1 %r
 }
@@ -749,15 +749,15 @@ define <2 x i1> @lossy_oeq(<2 x float> %x) {
   ret <2 x i1> %r
 }
 
-define i1 @lossy_one(float %x, double* %p) {
+define i1 @lossy_one(float %x, ptr %p) {
 ; CHECK-LABEL: @lossy_one(
 ; CHECK-NEXT:    [[E:%.*]] = fpext float [[X:%.*]] to double
-; CHECK-NEXT:    store double [[E]], double* [[P:%.*]], align 8
+; CHECK-NEXT:    store double [[E]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[R:%.*]] = fcmp ord float [[X]], 0.000000e+00
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %e = fpext float %x to double
-  store double %e, double* %p
+  store double %e, ptr %p
   %r = fcmp one double %e, 0.1
   ret i1 %r
 }
@@ -792,15 +792,15 @@ define <2 x i1> @lossy_ogt(<2 x float> %x) {
   ret <2 x i1> %r
 }
 
-define i1 @lossy_oge(float %x, double* %p) {
+define i1 @lossy_oge(float %x, ptr %p) {
 ; CHECK-LABEL: @lossy_oge(
 ; CHECK-NEXT:    [[E:%.*]] = fpext float [[X:%.*]] to double
-; CHECK-NEXT:    store double [[E]], double* [[P:%.*]], align 8
+; CHECK-NEXT:    store double [[E]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[R:%.*]] = fcmp oge double [[E]], 1.000000e-01
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %e = fpext float %x to double
-  store double %e, double* %p
+  store double %e, ptr %p
   %r = fcmp oge double %e, 0.1
   ret i1 %r
 }
@@ -838,15 +838,15 @@ define <2 x i1> @lossy_ugt(<2 x float> %x) {
   ret <2 x i1> %r
 }
 
-define i1 @lossy_uge(float %x, double* %p) {
+define i1 @lossy_uge(float %x, ptr %p) {
 ; CHECK-LABEL: @lossy_uge(
 ; CHECK-NEXT:    [[E:%.*]] = fpext float [[X:%.*]] to double
-; CHECK-NEXT:    store double [[E]], double* [[P:%.*]], align 8
+; CHECK-NEXT:    store double [[E]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[R:%.*]] = fcmp uge double [[E]], 1.000000e-01
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %e = fpext float %x to double
-  store double %e, double* %p
+  store double %e, ptr %p
   %r = fcmp uge double %e, 0.1
   ret i1 %r
 }
@@ -923,15 +923,15 @@ define <2 x i1> @fneg_oge(<2 x float> %a) {
   ret <2 x i1> %cmp
 }
 
-define i1 @fneg_olt(float %a, float* %q) {
+define i1 @fneg_olt(float %a, ptr %q) {
 ; CHECK-LABEL: @fneg_olt(
 ; CHECK-NEXT:    [[FNEG:%.*]] = fneg float [[A:%.*]]
-; CHECK-NEXT:    store float [[FNEG]], float* [[Q:%.*]], align 4
+; CHECK-NEXT:    store float [[FNEG]], ptr [[Q:%.*]], align 4
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ogt float [[A]], 0.000000e+00
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %fneg = fneg float %a
-  store float %fneg, float* %q
+  store float %fneg, ptr %q
   %cmp = fcmp olt float %fneg, %a
   ret i1 %cmp
 }
@@ -996,15 +996,15 @@ define <2 x i1> @fneg_ugt(<2 x float> %a) {
   ret <2 x i1> %cmp
 }
 
-define i1 @fneg_uge(float %a, float* %q) {
+define i1 @fneg_uge(float %a, ptr %q) {
 ; CHECK-LABEL: @fneg_uge(
 ; CHECK-NEXT:    [[FNEG:%.*]] = fneg float [[A:%.*]]
-; CHECK-NEXT:    store float [[FNEG]], float* [[Q:%.*]], align 4
+; CHECK-NEXT:    store float [[FNEG]], ptr [[Q:%.*]], align 4
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp ule float [[A]], 0.000000e+00
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %fneg = fneg float %a
-  store float %fneg, float* %q
+  store float %fneg, ptr %q
   %cmp = fcmp uge float %fneg, %a
   ret i1 %cmp
 }
@@ -1075,17 +1075,17 @@ define <2 x i1> @fneg_oge_swap(<2 x float> %p) {
   ret <2 x i1> %cmp
 }
 
-define i1 @fneg_olt_swap(float %p, float* %q) {
+define i1 @fneg_olt_swap(float %p, ptr %q) {
 ; CHECK-LABEL: @fneg_olt_swap(
 ; CHECK-NEXT:    [[A:%.*]] = fadd float [[P:%.*]], [[P]]
 ; CHECK-NEXT:    [[FNEG:%.*]] = fneg float [[A]]
-; CHECK-NEXT:    store float [[FNEG]], float* [[Q:%.*]], align 4
+; CHECK-NEXT:    store float [[FNEG]], ptr [[Q:%.*]], align 4
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp olt float [[A]], 0.000000e+00
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %a = fadd float %p, %p ; thwart complexity-based canonicalization
   %fneg = fneg float %a
-  store float %fneg, float* %q
+  store float %fneg, ptr %q
   %cmp = fcmp olt float %a, %fneg
   ret i1 %cmp
 }
@@ -1162,17 +1162,17 @@ define <2 x i1> @fneg_ugt_swap(<2 x float> %p) {
   ret <2 x i1> %cmp
 }
 
-define i1 @fneg_uge_swap(float %p, float* %q) {
+define i1 @fneg_uge_swap(float %p, ptr %q) {
 ; CHECK-LABEL: @fneg_uge_swap(
 ; CHECK-NEXT:    [[A:%.*]] = fadd float [[P:%.*]], [[P]]
 ; CHECK-NEXT:    [[FNEG:%.*]] = fneg float [[A]]
-; CHECK-NEXT:    store float [[FNEG]], float* [[Q:%.*]], align 4
+; CHECK-NEXT:    store float [[FNEG]], ptr [[Q:%.*]], align 4
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp uge float [[A]], 0.000000e+00
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %a = fadd float %p, %p ; thwart complexity-based canonicalization
   %fneg = fneg float %a
-  store float %fneg, float* %q
+  store float %fneg, ptr %q
   %cmp = fcmp uge float %a, %fneg
   ret i1 %cmp
 }
index 1d12a444e891be708b1c656adbf87bf0294af50c..b93cd1c988038116b5e062a5e690bfe13634582d 100644 (file)
@@ -27,7 +27,7 @@ define double @fdiv_strict_cos_strict_sin_reassoc(double %a) {
   ret double %div
 }
 
-define double @fdiv_reassoc_cos_strict_sin_strict(double %a, i32* dereferenceable(2) %dummy) {
+define double @fdiv_reassoc_cos_strict_sin_strict(double %a, ptr dereferenceable(2) %dummy) {
 ; CHECK-LABEL: @fdiv_reassoc_cos_strict_sin_strict(
 ; CHECK-NEXT:    [[TAN:%.*]] = call reassoc double @tan(double [[A:%.*]]) #1
 ; CHECK-NEXT:    [[TMP1:%.*]] = fdiv reassoc double 1.000000e+00, [[TAN]]
index 712febdcb7350db1fea6fe08b48c01b2bc4b659a..90f80c8a0d66981f7432c48c72552927f7eef38b 100644 (file)
@@ -27,7 +27,7 @@ define double @fdiv_strict_sin_strict_cos_reassoc(double %a) {
   ret double %div
 }
 
-define double @fdiv_reassoc_sin_strict_cos_strict(double %a, i32* dereferenceable(2) %dummy) {
+define double @fdiv_reassoc_sin_strict_cos_strict(double %a, ptr dereferenceable(2) %dummy) {
 ; CHECK-LABEL: @fdiv_reassoc_sin_strict_cos_strict(
 ; CHECK-NEXT:    [[TAN:%.*]] = call reassoc double @tan(double [[A:%.*]]) #1
 ; CHECK-NEXT:    ret double [[TAN]]
index 279b6f84c42b943ce016cf78851c57a4b0252fe2..8b413ae6f664b0a24761e03c6e609a8276e48dfb 100644 (file)
@@ -95,44 +95,44 @@ define float @fma_unary_fneg_x_unary_fneg_y_fast(float %x, float %y, float %z) {
 
 define float @fma_fneg_const_fneg_y(float %y, float %z) {
 ; CHECK-LABEL: @fma_fneg_const_fneg_y(
-; CHECK-NEXT:    [[FMA:%.*]] = call float @llvm.fma.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]])
+; CHECK-NEXT:    [[FMA:%.*]] = call float @llvm.fma.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (ptr @external to i32) to float), float [[Z:%.*]])
 ; CHECK-NEXT:    ret float [[FMA]]
 ;
   %y.fneg = fsub float -0.0, %y
-  %fsub = fsub float -0.0, bitcast (i32 ptrtoint (i32* @external to i32) to float)
+  %fsub = fsub float -0.0, bitcast (i32 ptrtoint (ptr @external to i32) to float)
   %fma = call float @llvm.fma.f32(float %fsub, float %y.fneg, float %z)
   ret float %fma
 }
 
 define float @fma_unary_fneg_const_unary_fneg_y(float %y, float %z) {
 ; CHECK-LABEL: @fma_unary_fneg_const_unary_fneg_y(
-; CHECK-NEXT:    [[FMA:%.*]] = call float @llvm.fma.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]])
+; CHECK-NEXT:    [[FMA:%.*]] = call float @llvm.fma.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (ptr @external to i32) to float), float [[Z:%.*]])
 ; CHECK-NEXT:    ret float [[FMA]]
 ;
   %y.fneg = fneg float %y
-  %external.fneg = fneg float bitcast (i32 ptrtoint (i32* @external to i32) to float)
+  %external.fneg = fneg float bitcast (i32 ptrtoint (ptr @external to i32) to float)
   %fma = call float @llvm.fma.f32(float %external.fneg, float %y.fneg, float %z)
   ret float %fma
 }
 
 define float @fma_fneg_x_fneg_const(float %x, float %z) {
 ; CHECK-LABEL: @fma_fneg_x_fneg_const(
-; CHECK-NEXT:    [[FMA:%.*]] = call float @llvm.fma.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]])
+; CHECK-NEXT:    [[FMA:%.*]] = call float @llvm.fma.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (ptr @external to i32) to float), float [[Z:%.*]])
 ; CHECK-NEXT:    ret float [[FMA]]
 ;
   %x.fneg = fsub float -0.0, %x
-  %fsub = fsub float -0.0, bitcast (i32 ptrtoint (i32* @external to i32) to float)
+  %fsub = fsub float -0.0, bitcast (i32 ptrtoint (ptr @external to i32) to float)
   %fma = call float @llvm.fma.f32(float %x.fneg, float %fsub, float %z)
   ret float %fma
 }
 
 define float @fma_unary_fneg_x_unary_fneg_const(float %x, float %z) {
 ; CHECK-LABEL: @fma_unary_fneg_x_unary_fneg_const(
-; CHECK-NEXT:    [[FMA:%.*]] = call float @llvm.fma.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]])
+; CHECK-NEXT:    [[FMA:%.*]] = call float @llvm.fma.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (ptr @external to i32) to float), float [[Z:%.*]])
 ; CHECK-NEXT:    ret float [[FMA]]
 ;
   %x.fneg = fneg float %x
-  %external.fneg = fneg float bitcast (i32 ptrtoint (i32* @external to i32) to float)
+  %external.fneg = fneg float bitcast (i32 ptrtoint (ptr @external to i32) to float)
   %fma = call float @llvm.fma.f32(float %x.fneg, float %external.fneg, float %z)
   ret float %fma
 }
@@ -218,44 +218,44 @@ define float @fmuladd_unary_fneg_x_unary_fneg_y_fast(float %x, float %y, float %
 
 define float @fmuladd_fneg_const_fneg_y(float %y, float %z) {
 ; CHECK-LABEL: @fmuladd_fneg_const_fneg_y(
-; CHECK-NEXT:    [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]])
+; CHECK-NEXT:    [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (ptr @external to i32) to float), float [[Z:%.*]])
 ; CHECK-NEXT:    ret float [[FMULADD]]
 ;
   %y.fneg = fsub float -0.0, %y
-  %fsub = fsub float -0.0, bitcast (i32 ptrtoint (i32* @external to i32) to float)
+  %fsub = fsub float -0.0, bitcast (i32 ptrtoint (ptr @external to i32) to float)
   %fmuladd = call float @llvm.fmuladd.f32(float %fsub, float %y.fneg, float %z)
   ret float %fmuladd
 }
 
 define float @fmuladd_unary_fneg_const_unary_fneg_y(float %y, float %z) {
 ; CHECK-LABEL: @fmuladd_unary_fneg_const_unary_fneg_y(
-; CHECK-NEXT:    [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]])
+; CHECK-NEXT:    [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[Y:%.*]], float bitcast (i32 ptrtoint (ptr @external to i32) to float), float [[Z:%.*]])
 ; CHECK-NEXT:    ret float [[FMULADD]]
 ;
   %y.fneg = fneg float %y
-  %external.fneg = fneg float bitcast (i32 ptrtoint (i32* @external to i32) to float)
+  %external.fneg = fneg float bitcast (i32 ptrtoint (ptr @external to i32) to float)
   %fmuladd = call float @llvm.fmuladd.f32(float %external.fneg, float %y.fneg, float %z)
   ret float %fmuladd
 }
 
 define float @fmuladd_fneg_x_fneg_const(float %x, float %z) {
 ; CHECK-LABEL: @fmuladd_fneg_x_fneg_const(
-; CHECK-NEXT:    [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]])
+; CHECK-NEXT:    [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (ptr @external to i32) to float), float [[Z:%.*]])
 ; CHECK-NEXT:    ret float [[FMULADD]]
 ;
   %x.fneg = fsub float -0.0, %x
-  %fsub = fsub float -0.0, bitcast (i32 ptrtoint (i32* @external to i32) to float)
+  %fsub = fsub float -0.0, bitcast (i32 ptrtoint (ptr @external to i32) to float)
   %fmuladd = call float @llvm.fmuladd.f32(float %x.fneg, float %fsub, float %z)
   ret float %fmuladd
 }
 
 define float @fmuladd_unary_fneg_x_unary_fneg_const(float %x, float %z) {
 ; CHECK-LABEL: @fmuladd_unary_fneg_x_unary_fneg_const(
-; CHECK-NEXT:    [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (i32* @external to i32) to float), float [[Z:%.*]])
+; CHECK-NEXT:    [[FMULADD:%.*]] = call float @llvm.fmuladd.f32(float [[X:%.*]], float bitcast (i32 ptrtoint (ptr @external to i32) to float), float [[Z:%.*]])
 ; CHECK-NEXT:    ret float [[FMULADD]]
 ;
   %x.fneg = fneg float %x
-  %external.fneg = fneg float bitcast (i32 ptrtoint (i32* @external to i32) to float)
+  %external.fneg = fneg float bitcast (i32 ptrtoint (ptr @external to i32) to float)
   %fmuladd = call float @llvm.fmuladd.f32(float %x.fneg, float %external.fneg, float %z)
   ret float %fmuladd
 }
index d0dea471e49609ebe38757002dc9f83f460c74c9..716781564ca70facfca5a94d42485ba8ad67508f 100644 (file)
@@ -5,7 +5,7 @@
 ; poison
 
 ; Don't crash when attempting to cast a constant FMul to an instruction.
-define void @test8(i32* %inout, i1 %c1) {
+define void @test8(ptr %inout, i1 %c1) {
 ; CHECK-LABEL: @test8(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[FOR_COND:%.*]]
@@ -19,7 +19,7 @@ define void @test8(i32* %inout, i1 %c1) {
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %0 = load i32, i32* %inout, align 4
+  %0 = load i32, ptr %inout, align 4
   %conv = uitofp i32 %0 to float
   %vecinit = insertelement <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float poison>, float %conv, i32 3
   %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %vecinit
index dcbe88ac21fc556023330a05790b32149374ccef..2cea44069b47f28ca975c8d3be55d8271bd0f20c 100644 (file)
@@ -99,35 +99,35 @@ define double @rsqrt_squared(double %x) {
   ret double %squared
 }
 
-define double @rsqrt_x_reassociate_extra_use(double %x, double * %p) {
+define double @rsqrt_x_reassociate_extra_use(double %x, ptr %p) {
 ; CHECK-LABEL: @rsqrt_x_reassociate_extra_use(
 ; CHECK-NEXT:    [[SQRT:%.*]] = call double @llvm.sqrt.f64(double [[X:%.*]])
 ; CHECK-NEXT:    [[RSQRT:%.*]] = fdiv double 1.000000e+00, [[SQRT]]
 ; CHECK-NEXT:    [[RES:%.*]] = fdiv reassoc nsz double [[X:%.*]], [[SQRT]]
-; CHECK-NEXT:    store double [[RSQRT]], double* [[P:%.*]], align 8
+; CHECK-NEXT:    store double [[RSQRT]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    ret double [[RES]]
 ;
   %sqrt = call double @llvm.sqrt.f64(double %x)
   %rsqrt = fdiv double 1.0, %sqrt
   %res = fmul reassoc nsz double %rsqrt, %x
-  store double %rsqrt, double* %p
+  store double %rsqrt, ptr %p
   ret double %res
 }
 
-define <2 x float> @x_add_y_rsqrt_reassociate_extra_use(<2 x float> %x, <2 x float> %y, <2 x float>* %p) {
+define <2 x float> @x_add_y_rsqrt_reassociate_extra_use(<2 x float> %x, <2 x float> %y, ptr %p) {
 ; CHECK-LABEL: @x_add_y_rsqrt_reassociate_extra_use(
 ; CHECK-NEXT:    [[ADD:%.*]] = fadd fast <2 x float> [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[SQRT:%.*]] = call fast <2 x float> @llvm.sqrt.v2f32(<2 x float> [[ADD]])
 ; CHECK-NEXT:    [[RSQRT:%.*]] = fdiv fast <2 x float> <float 1.000000e+00, float 1.000000e+00>, [[SQRT]]
 ; CHECK-NEXT:    [[RES:%.*]] = fdiv fast <2 x float> [[ADD]], [[SQRT]]
-; CHECK-NEXT:    store <2 x float> [[RSQRT]], <2 x float>* [[P:%.*]], align 8
+; CHECK-NEXT:    store <2 x float> [[RSQRT]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    ret <2 x float> [[RES]]
 ;
   %add = fadd fast <2 x float> %x, %y ; thwart complexity-based canonicalization
   %sqrt = call fast <2 x float> @llvm.sqrt.v2f32(<2 x float> %add)
   %rsqrt = fdiv fast <2 x float> <float 1.0, float 1.0>, %sqrt
   %res = fmul fast <2 x float> %add, %rsqrt
-  store <2 x float> %rsqrt, <2 x float>* %p
+  store <2 x float> %rsqrt, ptr %p
   ret <2 x float> %res
 }
 
index 981e26c4912bf0c8ce1f341ea161897dc75b565e..a5501ace531dd823b60541d5bb225ff1a8652def 100644 (file)
@@ -372,7 +372,7 @@ define float @unary_neg_mul_multi_use(float %x, float %y) {
 }
 
 ; Don't crash when attempting to cast a constant FMul to an instruction.
-define void @test8(i32* %inout, i1 %c1) {
+define void @test8(ptr %inout, i1 %c1) {
 ; CHECK-LABEL: @test8(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[FOR_COND:%.*]]
@@ -386,7 +386,7 @@ define void @test8(i32* %inout, i1 %c1) {
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %0 = load i32, i32* %inout, align 4
+  %0 = load i32, ptr %inout, align 4
   %conv = uitofp i32 %0 to float
   %vecinit = insertelement <4 x float> <float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float undef>, float %conv, i32 3
   %sub = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %vecinit
@@ -665,12 +665,12 @@ define float @fdiv_constant_numerator_fmul(float %x) {
 define float @fdiv_constant_numerator_fmul_extra_use(float %x) {
 ; CHECK-LABEL: @fdiv_constant_numerator_fmul_extra_use(
 ; CHECK-NEXT:    [[DIV:%.*]] = fdiv fast float 1.000000e+00, [[X:%.*]]
-; CHECK-NEXT:    store float [[DIV]], float* @fmul2_external, align 4
+; CHECK-NEXT:    store float [[DIV]], ptr @fmul2_external, align 4
 ; CHECK-NEXT:    [[MUL:%.*]] = fmul fast float [[DIV]], 2.000000e+00
 ; CHECK-NEXT:    ret float [[MUL]]
 ;
   %div = fdiv fast float 1.0, %x
-  store float %div, float* @fmul2_external
+  store float %div, ptr @fmul2_external
   %mul = fmul fast float %div, 2.0
   ret float %mul
 }
@@ -1053,15 +1053,15 @@ define float @fmul_fdiv_factor_extra_use(float %x, float %y) {
 
 ; Avoid infinite looping by moving negation out of a constant expression.
 
-@g = external global {[2 x i8*]}, align 1
+@g = external global {[2 x ptr]}, align 1
 
 define double @fmul_negated_constant_expression(double %x) {
 ; CHECK-LABEL: @fmul_negated_constant_expression(
-; CHECK-NEXT:    [[FSUB:%.*]] = fneg double bitcast (i64 ptrtoint (i8** getelementptr inbounds ({ [2 x i8*] }, { [2 x i8*] }* @g, i64 0, inrange i32 0, i64 2) to i64) to double)
+; CHECK-NEXT:    [[FSUB:%.*]] = fneg double bitcast (i64 ptrtoint (ptr getelementptr inbounds ({ [2 x ptr] }, ptr @g, i64 0, inrange i32 0, i64 2) to i64) to double)
 ; CHECK-NEXT:    [[R:%.*]] = fmul double [[FSUB]], [[X:%.*]]
 ; CHECK-NEXT:    ret double [[R]]
 ;
-  %fsub = fsub double -0.000000e+00, bitcast (i64 ptrtoint (i8** getelementptr inbounds ({ [2 x i8*] }, { [2 x i8*] }* @g, i64 0, inrange i32 0, i64 2) to i64) to double)
+  %fsub = fsub double -0.000000e+00, bitcast (i64 ptrtoint (ptr getelementptr inbounds ({ [2 x ptr] }, ptr @g, i64 0, inrange i32 0, i64 2) to i64) to double)
   %r = fmul double %x, %fsub
   ret double %r
 }
index 08ced4018483b4fc0abd4468e26cd202f454eda1..41b2146143abd537d48a02c5b436bc51f3f1d80a 100644 (file)
@@ -594,22 +594,22 @@ define <2 x float> @fake_fneg_nsz_fadd_constant_vec(<2 x float> %x) {
 
 define float @fneg_nsz_fadd_constant_expr(float %x) {
 ; CHECK-LABEL: @fneg_nsz_fadd_constant_expr(
-; CHECK-NEXT:    [[A:%.*]] = fadd float [[X:%.*]], bitcast (i32 ptrtoint (i16* @g to i32) to float)
+; CHECK-NEXT:    [[A:%.*]] = fadd float [[X:%.*]], bitcast (i32 ptrtoint (ptr @g to i32) to float)
 ; CHECK-NEXT:    [[R:%.*]] = fneg nsz float [[A]]
 ; CHECK-NEXT:    ret float [[R]]
 ;
-  %a = fadd float %x, bitcast (i32 ptrtoint (i16* @g to i32) to float)
+  %a = fadd float %x, bitcast (i32 ptrtoint (ptr @g to i32) to float)
   %r = fneg nsz float %a
   ret float %r
 }
 
 define float @fake_fneg_nsz_fadd_constant_expr(float %x) {
 ; CHECK-LABEL: @fake_fneg_nsz_fadd_constant_expr(
-; CHECK-NEXT:    [[A:%.*]] = fadd float [[X:%.*]], bitcast (i32 ptrtoint (i16* @g to i32) to float)
+; CHECK-NEXT:    [[A:%.*]] = fadd float [[X:%.*]], bitcast (i32 ptrtoint (ptr @g to i32) to float)
 ; CHECK-NEXT:    [[R:%.*]] = fneg nsz float [[A]]
 ; CHECK-NEXT:    ret float [[R]]
 ;
-  %a = fadd float %x, bitcast (i32 ptrtoint (i16* @g to i32) to float)
+  %a = fadd float %x, bitcast (i32 ptrtoint (ptr @g to i32) to float)
   %r = fsub nsz float -0.0, %a
   ret float %r
 }
index 6cb2f21306a39075eb210c3e6d4bed12a0bfbb4f..3d53f451f9d03642b89035eaa0b9c9bef4cc5503 100644 (file)
@@ -6,7 +6,7 @@ define i1 @f(i1 %x) {
 ; CHECK-LABEL: @f(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %b = and i1 %x, icmp eq (i8* inttoptr (i32 1 to i8*), i8* inttoptr (i32 2 to i8*))
+  %b = and i1 %x, icmp eq (ptr inttoptr (i32 1 to ptr), ptr inttoptr (i32 2 to ptr))
   ret i1 %b
 }
 
@@ -14,7 +14,7 @@ define i1 @f_logical(i1 %x) {
 ; CHECK-LABEL: @f_logical(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %b = select i1 %x, i1 icmp eq (i8* inttoptr (i32 1 to i8*), i8* inttoptr (i32 2 to i8*)), i1 false
+  %b = select i1 %x, i1 icmp eq (ptr inttoptr (i32 1 to ptr), ptr inttoptr (i32 2 to ptr)), i1 false
   ret i1 %b
 }
 
@@ -22,7 +22,7 @@ define i32 @g(i32 %x) {
 ; CHECK-LABEL: @g(
 ; CHECK-NEXT:    ret i32 [[X:%.*]]
 ;
-  %b = add i32 %x, zext (i1 icmp eq (i8* inttoptr (i32 1000000 to i8*), i8* inttoptr (i32 2000000 to i8*)) to i32)
+  %b = add i32 %x, zext (i1 icmp eq (ptr inttoptr (i32 1000000 to ptr), ptr inttoptr (i32 2000000 to ptr)) to i32)
   ret i32 %b
 }
 
index 1efd43e1cf7a06bf2d8db8c99efd9d10e5f5caa1..6a7e780cf08febeeb6b404efb45d4da8cdf72e6e 100644 (file)
@@ -1,6 +1,6 @@
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-@g1 = common global i32* null, align 8
+@g1 = common global ptr null, align 8
 
 %struct.S1 = type { i32, float }
 %struct.S2 = type { float, i32 }
@@ -8,31 +8,30 @@
 ; Check that instcombine preserves metadata when it merges two loads.
 ;
 ; CHECK: return:
-; CHECK: load i32*, i32** %{{[a-z0-9.]+}}, align 8, !nonnull ![[EMPTYNODE:[0-9]+]]
-; CHECK: load i32, i32* %{{[a-z0-9.]+}}, align 4, !tbaa ![[TBAA:[0-9]+]], !range ![[RANGE:[0-9]+]], !invariant.load ![[EMPTYNODE:[0-9]+]], !alias.scope ![[ALIAS_SCOPE:[0-9]+]], !noalias ![[NOALIAS:[0-9]+]]
+; CHECK: load ptr, ptr %{{[a-z0-9.]+}}, align 8, !nonnull ![[EMPTYNODE:[0-9]+]]
+; CHECK: load i32, ptr %{{[a-z0-9.]+}}, align 4, !tbaa ![[TBAA:[0-9]+]], !range ![[RANGE:[0-9]+]], !invariant.load ![[EMPTYNODE:[0-9]+]], !alias.scope ![[ALIAS_SCOPE:[0-9]+]], !noalias ![[NOALIAS:[0-9]+]]
 
 ; Function Attrs: nounwind ssp uwtable
-define i32 @phi_load_metadata(%struct.S1* %s1, %struct.S2* %s2, i32 %c, i32** %x0, i32 **%x1) #0 {
+define i32 @phi_load_metadata(ptr %s1, ptr %s2, i32 %c, ptr %x0, ptr %x1) #0 {
 entry:
   %tobool = icmp eq i32 %c, 0
   br i1 %tobool, label %if.end, label %if.then
 
 if.then:                                          ; preds = %entry
-  %i = getelementptr inbounds %struct.S2, %struct.S2* %s2, i64 0, i32 1
-  %val = load i32, i32* %i, align 4, !tbaa !0, !alias.scope !13, !noalias !14, !invariant.load !17, !range !18
-  %p0 = load i32*, i32** %x0, align 8, !nonnull !17
+  %i = getelementptr inbounds %struct.S2, ptr %s2, i64 0, i32 1
+  %val = load i32, ptr %i, align 4, !tbaa !0, !alias.scope !13, !noalias !14, !invariant.load !17, !range !18
+  %p0 = load ptr, ptr %x0, align 8, !nonnull !17
   br label %return
 
 if.end:                                           ; preds = %entry
-  %i2 = getelementptr inbounds %struct.S1, %struct.S1* %s1, i64 0, i32 0
-  %val2 = load i32, i32* %i2, align 4, !tbaa !2, !alias.scope !15, !noalias !16, !invariant.load !17, !range !19
-  %p1 = load i32*, i32** %x1, align 8, !nonnull !17
+  %val2 = load i32, ptr %s1, align 4, !tbaa !2, !alias.scope !15, !noalias !16, !invariant.load !17, !range !19
+  %p1 = load ptr, ptr %x1, align 8, !nonnull !17
   br label %return
 
 return:                                           ; preds = %if.end, %if.then
   %retval = phi i32 [ %val, %if.then ], [ %val2, %if.end ]
-  %pval = phi i32* [ %p0, %if.then ], [ %p1, %if.end ]
-  store i32* %pval, i32** @g1, align 8
+  %pval = phi ptr [ %p0, %if.then ], [ %p1, %if.end ]
+  store ptr %pval, ptr @g1, align 8
   ret i32 %retval
 }
 
index da41d683ed2bb0ea24ecab33fb796c6fb4d6a386..1f4a4cc8f8f86de2e05b4698de8e62cdcb97266f 100644 (file)
@@ -2,22 +2,22 @@
 
 ; CHECK-NOT: select
 
-define void @foo(<4 x i32> *%A, <4 x i32> *%B, <4 x i32> *%C, <4 x i32> *%D,
-                 <4 x i32> *%E, <4 x i32> *%F, <4 x i32> *%G, <4 x i32> *%H,
-                 <4 x i32> *%I, <4 x i32> *%J, <4 x i32> *%K, <4 x i32> *%L,
-                 <4 x i32> *%M, <4 x i32> *%N, <4 x i32> *%O, <4 x i32> *%P,
-                 <4 x i32> *%Q, <4 x i32> *%R, <4 x i32> *%S, <4 x i32> *%T,
-                 <4 x i32> *%U, <4 x i32> *%V, <4 x i32> *%W, <4 x i32> *%X,
-                 <4 x i32> *%Y, <4 x i32> *%Z, <4 x i32> *%BA, <4 x i32> *%BB,
-                 <4 x i32> *%BC, <4 x i32> *%BD, <4 x i32> *%BE, <4 x i32> *%BF,
-                 <4 x i32> *%BG, <4 x i32> *%BH, <4 x i32> *%BI, <4 x i32> *%BJ,
-                 <4 x i32> *%BK, <4 x i32> *%BL, <4 x i32> *%BM, <4 x i32> *%BN,
-                 <4 x i32> *%BO, <4 x i32> *%BP, <4 x i32> *%BQ, <4 x i32> *%BR,
-                 <4 x i32> *%BS, <4 x i32> *%BT, <4 x i32> *%BU, <4 x i32> *%BV,
-                 <4 x i32> *%BW, <4 x i32> *%BX, <4 x i32> *%BY, <4 x i32> *%BZ,
-                 <4 x i32> *%CA, <4 x i32> *%CB, <4 x i32> *%CC, <4 x i32> *%CD,
-                 <4 x i32> *%CE, <4 x i32> *%CF, <4 x i32> *%CG, <4 x i32> *%CH,
-                 <4 x i32> *%CI, <4 x i32> *%CJ, <4 x i32> *%CK, <4 x i32> *%CL) {
+define void @foo(ptr %A, ptr %B, ptr %C, ptr %D,
+                 ptr %E, ptr %F, ptr %G, ptr %H,
+                 ptr %I, ptr %J, ptr %K, ptr %L,
+                 ptr %M, ptr %N, ptr %O, ptr %P,
+                 ptr %Q, ptr %R, ptr %S, ptr %T,
+                 ptr %U, ptr %V, ptr %W, ptr %X,
+                 ptr %Y, ptr %Z, ptr %BA, ptr %BB,
+                 ptr %BC, ptr %BD, ptr %BE, ptr %BF,
+                 ptr %BG, ptr %BH, ptr %BI, ptr %BJ,
+                 ptr %BK, ptr %BL, ptr %BM, ptr %BN,
+                 ptr %BO, ptr %BP, ptr %BQ, ptr %BR,
+                 ptr %BS, ptr %BT, ptr %BU, ptr %BV,
+                 ptr %BW, ptr %BX, ptr %BY, ptr %BZ,
+                 ptr %CA, ptr %CB, ptr %CC, ptr %CD,
+                 ptr %CE, ptr %CF, ptr %CG, ptr %CH,
+                 ptr %CI, ptr %CJ, ptr %CK, ptr %CL) {
  %a = select <4 x i1> <i1 false, i1 false, i1 false, i1 false>, <4 x i32> zeroinitializer, <4 x i32> <i32 9, i32 87, i32 57, i32 8>
  %b = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x i32> zeroinitializer, <4 x i32> <i32 44, i32 99, i32 49, i32 29>
  %c = select <4 x i1> <i1 false, i1 true, i1 false, i1 false>, <4 x i32> zeroinitializer, <4 x i32> <i32 15, i32 18, i32 53, i32 84>
@@ -82,69 +82,69 @@ define void @foo(<4 x i32> *%A, <4 x i32> *%B, <4 x i32> *%C, <4 x i32> *%D,
  %cj = select <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x i32> zeroinitializer, <4 x i32> zeroinitializer
  %ck = select <4 x i1> <i1 false, i1 true, i1 true, i1 true>, <4 x i32> zeroinitializer, <4 x i32> zeroinitializer
  %cl = select <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> zeroinitializer, <4 x i32> zeroinitializer
- store <4 x i32> %a, <4 x i32>* %A
- store <4 x i32> %b, <4 x i32>* %B
- store <4 x i32> %c, <4 x i32>* %C
- store <4 x i32> %d, <4 x i32>* %D
- store <4 x i32> %e, <4 x i32>* %E
- store <4 x i32> %f, <4 x i32>* %F
- store <4 x i32> %g, <4 x i32>* %G
- store <4 x i32> %h, <4 x i32>* %H
- store <4 x i32> %i, <4 x i32>* %I
- store <4 x i32> %j, <4 x i32>* %J
- store <4 x i32> %k, <4 x i32>* %K
- store <4 x i32> %l, <4 x i32>* %L
- store <4 x i32> %m, <4 x i32>* %M
- store <4 x i32> %n, <4 x i32>* %N
- store <4 x i32> %o, <4 x i32>* %O
- store <4 x i32> %p, <4 x i32>* %P
- store <4 x i32> %q, <4 x i32>* %Q
- store <4 x i32> %r, <4 x i32>* %R
- store <4 x i32> %s, <4 x i32>* %S
- store <4 x i32> %t, <4 x i32>* %T
- store <4 x i32> %u, <4 x i32>* %U
- store <4 x i32> %v, <4 x i32>* %V
- store <4 x i32> %w, <4 x i32>* %W
- store <4 x i32> %x, <4 x i32>* %X
- store <4 x i32> %y, <4 x i32>* %Y
- store <4 x i32> %z, <4 x i32>* %Z
- store <4 x i32> %ba, <4 x i32>* %BA
- store <4 x i32> %bb, <4 x i32>* %BB
- store <4 x i32> %bc, <4 x i32>* %BC
- store <4 x i32> %bd, <4 x i32>* %BD
- store <4 x i32> %be, <4 x i32>* %BE
- store <4 x i32> %bf, <4 x i32>* %BF
- store <4 x i32> %bg, <4 x i32>* %BG
- store <4 x i32> %bh, <4 x i32>* %BH
- store <4 x i32> %bi, <4 x i32>* %BI
- store <4 x i32> %bj, <4 x i32>* %BJ
- store <4 x i32> %bk, <4 x i32>* %BK
- store <4 x i32> %bl, <4 x i32>* %BL
- store <4 x i32> %bm, <4 x i32>* %BM
- store <4 x i32> %bn, <4 x i32>* %BN
- store <4 x i32> %bo, <4 x i32>* %BO
- store <4 x i32> %bp, <4 x i32>* %BP
- store <4 x i32> %bq, <4 x i32>* %BQ
- store <4 x i32> %br, <4 x i32>* %BR
- store <4 x i32> %bs, <4 x i32>* %BS
- store <4 x i32> %bt, <4 x i32>* %BT
- store <4 x i32> %bu, <4 x i32>* %BU
- store <4 x i32> %bv, <4 x i32>* %BV
- store <4 x i32> %bw, <4 x i32>* %BW
- store <4 x i32> %bx, <4 x i32>* %BX
- store <4 x i32> %by, <4 x i32>* %BY
- store <4 x i32> %bz, <4 x i32>* %BZ
- store <4 x i32> %ca, <4 x i32>* %CA
- store <4 x i32> %cb, <4 x i32>* %CB
- store <4 x i32> %cc, <4 x i32>* %CC
- store <4 x i32> %cd, <4 x i32>* %CD
- store <4 x i32> %ce, <4 x i32>* %CE
- store <4 x i32> %cf, <4 x i32>* %CF
- store <4 x i32> %cg, <4 x i32>* %CG
- store <4 x i32> %ch, <4 x i32>* %CH
- store <4 x i32> %ci, <4 x i32>* %CI
- store <4 x i32> %cj, <4 x i32>* %CJ
- store <4 x i32> %ck, <4 x i32>* %CK
- store <4 x i32> %cl, <4 x i32>* %CL
+ store <4 x i32> %a, ptr %A
+ store <4 x i32> %b, ptr %B
+ store <4 x i32> %c, ptr %C
+ store <4 x i32> %d, ptr %D
+ store <4 x i32> %e, ptr %E
+ store <4 x i32> %f, ptr %F
+ store <4 x i32> %g, ptr %G
+ store <4 x i32> %h, ptr %H
+ store <4 x i32> %i, ptr %I
+ store <4 x i32> %j, ptr %J
+ store <4 x i32> %k, ptr %K
+ store <4 x i32> %l, ptr %L
+ store <4 x i32> %m, ptr %M
+ store <4 x i32> %n, ptr %N
+ store <4 x i32> %o, ptr %O
+ store <4 x i32> %p, ptr %P
+ store <4 x i32> %q, ptr %Q
+ store <4 x i32> %r, ptr %R
+ store <4 x i32> %s, ptr %S
+ store <4 x i32> %t, ptr %T
+ store <4 x i32> %u, ptr %U
+ store <4 x i32> %v, ptr %V
+ store <4 x i32> %w, ptr %W
+ store <4 x i32> %x, ptr %X
+ store <4 x i32> %y, ptr %Y
+ store <4 x i32> %z, ptr %Z
+ store <4 x i32> %ba, ptr %BA
+ store <4 x i32> %bb, ptr %BB
+ store <4 x i32> %bc, ptr %BC
+ store <4 x i32> %bd, ptr %BD
+ store <4 x i32> %be, ptr %BE
+ store <4 x i32> %bf, ptr %BF
+ store <4 x i32> %bg, ptr %BG
+ store <4 x i32> %bh, ptr %BH
+ store <4 x i32> %bi, ptr %BI
+ store <4 x i32> %bj, ptr %BJ
+ store <4 x i32> %bk, ptr %BK
+ store <4 x i32> %bl, ptr %BL
+ store <4 x i32> %bm, ptr %BM
+ store <4 x i32> %bn, ptr %BN
+ store <4 x i32> %bo, ptr %BO
+ store <4 x i32> %bp, ptr %BP
+ store <4 x i32> %bq, ptr %BQ
+ store <4 x i32> %br, ptr %BR
+ store <4 x i32> %bs, ptr %BS
+ store <4 x i32> %bt, ptr %BT
+ store <4 x i32> %bu, ptr %BU
+ store <4 x i32> %bv, ptr %BV
+ store <4 x i32> %bw, ptr %BW
+ store <4 x i32> %bx, ptr %BX
+ store <4 x i32> %by, ptr %BY
+ store <4 x i32> %bz, ptr %BZ
+ store <4 x i32> %ca, ptr %CA
+ store <4 x i32> %cb, ptr %CB
+ store <4 x i32> %cc, ptr %CC
+ store <4 x i32> %cd, ptr %CD
+ store <4 x i32> %ce, ptr %CE
+ store <4 x i32> %cf, ptr %CF
+ store <4 x i32> %cg, ptr %CG
+ store <4 x i32> %ch, ptr %CH
+ store <4 x i32> %ci, ptr %CI
+ store <4 x i32> %cj, ptr %CJ
+ store <4 x i32> %ck, ptr %CK
+ store <4 x i32> %cl, ptr %CL
  ret void
 }
index 29f13d33ff233fb3b481adc67b76dbc64f8d2c76..37eef7329de842bdadda342ab0e8d14a2ab43c0d 100644 (file)
@@ -8,8 +8,8 @@ bb30:
        %s0 = phi i64 [ 0, %bb8 ], [ %r21, %bb30 ]
        %l0 = phi i64 [ -2222, %bb8 ], [ %r23, %bb30 ]
        %r2 = add i64 %s0, %B
-       %r3 = inttoptr i64 %r2 to <2 x double>*
-       %r4 = load <2 x double>, <2 x double>* %r3, align 8
+       %r3 = inttoptr i64 %r2 to ptr
+       %r4 = load <2 x double>, ptr %r3, align 8
        %r6 = bitcast <2 x double> %r4 to <2 x i64>
        %r7 = bitcast <2 x double> zeroinitializer to <2 x i64>
        %r8 = insertelement <2 x i64> poison, i64 9223372036854775807, i32 0
@@ -21,8 +21,8 @@ bb30:
        %r14 = or <2 x i64> %r12, %r13
        %r15 = bitcast <2 x i64> %r14 to <2 x double>
        %r18 = add i64 %s0, %A
-       %r19 = inttoptr i64 %r18 to <2 x double>*
-       store <2 x double> %r15, <2 x double>* %r19, align 8
+       %r19 = inttoptr i64 %r18 to ptr
+       store <2 x double> %r15, ptr %r19, align 8
        %r21 = add i64 16, %s0
        %r23 = add i64 1, %l0
        %r25 = icmp slt i64 %r23, 0
index 35f8a58a9f92bf735a80b0a96b16e2f09e206649..c2d566d71ea44a10f968a9d4f9e674aa7fea8336 100644 (file)
@@ -8,8 +8,8 @@ bb30:
        %s0 = phi i64 [ 0, %bb8 ], [ %r21, %bb30 ]
        %l0 = phi i64 [ -2222, %bb8 ], [ %r23, %bb30 ]
        %r2 = add i64 %s0, %B
-       %r3 = inttoptr i64 %r2 to <2 x double>*
-       %r4 = load <2 x double>, <2 x double>* %r3, align 8
+       %r3 = inttoptr i64 %r2 to ptr
+       %r4 = load <2 x double>, ptr %r3, align 8
        %r6 = bitcast <2 x double> %r4 to <2 x i64>
        %r7 = bitcast <2 x double> zeroinitializer to <2 x i64>
        %r8 = insertelement <2 x i64> undef, i64 9223372036854775807, i32 0
@@ -21,8 +21,8 @@ bb30:
        %r14 = or <2 x i64> %r12, %r13
        %r15 = bitcast <2 x i64> %r14 to <2 x double>
        %r18 = add i64 %s0, %A
-       %r19 = inttoptr i64 %r18 to <2 x double>*
-       store <2 x double> %r15, <2 x double>* %r19, align 8
+       %r19 = inttoptr i64 %r18 to ptr
+       store <2 x double> %r15, ptr %r19, align 8
        %r21 = add i64 16, %s0
        %r23 = add i64 1, %l0
        %r25 = icmp slt i64 %r23, 0
index 03baf4b518b7b8202dc05e02375df96169b71781..52cf269ecfdae92289d673b51dc1e716ea730cf5 100644 (file)
@@ -22,5 +22,5 @@ define ptr @gep_constexpr_inttoptr() {
 ; CHECK-LABEL: @gep_constexpr_inttoptr(
 ; CHECK-NEXT:    ret ptr getelementptr (i8, ptr inttoptr (i64 mul (i64 ptrtoint (ptr @g to i64), i64 2) to ptr), i64 20)
 ;
-  ret ptr getelementptr([16 x i16], ptr inttoptr (i64 mul (i64 ptrtoint ([16 x i16]* @g to i64), i64 2) to ptr), i64 0, i64 10)
+  ret ptr getelementptr([16 x i16], ptr inttoptr (i64 mul (i64 ptrtoint (ptr @g to i64), i64 2) to ptr), i64 0, i64 10)
 }
index 461a55d9086c438364961e2278ae118b155c7ff3..b0e7002ea4d40bab96afd726d1bdf43205bb8705 100644 (file)
@@ -5,8 +5,8 @@
 ; RUN: opt < %s -passes='require<profile-summary>,function(instcombine)' -pgso -S | FileCheck %s -check-prefix=PGSO
 ; RUN: opt < %s -instcombine -pgso=false -S | FileCheck %s -check-prefix=NPGSO
 
-%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i32, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i32, i32, [40 x i8] }
-%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }
+%struct._IO_FILE = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i16, i8, [1 x i8], ptr, i64, ptr, ptr, ptr, ptr, i32, i32, [40 x i8] }
+%struct._IO_marker = type { ptr, ptr, i32 }
 
 @.str = private unnamed_addr constant [10 x i8] c"mylog.txt\00", align 1
 @.str.1 = private unnamed_addr constant [2 x i8] c"a\00", align 1
@@ -18,13 +18,13 @@ entry:
 ; CHECK-NOT: call i64 @fwrite
 ; CHECK: call i32 @fputs
 
-  %call = tail call %struct._IO_FILE* @fopen(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i32 0, i32 0)) #2
-  %call1 = tail call i32 @fputs(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.2, i32 0, i32 0), %struct._IO_FILE* %call) #2
+  %call = tail call ptr @fopen(ptr @.str, ptr @.str.1) #2
+  %call1 = tail call i32 @fputs(ptr @.str.2, ptr %call) #2
   ret i32 0
 }
 
-declare noalias %struct._IO_FILE* @fopen(i8* nocapture readonly, i8* nocapture readonly) local_unnamed_addr #1
-declare i32 @fputs(i8* nocapture readonly, %struct._IO_FILE* nocapture) local_unnamed_addr #1
+declare noalias ptr @fopen(ptr nocapture readonly, ptr nocapture readonly) local_unnamed_addr #1
+declare i32 @fputs(ptr nocapture readonly, ptr nocapture) local_unnamed_addr #1
 
 attributes #0 = { nounwind optsize }
 attributes #1 = { nounwind optsize  }
@@ -38,8 +38,8 @@ entry:
 ; NPGSO: call i64 @fwrite
 ; NPGSO-NOT: call i32 @fputs
 
-  %call = tail call %struct._IO_FILE* @fopen(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i32 0, i32 0)) #2
-  %call1 = tail call i32 @fputs(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.2, i32 0, i32 0), %struct._IO_FILE* %call) #2
+  %call = tail call ptr @fopen(ptr @.str, ptr @.str.1) #2
+  %call1 = tail call i32 @fputs(ptr @.str.2, ptr %call) #2
   ret i32 0
 }
 
index 68ad840ebe85cacf3c5d062d6c4456eb6c845fcd..7221dc14dfaf47695a6dd9b6305caeacb2c6e6be 100644 (file)
@@ -2,7 +2,7 @@
 ; Check that no freeze instruction gets inserted before landingpad in a basic block
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-define i32 @propagate_freeze_in_landingpad() personality i32* ()* null {
+define i32 @propagate_freeze_in_landingpad() personality ptr null {
 ; CHECK-LABEL: @propagate_freeze_in_landingpad(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[INVOKE_BB1:%.*]]
@@ -18,7 +18,7 @@ define i32 @propagate_freeze_in_landingpad() personality i32* ()* null {
 ; CHECK-NEXT:    br label [[INVOKE_BB1]]
 ; CHECK:       exceptional_return:
 ; CHECK-NEXT:    [[PHI:%.*]] = phi i32 [ [[X]], [[INVOKE_BB1]] ], [ 0, [[INVOKE_BB2]] ]
-; CHECK-NEXT:    [[LANDING_PAD:%.*]] = landingpad { i8*, i32 }
+; CHECK-NEXT:    [[LANDING_PAD:%.*]] = landingpad { ptr, i32 }
 ; CHECK-NEXT:    cleanup
 ; CHECK-NEXT:    [[FR:%.*]] = freeze i32 [[PHI]]
 ; CHECK-NEXT:    [[RES:%.*]] = shl i32 [[FR]], 1
@@ -42,7 +42,7 @@ normal_return:                                ; preds = %invoke.bb2
 
 exceptional_return:                             ; preds = %invoke.bb2, %invoke.bb1
   %phi = phi i32 [ %x, %invoke.bb1 ], [ 0, %invoke.bb2 ]
-  %landing_pad = landingpad { i8*, i32 }
+  %landing_pad = landingpad { ptr, i32 }
   cleanup
   %fr = freeze i32 %phi
   %res = add i32 %fr, %phi
index 207179bb2c098ee12738a1950704bc5bd97f6d30..2b8f56b504bb2f15a1bcffd6bf0e936ec1d63e68 100644 (file)
@@ -187,7 +187,7 @@ define i32 @one_constexpr(i8 %cond, i32 %x) {
 ; CHECK-NEXT:    i8 1, label [[C:%.*]]
 ; CHECK-NEXT:    ]
 ; CHECK:       A:
-; CHECK-NEXT:    [[PHI_FR:%.*]] = freeze i32 ptrtoint (i8* getelementptr inbounds (i8, i8* @glb, i64 2) to i32)
+; CHECK-NEXT:    [[PHI_FR:%.*]] = freeze i32 ptrtoint (ptr getelementptr inbounds (i8, ptr @glb, i64 2) to i32)
 ; CHECK-NEXT:    br label [[D:%.*]]
 ; CHECK:       B:
 ; CHECK-NEXT:    br label [[D]]
@@ -208,7 +208,7 @@ B:
 C:
   br label %D
 D:
-  %y = phi i32 [ptrtoint (i8* getelementptr inbounds (i8, i8* @glb, i64 2) to i32), %A], [32, %B], [0, %C]
+  %y = phi i32 [ptrtoint (ptr getelementptr inbounds (i8, ptr @glb, i64 2) to i32), %A], [32, %B], [0, %C]
   %y.fr = freeze i32 %y
   ret i32 %y.fr
 }
index 839763df51a3a766a265dea6d811a2cce0cfa644..b84fe5f9a7bcd53c9124cebf8b279ba29854b140 100644 (file)
@@ -29,7 +29,7 @@ define i32 @and_freeze_undef(i32 %x) {
 }
 
 declare void @use_i32(i32)
-declare void @use_p32(i32*)
+declare void @use_p32(ptr)
 
 define i32 @and_freeze_undef_multipleuses(i32 %x) {
 ; CHECK-LABEL: @and_freeze_undef_multipleuses(
@@ -113,15 +113,15 @@ define i32 @early_freeze_test1(i32 %x, i32 %y) {
   ret i32 %v3.fr
 }
 
-define i1 @early_freeze_test2(i32* %ptr) {
+define i1 @early_freeze_test2(ptr %ptr) {
 ; CHECK-LABEL: @early_freeze_test2(
-; CHECK-NEXT:    [[V1:%.*]] = load i32, i32* [[PTR:%.*]], align 4
+; CHECK-NEXT:    [[V1:%.*]] = load i32, ptr [[PTR:%.*]], align 4
 ; CHECK-NEXT:    [[V1_FR:%.*]] = freeze i32 [[V1]]
 ; CHECK-NEXT:    [[V2:%.*]] = and i32 [[V1_FR]], 1
 ; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 [[V2]], 0
 ; CHECK-NEXT:    ret i1 [[COND]]
 ;
-  %v1 = load i32, i32* %ptr
+  %v1 = load i32, ptr %ptr
   %v2 = and i32 %v1, 1
   %cond = icmp eq i32 %v2, 0
   %cond.fr = freeze i1 %cond
@@ -162,7 +162,7 @@ define void @freeze_dominated_uses_test2(i32 %v) {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 4
 ; CHECK-NEXT:    [[V_FR:%.*]] = freeze i32 [[V:%.*]]
-; CHECK-NEXT:    call void @use_p32(i32* nonnull [[A]])
+; CHECK-NEXT:    call void @use_p32(ptr nonnull [[A]])
 ; CHECK-NEXT:    call void @use_i32(i32 [[V_FR]])
 ; CHECK-NEXT:    [[COND:%.*]] = icmp eq i32 [[V_FR]], 0
 ; CHECK-NEXT:    br i1 [[COND]], label [[BB0:%.*]], label [[BB1:%.*]]
@@ -178,7 +178,7 @@ define void @freeze_dominated_uses_test2(i32 %v) {
 ;
 entry:
   %a = alloca i32
-  call void @use_p32(i32* %a)
+  call void @use_p32(ptr %a)
   call void @use_i32(i32 %v)
   %cond = icmp eq i32 %v, 0
   br i1 %cond, label %bb0, label %bb1
@@ -234,7 +234,7 @@ end:
 
 declare i32 @__CxxFrameHandler3(...)
 
-define void @freeze_dominated_uses_catchswitch(i1 %c, i32 %x) personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) {
+define void @freeze_dominated_uses_catchswitch(i1 %c, i32 %x) personality ptr @__CxxFrameHandler3 {
 ; CHECK-LABEL: @freeze_dominated_uses_catchswitch(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
@@ -248,12 +248,12 @@ define void @freeze_dominated_uses_catchswitch(i1 %c, i32 %x) personality i8* bi
 ; CHECK-NEXT:    [[PHI:%.*]] = phi i32 [ 0, [[IF_THEN]] ], [ [[X:%.*]], [[IF_ELSE]] ]
 ; CHECK-NEXT:    [[CS:%.*]] = catchswitch within none [label [[CATCH:%.*]], label %catch2] unwind to caller
 ; CHECK:       catch:
-; CHECK-NEXT:    [[CP:%.*]] = catchpad within [[CS]] [i8* null, i32 64, i8* null]
+; CHECK-NEXT:    [[CP:%.*]] = catchpad within [[CS]] [ptr null, i32 64, ptr null]
 ; CHECK-NEXT:    [[PHI_FREEZE:%.*]] = freeze i32 [[PHI]]
 ; CHECK-NEXT:    call void @use_i32(i32 [[PHI_FREEZE]]) [ "funclet"(token [[CP]]) ]
 ; CHECK-NEXT:    unreachable
 ; CHECK:       catch2:
-; CHECK-NEXT:    [[CP2:%.*]] = catchpad within [[CS]] [i8* null, i32 64, i8* null]
+; CHECK-NEXT:    [[CP2:%.*]] = catchpad within [[CS]] [ptr null, i32 64, ptr null]
 ; CHECK-NEXT:    call void @use_i32(i32 [[PHI]]) [ "funclet"(token [[CP2]]) ]
 ; CHECK-NEXT:    unreachable
 ; CHECK:       cleanup:
@@ -275,13 +275,13 @@ catch.dispatch:
   %cs = catchswitch within none [label %catch, label %catch2] unwind to caller
 
 catch:
-  %cp = catchpad within %cs [i8* null, i32 64, i8* null]
+  %cp = catchpad within %cs [ptr null, i32 64, ptr null]
   %phi.freeze = freeze i32 %phi
   call void @use_i32(i32 %phi.freeze) [ "funclet"(token %cp) ]
   unreachable
 
 catch2:
-  %cp2 = catchpad within %cs [i8* null, i32 64, i8* null]
+  %cp2 = catchpad within %cs [ptr null, i32 64, ptr null]
   call void @use_i32(i32 %phi) [ "funclet"(token %cp2) ]
   unreachable
 
@@ -380,7 +380,7 @@ join:
   ret i32 %phi
 }
 
-define i32 @freeze_invoke_use_in_phi(i1 %c) personality i8* undef {
+define i32 @freeze_invoke_use_in_phi(i1 %c) personality ptr undef {
 ; CHECK-LABEL: @freeze_invoke_use_in_phi(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[X:%.*]] = invoke i32 @get_i32()
@@ -412,7 +412,7 @@ invoke.unwind:
   unreachable
 }
 
-define i32 @freeze_invoke_use_after_phi(i1 %c) personality i8* undef {
+define i32 @freeze_invoke_use_after_phi(i1 %c) personality ptr undef {
 ; CHECK-LABEL: @freeze_invoke_use_after_phi(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[X:%.*]] = invoke i32 @get_i32()
@@ -643,15 +643,15 @@ define i32 @propagate_drop_lshr2(i32 %arg, i32 %unknown) {
   ret i32 %v1.fr
 }
 
-define i8* @propagate_drop_gep1(i8* %arg) {
+define ptr @propagate_drop_gep1(ptr %arg) {
 ; CHECK-LABEL: @propagate_drop_gep1(
-; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze i8* [[ARG:%.*]]
-; CHECK-NEXT:    [[V1:%.*]] = getelementptr i8, i8* [[ARG_FR]], i64 16
-; CHECK-NEXT:    ret i8* [[V1]]
+; CHECK-NEXT:    [[ARG_FR:%.*]] = freeze ptr [[ARG:%.*]]
+; CHECK-NEXT:    [[V1:%.*]] = getelementptr i8, ptr [[ARG_FR]], i64 16
+; CHECK-NEXT:    ret ptr [[V1]]
 ;
-  %v1 = getelementptr inbounds i8, i8* %arg, i64 16
-  %v1.fr = freeze i8* %v1
-  ret i8* %v1.fr
+  %v1 = getelementptr inbounds i8, ptr %arg, i64 16
+  %v1.fr = freeze ptr %v1
+  ret ptr %v1.fr
 }
 
 define float @propagate_drop_fneg(float %arg) {
@@ -850,15 +850,15 @@ exit:                                             ; preds = %loop
   ret void
 }
 
-define void @fold_phi_gep(i8* %init, i8* %end) {
+define void @fold_phi_gep(ptr %init, ptr %end) {
 ; CHECK-LABEL: @fold_phi_gep(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[PHI_FR:%.*]] = freeze i8* [[INIT:%.*]]
+; CHECK-NEXT:    [[PHI_FR:%.*]] = freeze ptr [[INIT:%.*]]
 ; CHECK-NEXT:    br label [[LOOP:%.*]]
 ; CHECK:       loop:
-; CHECK-NEXT:    [[I:%.*]] = phi i8* [ [[PHI_FR]], [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]
-; CHECK-NEXT:    [[I_NEXT]] = getelementptr i8, i8* [[I]], i64 1
-; CHECK-NEXT:    [[COND:%.*]] = icmp eq i8* [[I_NEXT]], [[END:%.*]]
+; CHECK-NEXT:    [[I:%.*]] = phi ptr [ [[PHI_FR]], [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]
+; CHECK-NEXT:    [[I_NEXT]] = getelementptr i8, ptr [[I]], i64 1
+; CHECK-NEXT:    [[COND:%.*]] = icmp eq ptr [[I_NEXT]], [[END:%.*]]
 ; CHECK-NEXT:    br i1 [[COND]], label [[LOOP]], label [[EXIT:%.*]]
 ; CHECK:       exit:
 ; CHECK-NEXT:    ret void
@@ -867,10 +867,10 @@ entry:
   br label %loop
 
 loop:                                             ; preds = %loop, %entry
-  %i = phi i8* [ %init, %entry ], [ %i.next, %loop ]
-  %i.fr = freeze i8* %i
-  %i.next = getelementptr i8, i8* %i.fr, i64 1
-  %cond = icmp eq i8* %i.next, %end
+  %i = phi ptr [ %init, %entry ], [ %i.next, %loop ]
+  %i.fr = freeze ptr %i
+  %i.next = getelementptr i8, ptr %i.fr, i64 1
+  %cond = icmp eq ptr %i.next, %end
   br i1 %cond, label %loop, label %exit
 
 exit:                                             ; preds = %loop
@@ -973,7 +973,7 @@ exit:
   ret void
 }
 
-define void @fold_phi_invoke_start_value(i32 %n) personality i8* undef {
+define void @fold_phi_invoke_start_value(i32 %n) personality ptr undef {
 ; CHECK-LABEL: @fold_phi_invoke_start_value(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[INIT:%.*]] = invoke i32 @get_i32()
@@ -1010,7 +1010,7 @@ exit:
   ret void
 }
 
-define void @fold_phi_invoke_noundef_start_value(i32 %n) personality i8* undef {
+define void @fold_phi_invoke_noundef_start_value(i32 %n) personality ptr undef {
 ; CHECK-LABEL: @fold_phi_invoke_noundef_start_value(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[INIT:%.*]] = invoke noundef i32 @get_i32()
@@ -1046,34 +1046,34 @@ exit:
   ret void
 }
 
-define i8* @freeze_load_noundef(i8** %ptr) {
+define ptr @freeze_load_noundef(ptr %ptr) {
 ; CHECK-LABEL: @freeze_load_noundef(
-; CHECK-NEXT:    [[P:%.*]] = load i8*, i8** [[PTR:%.*]], align 8, !noundef !0
-; CHECK-NEXT:    ret i8* [[P]]
+; CHECK-NEXT:    [[P:%.*]] = load ptr, ptr [[PTR:%.*]], align 8, !noundef !0
+; CHECK-NEXT:    ret ptr [[P]]
 ;
-  %p = load i8*, i8** %ptr, !noundef !0
-  %p.fr = freeze i8* %p
-  ret i8* %p.fr
+  %p = load ptr, ptr %ptr, !noundef !0
+  %p.fr = freeze ptr %p
+  ret ptr %p.fr
 }
 
-define i8* @freeze_load_dereferenceable(i8** %ptr) {
+define ptr @freeze_load_dereferenceable(ptr %ptr) {
 ; CHECK-LABEL: @freeze_load_dereferenceable(
-; CHECK-NEXT:    [[P:%.*]] = load i8*, i8** [[PTR:%.*]], align 8, !dereferenceable !1
-; CHECK-NEXT:    ret i8* [[P]]
+; CHECK-NEXT:    [[P:%.*]] = load ptr, ptr [[PTR:%.*]], align 8, !dereferenceable !1
+; CHECK-NEXT:    ret ptr [[P]]
 ;
-  %p = load i8*, i8** %ptr, !dereferenceable !1
-  %p.fr = freeze i8* %p
-  ret i8* %p.fr
+  %p = load ptr, ptr %ptr, !dereferenceable !1
+  %p.fr = freeze ptr %p
+  ret ptr %p.fr
 }
 
-define i8* @freeze_load_dereferenceable_or_null(i8** %ptr) {
+define ptr @freeze_load_dereferenceable_or_null(ptr %ptr) {
 ; CHECK-LABEL: @freeze_load_dereferenceable_or_null(
-; CHECK-NEXT:    [[P:%.*]] = load i8*, i8** [[PTR:%.*]], align 8, !dereferenceable_or_null !1
-; CHECK-NEXT:    ret i8* [[P]]
+; CHECK-NEXT:    [[P:%.*]] = load ptr, ptr [[PTR:%.*]], align 8, !dereferenceable_or_null !1
+; CHECK-NEXT:    ret ptr [[P]]
 ;
-  %p = load i8*, i8** %ptr, !dereferenceable_or_null !1
-  %p.fr = freeze i8* %p
-  ret i8* %p.fr
+  %p = load ptr, ptr %ptr, !dereferenceable_or_null !1
+  %p.fr = freeze ptr %p
+  ret ptr %p.fr
 }
 
 !0 = !{}
index c8f36c712f343e9306be129293dc261d117c0ef0..7d3f3948511d10ee372649cf90637c4c5b46311e 100644 (file)
@@ -388,10 +388,10 @@ define i33 @fshr_undef_shift_amount(i33 %x, i33 %y) {
 
 define i33 @fshr_constant_shift_amount_modulo_bitwidth_constexpr(i33 %x, i33 %y) {
 ; CHECK-LABEL: @fshr_constant_shift_amount_modulo_bitwidth_constexpr(
-; CHECK-NEXT:    [[R:%.*]] = call i33 @llvm.fshr.i33(i33 [[X:%.*]], i33 [[Y:%.*]], i33 ptrtoint (i8* @external_global to i33))
+; CHECK-NEXT:    [[R:%.*]] = call i33 @llvm.fshr.i33(i33 [[X:%.*]], i33 [[Y:%.*]], i33 ptrtoint (ptr @external_global to i33))
 ; CHECK-NEXT:    ret i33 [[R]]
 ;
-  %shamt = ptrtoint i8* @external_global to i33
+  %shamt = ptrtoint ptr @external_global to i33
   %r = call i33 @llvm.fshr.i33(i33 %x, i33 %y, i33 %shamt)
   ret i33 %r
 }
@@ -416,11 +416,11 @@ define <2 x i31> @fshl_constant_shift_amount_modulo_bitwidth_vec(<2 x i31> %x, <
 
 define <2 x i31> @fshl_constant_shift_amount_modulo_bitwidth_vec_const_expr(<2 x i31> %x, <2 x i31> %y) {
 ; CHECK-LABEL: @fshl_constant_shift_amount_modulo_bitwidth_vec_const_expr(
-; CHECK-NEXT:    [[R:%.*]] = call <2 x i31> @llvm.fshl.v2i31(<2 x i31> [[X:%.*]], <2 x i31> [[Y:%.*]], <2 x i31> <i31 34, i31 ptrtoint (i8* @external_global to i31)>)
+; CHECK-NEXT:    [[R:%.*]] = call <2 x i31> @llvm.fshl.v2i31(<2 x i31> [[X:%.*]], <2 x i31> [[Y:%.*]], <2 x i31> <i31 34, i31 ptrtoint (ptr @external_global to i31)>)
 ; CHECK-NEXT:    ret <2 x i31> [[R]]
 ;
-  %shamt = ptrtoint i8* @external_global to i31
-  %r = call <2 x i31> @llvm.fshl.v2i31(<2 x i31> %x, <2 x i31> %y, <2 x i31> <i31 34, i31 ptrtoint (i8* @external_global to i31)>)
+  %shamt = ptrtoint ptr @external_global to i31
+  %r = call <2 x i31> @llvm.fshl.v2i31(<2 x i31> %x, <2 x i31> %y, <2 x i31> <i31 34, i31 ptrtoint (ptr @external_global to i31)>)
   ret <2 x i31> %r
 }
 
index 584e00725abb9737bee2a0240b598ed2ac358728..6e13c33b126d59b7daad1454d10ed2cb8a955df0 100644 (file)
@@ -397,10 +397,10 @@ define float @unary_neg_trunc_op1_extra_uses(double %a, float %b) {
 
 define float @PR37605(float %conv) {
 ; CHECK-LABEL: @PR37605(
-; CHECK-NEXT:    [[SUB:%.*]] = fsub float [[CONV:%.*]], bitcast (i32 ptrtoint (i16* @b to i32) to float)
+; CHECK-NEXT:    [[SUB:%.*]] = fsub float [[CONV:%.*]], bitcast (i32 ptrtoint (ptr @b to i32) to float)
 ; CHECK-NEXT:    ret float [[SUB]]
 ;
-  %sub = fsub float %conv, bitcast (i32 ptrtoint (i16* @b to i32) to float)
+  %sub = fsub float %conv, bitcast (i32 ptrtoint (ptr @b to i32) to float)
   ret float %sub
 }
 
index a0ef812da037bca17dc94cd9ba3c6e708dcb7ae8..2db0c719610338ca878f32b17c18d6bd9cfb2e57 100644 (file)
@@ -9,48 +9,43 @@ target datalayout = "e-p:64:64:64"
 @str = constant [1 x i8] zeroinitializer
 @empty = constant [0 x i8] zeroinitializer
 
-declare i64 @fwrite(i8*, i64, i64, %FILE *)
+declare i64 @fwrite(ptr, i64, i64, ptr)
 
 ; Check fwrite(S, 1, 1, fp) -> fputc(S[0], fp).
 
-define void @test_simplify1(%FILE* %fp) {
+define void @test_simplify1(ptr %fp) {
 ; CHECK-LABEL: @test_simplify1(
-  %str = getelementptr inbounds [1 x i8], [1 x i8]* @str, i64 0, i64 0
-  call i64 @fwrite(i8* %str, i64 1, i64 1, %FILE* %fp)
-; CHECK-NEXT: call i32 @fputc(i32 0, %FILE* %fp)
+  call i64 @fwrite(ptr @str, i64 1, i64 1, ptr %fp)
+; CHECK-NEXT: call i32 @fputc(i32 0, ptr %fp)
   ret void
 ; CHECK-NEXT: ret void
 }
 
-define void @test_simplify2(%FILE* %fp) {
+define void @test_simplify2(ptr %fp) {
 ; CHECK-LABEL: @test_simplify2(
-  %str = getelementptr inbounds [0 x i8], [0 x i8]* @empty, i64 0, i64 0
-  call i64 @fwrite(i8* %str, i64 1, i64 0, %FILE* %fp)
+  call i64 @fwrite(ptr @empty, i64 1, i64 0, ptr %fp)
   ret void
 ; CHECK-NEXT: ret void
 }
 
-define void @test_simplify3(%FILE* %fp) {
+define void @test_simplify3(ptr %fp) {
 ; CHECK-LABEL: @test_simplify3(
-  %str = getelementptr inbounds [0 x i8], [0 x i8]* @empty, i64 0, i64 0
-  call i64 @fwrite(i8* %str, i64 0, i64 1, %FILE* %fp)
+  call i64 @fwrite(ptr @empty, i64 0, i64 1, ptr %fp)
   ret void
 ; CHECK-NEXT: ret void
 }
 
-define i64 @test_no_simplify1(%FILE* %fp) {
+define i64 @test_no_simplify1(ptr %fp) {
 ; CHECK-LABEL: @test_no_simplify1(
-  %str = getelementptr inbounds [1 x i8], [1 x i8]* @str, i64 0, i64 0
-  %ret = call i64 @fwrite(i8* %str, i64 1, i64 1, %FILE* %fp)
+  %ret = call i64 @fwrite(ptr @str, i64 1, i64 1, ptr %fp)
 ; CHECK-NEXT: call i64 @fwrite
   ret i64 %ret
 ; CHECK-NEXT: ret i64 %ret
 }
 
-define void @test_no_simplify2(%FILE* %fp, i64 %size) {
+define void @test_no_simplify2(ptr %fp, i64 %size) {
 ; CHECK-LABEL: @test_no_simplify2(
-  %str = getelementptr inbounds [1 x i8], [1 x i8]* @str, i64 0, i64 0
-  call i64 @fwrite(i8* %str, i64 %size, i64 1, %FILE* %fp)
+  call i64 @fwrite(ptr @str, i64 %size, i64 1, ptr %fp)
 ; CHECK-NEXT: call i64 @fwrite
   ret void
 ; CHECK-NEXT: ret void
index b338b3785e209d2cff014e6ed8d58a3d98ba87d5..fb7344a97a436ee64fd259a056bdc3440bcb4697 100644 (file)
@@ -10,8 +10,8 @@ entry:
 
 unreach:
     ; CHECK: token undef
-    %token_call = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token undef, i32 0, i32 0)
+    %token_call = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token undef, i32 0, i32 0)
     ret i32 1
 }
 
-declare i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token, i32, i32)
+declare ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token, i32, i32)
index aa4429848809d41dec0a3cd1e114b5fb6876f425..24b7fd0ed2d26cf3d298cd35d40af3ef0e466bba 100644 (file)
@@ -6,34 +6,34 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 ; then the return attribute of gc.relocate is dereferenceable(N).
 
 declare zeroext i1 @return_i1()
-declare token @llvm.experimental.gc.statepoint.p0f_i1f(i64, i32, i1 ()*, i32, i32, ...)
-declare i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token, i32, i32)
+declare token @llvm.experimental.gc.statepoint.p0(i64, i32, ptr, i32, i32, ...)
+declare ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token, i32, i32)
 
-define i32 @explicit_nonnull(i32 addrspace(1)* nonnull %dparam) gc "statepoint-example" {
+define i32 @explicit_nonnull(ptr addrspace(1) nonnull %dparam) gc "statepoint-example" {
 ; Checks that a nonnull pointer
 ; CHECK-LABEL: @explicit_nonnull
 ; CHECK: ret i32 1
 entry:
-    %load = load i32, i32 addrspace(1)* %dparam
-    %tok = tail call token (i64, i32, i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i64 0, i32 0, i1 ()* elementtype(i1 ()) @return_i1, i32 0, i32 0, i32 0, i32 0) ["gc-live"(i32 addrspace(1)* %dparam)]
-    %relocate = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %tok,  i32 0, i32 0)
-    %cmp = icmp eq i32 addrspace(1)* %relocate, null
+    %load = load i32, ptr addrspace(1) %dparam
+    %tok = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(i1 ()) @return_i1, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) %dparam)]
+    %relocate = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %tok,  i32 0, i32 0)
+    %cmp = icmp eq ptr addrspace(1) %relocate, null
     %ret_val = select i1 %cmp, i32 0, i32 1
     ret i32 %ret_val
 }
 
-define i32 @implicit_nonnull(i32 addrspace(1)* %dparam) gc "statepoint-example" {
+define i32 @implicit_nonnull(ptr addrspace(1) %dparam) gc "statepoint-example" {
 ; Checks that a nonnull pointer
 ; CHECK-LABEL: @implicit_nonnull
 ; CHECK: ret i32 1
 entry:
-    %cond = icmp eq i32 addrspace(1)* %dparam, null
+    %cond = icmp eq ptr addrspace(1) %dparam, null
     br i1 %cond, label %no_gc, label %gc
 gc:
-    %load = load i32, i32 addrspace(1)* %dparam
-    %tok = tail call token (i64, i32, i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i64 0, i32 0, i1 ()* elementtype(i1 ()) @return_i1, i32 0, i32 0, i32 0, i32 0) ["gc-live"(i32 addrspace(1)* %dparam)]
-    %relocate = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %tok,  i32 0, i32 0)
-    %cmp = icmp eq i32 addrspace(1)* %relocate, null
+    %load = load i32, ptr addrspace(1) %dparam
+    %tok = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(i1 ()) @return_i1, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) %dparam)]
+    %relocate = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %tok,  i32 0, i32 0)
+    %cmp = icmp eq ptr addrspace(1) %relocate, null
     %ret_val = select i1 %cmp, i32 0, i32 1
     ret i32 %ret_val
 no_gc:
@@ -42,29 +42,27 @@ no_gc:
 
 
 ; Make sure we don't crash when processing vectors
-define <2 x i8 addrspace(1)*> @vector(<2 x i8 addrspace(1)*> %obj) gc "statepoint-example" {
+define <2 x ptr addrspace(1)> @vector(<2 x ptr addrspace(1)> %obj) gc "statepoint-example" {
 entry:
 ; CHECK-LABEL: @vector
 ; CHECK: gc.statepoint
 ; CHECK: gc.relocate
-  %safepoint_token = call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @do_safepoint, i32 0, i32 0, i32 0, i32 0) ["gc-live"(<2 x i8 addrspace(1)*> %obj)]
-  %obj.relocated = call coldcc <2 x i8 addrspace(1)*> @llvm.experimental.gc.relocate.v2p1i8(token %safepoint_token, i32 0, i32 0) ; (%obj, %obj)
-  ret <2 x i8 addrspace(1)*> %obj.relocated
+  %safepoint_token = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @do_safepoint, i32 0, i32 0, i32 0, i32 0) ["gc-live"(<2 x ptr addrspace(1)> %obj)]
+  %obj.relocated = call coldcc <2 x ptr addrspace(1)> @llvm.experimental.gc.relocate.v2p1(token %safepoint_token, i32 0, i32 0) ; (%obj, %obj)
+  ret <2 x ptr addrspace(1)> %obj.relocated
 }
 
-define i32 addrspace(1)* @canonical_base(i32 addrspace(1)* %dparam) gc "statepoint-example" {
+define ptr addrspace(1) @canonical_base(ptr addrspace(1) %dparam) gc "statepoint-example" {
 ; Checks that a nonnull pointer
 ; CHECK-LABEL: @canonical_base
 ; CHECK: (token %tok, i32 0, i32 0) ; (%dparam, %dparam)
 entry:
-  %tok = tail call token (i64, i32, i1 ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_i1f(i64 0, i32 0, i1 ()* elementtype(i1 ()) @return_i1, i32 0, i32 0, i32 0, i32 0) ["gc-live"(i32 addrspace(1)* %dparam, i32 addrspace(1)* %dparam)]
-  %relocate = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %tok,  i32 0, i32 1)
-  ret i32 addrspace(1)* %relocate
+  %tok = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(i1 ()) @return_i1, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) %dparam, ptr addrspace(1) %dparam)]
+  %relocate = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %tok,  i32 0, i32 1)
+  ret ptr addrspace(1) %relocate
 }
 
 
 declare void @do_safepoint()
 
-declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...)
-declare i8 addrspace(1)* @llvm.experimental.gc.relocate.p1i8(token, i32, i32)
-declare <2 x i8 addrspace(1)*> @llvm.experimental.gc.relocate.v2p1i8(token, i32, i32)
+declare <2 x ptr addrspace(1)> @llvm.experimental.gc.relocate.v2p1(token, i32, i32)
index 1f004f4bc673dadf27d69a293960b2a3ebbd2040..075359be6c406bdd8b176c7efe8dad95c56298a6 100644 (file)
@@ -4,12 +4,12 @@ target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
 target triple = "aarch64-unknown-linux-android10000"
 
 @x.hwasan = private global { [3 x i32], [4 x i8] } { [3 x i32] [i32 42, i32 57, i32 10], [4 x i8] c"\00\00\00\87" }, align 16
-@x = alias [3 x i32], inttoptr (i64 add (i64 ptrtoint ({ [3 x i32], [4 x i8] }* @x.hwasan to i64), i64 -8718968878589280256) to [3 x i32]*)
+@x = alias [3 x i32], inttoptr (i64 add (i64 ptrtoint (ptr @x.hwasan to i64), i64 -8718968878589280256) to ptr)
 
 define i32 @f(i64 %i) {
 entry:
-  ; CHECK: getelementptr inbounds [3 x i32], [3 x i32]* @x
-  %arrayidx = getelementptr inbounds [3 x i32], [3 x i32]* @x, i64 0, i64 %i
-  %0 = load i32, i32* %arrayidx
+  ; CHECK: getelementptr inbounds [3 x i32], ptr @x
+  %arrayidx = getelementptr inbounds [3 x i32], ptr @x, i64 0, i64 %i
+  %0 = load i32, ptr %arrayidx
   ret i32 %0
 }
index fe517e73f4535789075708fbba8e8c246931c182..6514158966ac590ddc33e66128b6df629188e244 100644 (file)
@@ -12,9 +12,9 @@
 
 declare void @do_something(<vscale x 4 x i32> %x)
 
-define void @can_replace_gep_idx_with_zero_typesize(i64 %n, <vscale x 4 x i32>* %a, i64 %b) {
-  %idx = getelementptr <vscale x 4 x i32>, <vscale x 4 x i32>* %a, i64 %b
-  %tmp = load <vscale x 4 x i32>, <vscale x 4 x i32>* %idx
+define void @can_replace_gep_idx_with_zero_typesize(i64 %n, ptr %a, i64 %b) {
+  %idx = getelementptr <vscale x 4 x i32>, ptr %a, i64 %b
+  %tmp = load <vscale x 4 x i32>, ptr %idx
   call void @do_something(<vscale x 4 x i32> %tmp)
   ret void
 }
index 65ef7bda2803561ef247084d60256251617476ef..0e8d12ba12aae3caeb44b5f776390faeb5a59bad 100644 (file)
@@ -10,7 +10,7 @@ declare void @use(i1)
 
 ; The constant-indexed GEP instruction should be swapped to the end, even
 ; without merging.
-; result = (((i32*) p + a) + b) + 1
+; result = (((ptr) p + a) + b) + 1
 define ptr @basic(ptr %p, i64 %a, i64 %b) {
 ; CHECK-LABEL: @basic(
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 1
@@ -47,7 +47,7 @@ define ptr @partialConstant2(ptr %p, i64 %a, i64 %b) {
 }
 
 ; Constant-indexed GEP are merged after swawpping.
-; result = ((i32*) p + a) + 3
+; result = ((ptr) p + a) + 3
 define ptr @merge(ptr %p, i64 %a) {
 ; CHECK-LABEL: @merge(
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 1
@@ -64,7 +64,7 @@ define ptr @merge(ptr %p, i64 %a) {
 ; Multiple constant-indexed GEP. Note that the first two cannot be merged at
 ; first, but after the second and third are merged, the result can be merged
 ; with the first one on the next pass.
-; result = (<3 x i32>*) ((i16*) ((i8*) ptr + a) + (a * b)) + 9
+; result = (ptr) ((ptr) ((ptr) ptr + a) + (a * b)) + 9
 define ptr @nested(ptr %p, i64 %a, i64 %b) {
 ; CHECK-LABEL: @nested(
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds <3 x i32>, ptr [[P:%.*]], i64 1
index bff11872beac2439a8fae0bd93c05bd049cc91e5..cd7eac6bcba28beb98cd7f724bd1d5f0e15a4be2 100644 (file)
@@ -10,8 +10,7 @@ define i1 @test_ne_constants_null() {
 ; CHECK-NEXT:    ret i1 false
 ;
 entry:
-  %gep = getelementptr inbounds i8, i8* null, i64 0
-  %cnd = icmp ne i8* %gep, null
+  %cnd = icmp ne ptr null, null
   ret i1 %cnd
 }
 
@@ -21,8 +20,8 @@ define i1 @test_ne_constants_nonnull() {
 ; CHECK-NEXT:    ret i1 true
 ;
 entry:
-  %gep = getelementptr inbounds i8, i8* null, i64 1
-  %cnd = icmp ne i8* %gep, null
+  %gep = getelementptr inbounds i8, ptr null, i64 1
+  %cnd = icmp ne ptr %gep, null
   ret i1 %cnd
 }
 
@@ -32,8 +31,7 @@ define i1 @test_eq_constants_null() {
 ; CHECK-NEXT:    ret i1 true
 ;
 entry:
-  %gep = getelementptr inbounds i8, i8* null, i64 0
-  %cnd = icmp eq i8* %gep, null
+  %cnd = icmp eq ptr null, null
   ret i1 %cnd
 }
 
@@ -43,98 +41,98 @@ define i1 @test_eq_constants_nonnull() {
 ; CHECK-NEXT:    ret i1 false
 ;
 entry:
-  %gep = getelementptr inbounds i8, i8* null, i64 1
-  %cnd = icmp eq i8* %gep, null
+  %gep = getelementptr inbounds i8, ptr null, i64 1
+  %cnd = icmp eq ptr %gep, null
   ret i1 %cnd
 }
 
 ;; Then show the results for non-constants.  These use the inbounds provided
 ;; UB fact to ignore the possible overflow cases.
 
-define i1 @test_ne(i8* %base, i64 %idx) {
+define i1 @test_ne(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @test_ne(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CND:%.*]] = icmp ne i8* [[BASE:%.*]], null
+; CHECK-NEXT:    [[CND:%.*]] = icmp ne ptr [[BASE:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CND]]
 ;
 entry:
-  %gep = getelementptr inbounds i8, i8* %base, i64 %idx
-  %cnd = icmp ne i8* %gep, null
+  %gep = getelementptr inbounds i8, ptr %base, i64 %idx
+  %cnd = icmp ne ptr %gep, null
   ret i1 %cnd
 }
 
-define i1 @test_eq(i8* %base, i64 %idx) {
+define i1 @test_eq(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @test_eq(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CND:%.*]] = icmp eq i8* [[BASE:%.*]], null
+; CHECK-NEXT:    [[CND:%.*]] = icmp eq ptr [[BASE:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CND]]
 ;
 entry:
-  %gep = getelementptr inbounds i8, i8* %base, i64 %idx
-  %cnd = icmp eq i8* %gep, null
+  %gep = getelementptr inbounds i8, ptr %base, i64 %idx
+  %cnd = icmp eq ptr %gep, null
   ret i1 %cnd
 }
 
-define <2 x i1> @test_vector_base(<2 x i8*> %base, i64 %idx) {
+define <2 x i1> @test_vector_base(<2 x ptr> %base, i64 %idx) {
 ; CHECK-LABEL: @test_vector_base(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CND:%.*]] = icmp eq <2 x i8*> [[BASE:%.*]], zeroinitializer
+; CHECK-NEXT:    [[CND:%.*]] = icmp eq <2 x ptr> [[BASE:%.*]], zeroinitializer
 ; CHECK-NEXT:    ret <2 x i1> [[CND]]
 ;
 entry:
-  %gep = getelementptr inbounds i8, <2 x i8*> %base, i64 %idx
-  %cnd = icmp eq <2 x i8*> %gep, zeroinitializer
+  %gep = getelementptr inbounds i8, <2 x ptr> %base, i64 %idx
+  %cnd = icmp eq <2 x ptr> %gep, zeroinitializer
   ret <2 x i1> %cnd
 }
 
-define <2 x i1> @test_vector_index(i8* %base, <2 x i64> %idx) {
+define <2 x i1> @test_vector_index(ptr %base, <2 x i64> %idx) {
 ; CHECK-LABEL: @test_vector_index(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <2 x i8*> poison, i8* [[BASE:%.*]], i64 0
-; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq <2 x i8*> [[DOTSPLATINSERT]], zeroinitializer
+; CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <2 x ptr> poison, ptr [[BASE:%.*]], i64 0
+; CHECK-NEXT:    [[TMP0:%.*]] = icmp eq <2 x ptr> [[DOTSPLATINSERT]], zeroinitializer
 ; CHECK-NEXT:    [[CND:%.*]] = shufflevector <2 x i1> [[TMP0]], <2 x i1> poison, <2 x i32> zeroinitializer
 ; CHECK-NEXT:    ret <2 x i1> [[CND]]
 ;
 entry:
-  %gep = getelementptr inbounds i8, i8* %base, <2 x i64> %idx
-  %cnd = icmp eq <2 x i8*> %gep, zeroinitializer
+  %gep = getelementptr inbounds i8, ptr %base, <2 x i64> %idx
+  %cnd = icmp eq <2 x ptr> %gep, zeroinitializer
   ret <2 x i1> %cnd
 }
 
-define <2 x i1> @test_vector_both(<2 x i8*> %base, <2 x i64> %idx) {
+define <2 x i1> @test_vector_both(<2 x ptr> %base, <2 x i64> %idx) {
 ; CHECK-LABEL: @test_vector_both(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CND:%.*]] = icmp eq <2 x i8*> [[BASE:%.*]], zeroinitializer
+; CHECK-NEXT:    [[CND:%.*]] = icmp eq <2 x ptr> [[BASE:%.*]], zeroinitializer
 ; CHECK-NEXT:    ret <2 x i1> [[CND]]
 ;
 entry:
-  %gep = getelementptr inbounds i8, <2 x i8*> %base, <2 x i64> %idx
-  %cnd = icmp eq <2 x i8*> %gep, zeroinitializer
+  %gep = getelementptr inbounds i8, <2 x ptr> %base, <2 x i64> %idx
+  %cnd = icmp eq <2 x ptr> %gep, zeroinitializer
   ret <2 x i1> %cnd
 }
 
 ;; These two show instsimplify's reasoning getting to the non-zero offsets
 ;; before instcombine does.
 
-define i1 @test_eq_pos_idx(i8* %base) {
+define i1 @test_eq_pos_idx(ptr %base) {
 ; CHECK-LABEL: @test_eq_pos_idx(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    ret i1 false
 ;
 entry:
-  %gep = getelementptr inbounds i8, i8* %base, i64 1
-  %cnd = icmp eq i8* %gep, null
+  %gep = getelementptr inbounds i8, ptr %base, i64 1
+  %cnd = icmp eq ptr %gep, null
   ret i1 %cnd
 }
 
-define i1 @test_eq_neg_idx(i8* %base) {
+define i1 @test_eq_neg_idx(ptr %base) {
 ; CHECK-LABEL: @test_eq_neg_idx(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    ret i1 false
 ;
 entry:
-  %gep = getelementptr inbounds i8, i8* %base, i64 -1
-  %cnd = icmp eq i8* %gep, null
+  %gep = getelementptr inbounds i8, ptr %base, i64 -1
+  %cnd = icmp eq ptr %gep, null
   ret i1 %cnd
 }
 
@@ -142,68 +140,68 @@ entry:
 ;; a cornercase which keeps getting mentioned.  The GEP
 ;; produces %base regardless of the value of the index
 ;; expression.
-define i1 @test_size0({}* %base, i64 %idx) {
+define i1 @test_size0(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @test_size0(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CND:%.*]] = icmp ne {}* [[BASE:%.*]], null
+; CHECK-NEXT:    [[CND:%.*]] = icmp ne ptr [[BASE:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CND]]
 ;
 entry:
-  %gep = getelementptr inbounds {}, {}* %base, i64 %idx
-  %cnd = icmp ne {}* %gep, null
+  %gep = getelementptr inbounds {}, ptr %base, i64 %idx
+  %cnd = icmp ne ptr %gep, null
   ret i1 %cnd
 }
-define i1 @test_size0_nonzero_offset({}* %base) {
+define i1 @test_size0_nonzero_offset(ptr %base) {
 ; CHECK-LABEL: @test_size0_nonzero_offset(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CND:%.*]] = icmp ne {}* [[BASE:%.*]], null
+; CHECK-NEXT:    [[CND:%.*]] = icmp ne ptr [[BASE:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CND]]
 ;
 entry:
-  %gep = getelementptr inbounds {}, {}* %base, i64 15
-  %cnd = icmp ne {}* %gep, null
+  %gep = getelementptr inbounds {}, ptr %base, i64 15
+  %cnd = icmp ne ptr %gep, null
   ret i1 %cnd
 }
 
 
-define i1 @test_index_type([10 x i8]* %base, i64 %idx) {
+define i1 @test_index_type(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @test_index_type(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CND:%.*]] = icmp eq [10 x i8]* [[BASE:%.*]], null
+; CHECK-NEXT:    [[CND:%.*]] = icmp eq ptr [[BASE:%.*]], null
 ; CHECK-NEXT:    ret i1 [[CND]]
 ;
 entry:
-  %gep = getelementptr inbounds [10 x i8], [10 x i8]* %base, i64 %idx, i64 %idx
-  %cnd = icmp eq i8* %gep, null
+  %gep = getelementptr inbounds [10 x i8], ptr %base, i64 %idx, i64 %idx
+  %cnd = icmp eq ptr %gep, null
   ret i1 %cnd
 }
 
 
 ;; Finally, some negative tests for basic correctness checking.
 
-define i1 @neq_noinbounds(i8* %base, i64 %idx) {
+define i1 @neq_noinbounds(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @neq_noinbounds(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i8, i8* [[BASE:%.*]], i64 [[IDX:%.*]]
-; CHECK-NEXT:    [[CND:%.*]] = icmp ne i8* [[GEP]], null
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i8, ptr [[BASE:%.*]], i64 [[IDX:%.*]]
+; CHECK-NEXT:    [[CND:%.*]] = icmp ne ptr [[GEP]], null
 ; CHECK-NEXT:    ret i1 [[CND]]
 ;
 entry:
-  %gep = getelementptr i8, i8* %base, i64 %idx
-  %cnd = icmp ne i8* %gep, null
+  %gep = getelementptr i8, ptr %base, i64 %idx
+  %cnd = icmp ne ptr %gep, null
   ret i1 %cnd
 }
 
-define i1 @neg_objectatnull(i8 addrspace(2)* %base, i64 %idx) {
+define i1 @neg_objectatnull(ptr addrspace(2) %base, i64 %idx) {
 ; CHECK-LABEL: @neg_objectatnull(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds i8, i8 addrspace(2)* [[BASE:%.*]], i64 [[IDX:%.*]]
-; CHECK-NEXT:    [[CND:%.*]] = icmp eq i8 addrspace(2)* [[GEP]], null
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds i8, ptr addrspace(2) [[BASE:%.*]], i64 [[IDX:%.*]]
+; CHECK-NEXT:    [[CND:%.*]] = icmp eq ptr addrspace(2) [[GEP]], null
 ; CHECK-NEXT:    ret i1 [[CND]]
 ;
 entry:
-  %gep = getelementptr inbounds i8, i8 addrspace(2)* %base, i64 %idx
-  %cnd = icmp eq i8 addrspace(2)* %gep, null
+  %gep = getelementptr inbounds i8, ptr addrspace(2) %base, i64 %idx
+  %cnd = icmp eq ptr addrspace(2) %gep, null
   ret i1 %cnd
 }
 
@@ -211,26 +209,26 @@ entry:
 ; bitcast between different address spaces. The addrspacecast is
 ; stripped off and the addrspace(0) null can be treated as invalid.
 ; FIXME: This should be able to fold to ret i1 false
-define i1 @invalid_bitcast_icmp_addrspacecast_as0_null(i32 addrspace(5)* %ptr) {
+define i1 @invalid_bitcast_icmp_addrspacecast_as0_null(ptr addrspace(5) %ptr) {
 ; CHECK-LABEL: @invalid_bitcast_icmp_addrspacecast_as0_null(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 addrspace(5)* [[PTR:%.*]], addrspacecast (i32* null to i32 addrspace(5)*)
+; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq ptr addrspace(5) [[PTR:%.*]], addrspacecast (ptr null to ptr addrspace(5))
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
 bb:
-  %tmp1 = getelementptr inbounds i32, i32 addrspace(5)* %ptr, i32 1
-  %tmp2 = icmp eq i32 addrspace(5)* %tmp1, addrspacecast (i32* null to i32 addrspace(5)*)
+  %tmp1 = getelementptr inbounds i32, ptr addrspace(5) %ptr, i32 1
+  %tmp2 = icmp eq ptr addrspace(5) %tmp1, addrspacecast (ptr null to ptr addrspace(5))
   ret i1 %tmp2
 }
 
-define i1 @invalid_bitcast_icmp_addrspacecast_as0_null_var(i32 addrspace(5)* %ptr, i32 %idx) {
+define i1 @invalid_bitcast_icmp_addrspacecast_as0_null_var(ptr addrspace(5) %ptr, i32 %idx) {
 ; CHECK-LABEL: @invalid_bitcast_icmp_addrspacecast_as0_null_var(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 addrspace(5)* [[PTR:%.*]], addrspacecast (i32* null to i32 addrspace(5)*)
+; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq ptr addrspace(5) [[PTR:%.*]], addrspacecast (ptr null to ptr addrspace(5))
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
 bb:
-  %tmp1 = getelementptr inbounds i32, i32 addrspace(5)* %ptr, i32 %idx
-  %tmp2 = icmp eq i32 addrspace(5)* %tmp1, addrspacecast (i32* null to i32 addrspace(5)*)
+  %tmp1 = getelementptr inbounds i32, ptr addrspace(5) %ptr, i32 %idx
+  %tmp2 = icmp eq ptr addrspace(5) %tmp1, addrspacecast (ptr null to ptr addrspace(5))
   ret i1 %tmp2
 }
index 9e11070fef871433a7d31f4b0bde2cf8e10afd5b..a7c5ff9b6ce8c7f6eead38257a8a3bc60bc83e3d 100644 (file)
@@ -9,7 +9,7 @@ target datalayout = "i24:8:8"
 %struct.B = type { i8, [3 x i16], %struct.A, float }
 %struct.C = type { i8, i32, i32 }
 
-; result = (i32*) p + 3
+; result = (ptr) p + 3
 define ptr @mergeBasic(ptr %p) {
 ; CHECK-LABEL: @mergeBasic(
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 3
@@ -20,8 +20,8 @@ define ptr @mergeBasic(ptr %p) {
   ret ptr %2
 }
 
-; Converted to i8* and merged.
-; result = (i8*) p + 10
+; Converted to ptr and merged.
+; result = (ptr) p + 10
 define ptr @mergeDifferentTypes(ptr %p) {
 ; CHECK-LABEL: @mergeDifferentTypes(
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P:%.*]], i64 10
@@ -32,8 +32,8 @@ define ptr @mergeDifferentTypes(ptr %p) {
   ret ptr %2
 }
 
-; Converted to i8* and merged.
-; result = (i8*) p + 10
+; Converted to ptr and merged.
+; result = (ptr) p + 10
 define ptr @mergeReverse(ptr %p) {
 ; CHECK-LABEL: @mergeReverse(
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P:%.*]], i64 10
@@ -55,7 +55,7 @@ define ptr @zeroSum(ptr %p) {
   ret ptr %2
 }
 
-; result = (i8*) (([20 x i8]*) p + 1) + 17
+; result = (ptr) ((ptr) p + 1) + 17
 define ptr @array1(ptr %p) {
 ; CHECK-LABEL: @array1(
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [20 x i8], ptr [[P:%.*]], i64 1, i64 17
@@ -66,8 +66,8 @@ define ptr @array1(ptr %p) {
   ret ptr %2
 }
 
-; Converted to i8* and merged.
-; result = (i8*) p + 20
+; Converted to ptr and merged.
+; result = (ptr) p + 20
 define ptr @array2(ptr %p) {
 ; CHECK-LABEL: @array2(
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P:%.*]], i64 20
@@ -78,8 +78,8 @@ define ptr @array2(ptr %p) {
   ret ptr %2
 }
 
-; Converted to i8* and merged.
-; result = (i8*) p + 36
+; Converted to ptr and merged.
+; result = (ptr) p + 36
 define ptr @struct1(ptr %p) {
 ; CHECK-LABEL: @struct1(
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P:%.*]], i64 36
@@ -101,7 +101,7 @@ define ptr @struct2(ptr %p) {
   ret ptr %2
 }
 
-; result = (i8*) &((struct.B) p)[0].member2.member0 + 7
+; result = (ptr) &((struct.B) p)[0].member2.member0 + 7
 define ptr @structStruct(ptr %p) {
 ; CHECK-LABEL: @structStruct(
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_B:%.*]], ptr [[P:%.*]], i64 0, i32 2, i32 0, i64 7
@@ -115,7 +115,7 @@ define ptr @structStruct(ptr %p) {
 ; First GEP offset is not divisible by last GEP's source element size, but first
 ; GEP points to an array such that the last GEP offset is divisible by the
 ; array's element size, so the first GEP can be rewritten with an extra index.
-; result = (i16*) &((struct.B*) p)[i].member1 + 2
+; result = (ptr) &((struct.B*) p)[i].member1 + 2
 define ptr @appendIndex(ptr %p, i64 %i) {
 ; CHECK-LABEL: @appendIndex(
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_B:%.*]], ptr [[P:%.*]], i64 [[I:%.*]], i32 1, i64 2
@@ -126,10 +126,10 @@ define ptr @appendIndex(ptr %p, i64 %i) {
   ret ptr %2
 }
 
-; Offset of either GEP is not divisible by the other's size, converted to i8*
+; Offset of either GEP is not divisible by the other's size, converted to ptr
 ; and merged.
 ; Here i24 is 8-bit aligned.
-; result = (i8*) p + 7
+; result = (ptr) p + 7
 define ptr @notDivisible(ptr %p) {
 ; CHECK-LABEL: @notDivisible(
 ; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[P:%.*]], i64 7
index cc0aef8f03358158ba37f3f0d4bbf457408bc100..e1742e1c66178b498fb2ed0577069e1a3d4ae173 100644 (file)
@@ -5,51 +5,51 @@ target triple = "x86_64-pc-win32"
 declare void @use(i32) readonly
 
 ; We prefer to canonicalize the machine width gep indices early
-define void @test(i32* %p, i32 %index) {
+define void @test(ptr %p, i32 %index) {
 ; CHECK-LABEL: @test
 ; CHECK-NEXT: %1 = sext i32 %index to i64
-; CHECK-NEXT: %addr = getelementptr i32, i32* %p, i64 %1
-  %addr = getelementptr i32, i32* %p, i32 %index
-  %val = load i32, i32* %addr
+; CHECK-NEXT: %addr = getelementptr i32, ptr %p, i64 %1
+  %addr = getelementptr i32, ptr %p, i32 %index
+  %val = load i32, ptr %addr
   call void @use(i32 %val)
   ret void
 }
 ; If they've already been canonicalized via zext, that's fine
-define void @test2(i32* %p, i32 %index) {
+define void @test2(ptr %p, i32 %index) {
 ; CHECK-LABEL: @test2
 ; CHECK-NEXT: %i = zext i32 %index to i64
-; CHECK-NEXT: %addr = getelementptr i32, i32* %p, i64 %i
+; CHECK-NEXT: %addr = getelementptr i32, ptr %p, i64 %i
   %i = zext i32 %index to i64
-  %addr = getelementptr i32, i32* %p, i64 %i
-  %val = load i32, i32* %addr
+  %addr = getelementptr i32, ptr %p, i64 %i
+  %val = load i32, ptr %addr
   call void @use(i32 %val)
   ret void
 }
 ; If we can use a zext, we prefer that.  This requires
 ; knowing that the index is positive.
-define void @test3(i32* %p, i32 %index) {
+define void @test3(ptr %p, i32 %index) {
 ; CHECK-LABEL: @test3
 ; CHECK:   zext
 ; CHECK-NOT: sext
-  %addr_begin = getelementptr i32, i32* %p, i64 40
-  %addr_fixed = getelementptr i32, i32* %addr_begin, i64 48
-  %val_fixed = load i32, i32* %addr_fixed, !range !0
-  %addr = getelementptr i32, i32* %addr_begin, i32 %val_fixed
-  %val = load i32, i32* %addr
+  %addr_begin = getelementptr i32, ptr %p, i64 40
+  %addr_fixed = getelementptr i32, ptr %addr_begin, i64 48
+  %val_fixed = load i32, ptr %addr_fixed, !range !0
+  %addr = getelementptr i32, ptr %addr_begin, i32 %val_fixed
+  %val = load i32, ptr %addr
   call void @use(i32 %val)
   ret void
 }
 ; Replace sext with zext where possible
-define void @test4(i32* %p, i32 %index) {
+define void @test4(ptr %p, i32 %index) {
 ; CHECK-LABEL: @test4
 ; CHECK:   zext
 ; CHECK-NOT: sext
-  %addr_begin = getelementptr i32, i32* %p, i64 40
-  %addr_fixed = getelementptr i32, i32* %addr_begin, i64 48
-  %val_fixed = load i32, i32* %addr_fixed, !range !0
+  %addr_begin = getelementptr i32, ptr %p, i64 40
+  %addr_fixed = getelementptr i32, ptr %addr_begin, i64 48
+  %val_fixed = load i32, ptr %addr_fixed, !range !0
   %i = sext i32 %val_fixed to i64
-  %addr = getelementptr i32, i32* %addr_begin, i64 %i
-  %val = load i32, i32* %addr
+  %addr = getelementptr i32, ptr %addr_begin, i64 %i
+  %val = load i32, ptr %addr
   call void @use(i32 %val)
   ret void
 }
index e8093b7374ea66679bf9b49e64aa61a2f0187cec..d9f7e4ff9f701b1e6404b3cfe55dfe72bc1c1bad 100644 (file)
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine %s -S | FileCheck %s
 
-define i32* @vector_splat_indices_v2i64_ext0(i32* %a) {
+define ptr @vector_splat_indices_v2i64_ext0(ptr %a) {
 ; CHECK-LABEL: @vector_splat_indices_v2i64_ext0(
-; CHECK-NEXT:    [[RES:%.*]] = getelementptr i32, i32* [[A:%.*]], i64 4
-; CHECK-NEXT:    ret i32* [[RES]]
+; CHECK-NEXT:    [[RES:%.*]] = getelementptr i32, ptr [[A:%.*]], i64 4
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %gep = getelementptr i32, i32* %a, <2 x i64> <i64 4, i64 4>
-  %res = extractelement <2 x i32*> %gep, i32 0
-  ret i32* %res
+  %gep = getelementptr i32, ptr %a, <2 x i64> <i64 4, i64 4>
+  %res = extractelement <2 x ptr> %gep, i32 0
+  ret ptr %res
 }
 
-define i32* @vector_splat_indices_nxv2i64_ext0(i32* %a) {
+define ptr @vector_splat_indices_nxv2i64_ext0(ptr %a) {
 ; CHECK-LABEL: @vector_splat_indices_nxv2i64_ext0(
-; CHECK-NEXT:    [[RES:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i64 4
-; CHECK-NEXT:    ret i32* [[RES]]
+; CHECK-NEXT:    [[RES:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i64 4
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
   %tmp = insertelement <vscale x 2 x i64> poison, i64 4, i32 0
   %splatof4 = shufflevector <vscale x 2 x i64> %tmp, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
-  %gep = getelementptr inbounds i32, i32* %a, <vscale x 2 x i64> %splatof4
-  %res = extractelement <vscale x 2 x i32*> %gep, i32 0
-  ret i32* %res
+  %gep = getelementptr inbounds i32, ptr %a, <vscale x 2 x i64> %splatof4
+  %res = extractelement <vscale x 2 x ptr> %gep, i32 0
+  ret ptr %res
 }
 
-define i32* @vector_indices_v2i64_ext0(i32* %a, <2 x i64> %indices) {
+define ptr @vector_indices_v2i64_ext0(ptr %a, <2 x i64> %indices) {
 ; CHECK-LABEL: @vector_indices_v2i64_ext0(
 ; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <2 x i64> [[INDICES:%.*]], i64 0
-; CHECK-NEXT:    [[RES:%.*]] = getelementptr i32, i32* [[A:%.*]], i64 [[TMP1]]
-; CHECK-NEXT:    ret i32* [[RES]]
+; CHECK-NEXT:    [[RES:%.*]] = getelementptr i32, ptr [[A:%.*]], i64 [[TMP1]]
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %gep = getelementptr i32, i32* %a, <2 x i64> %indices
-  %res = extractelement <2 x i32*> %gep, i32 0
-  ret i32* %res
+  %gep = getelementptr i32, ptr %a, <2 x i64> %indices
+  %res = extractelement <2 x ptr> %gep, i32 0
+  ret ptr %res
 }
 
-define i32* @vector_indices_nxv1i64_ext0(i32* %a, <vscale x 1 x i64> %indices) {
+define ptr @vector_indices_nxv1i64_ext0(ptr %a, <vscale x 1 x i64> %indices) {
 ; CHECK-LABEL: @vector_indices_nxv1i64_ext0(
 ; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <vscale x 1 x i64> [[INDICES:%.*]], i64 0
-; CHECK-NEXT:    [[RES:%.*]] = getelementptr i32, i32* [[A:%.*]], i64 [[TMP1]]
-; CHECK-NEXT:    ret i32* [[RES]]
+; CHECK-NEXT:    [[RES:%.*]] = getelementptr i32, ptr [[A:%.*]], i64 [[TMP1]]
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %gep = getelementptr i32, i32* %a, <vscale x 1 x i64> %indices
-  %res = extractelement <vscale x 1 x i32*> %gep, i32 0
-  ret i32* %res
+  %gep = getelementptr i32, ptr %a, <vscale x 1 x i64> %indices
+  %res = extractelement <vscale x 1 x ptr> %gep, i32 0
+  ret ptr %res
 }
 
 
-define i32* @vector_splat_ptrs_v2i64_ext0(i32* %a, i64 %index) {
+define ptr @vector_splat_ptrs_v2i64_ext0(ptr %a, i64 %index) {
 ; CHECK-LABEL: @vector_splat_ptrs_v2i64_ext0(
-; CHECK-NEXT:    [[RES:%.*]] = getelementptr i32, i32* [[A:%.*]], i64 [[INDEX:%.*]]
-; CHECK-NEXT:    ret i32* [[RES]]
+; CHECK-NEXT:    [[RES:%.*]] = getelementptr i32, ptr [[A:%.*]], i64 [[INDEX:%.*]]
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %tmp = insertelement <2 x i32*> poison, i32* %a, i32 0
-  %splatofa = shufflevector <2 x i32*> %tmp, <2 x i32*> poison, <2 x i32> zeroinitializer
-  %gep = getelementptr i32, <2 x i32*> %splatofa, i64 %index
-  %res = extractelement <2 x i32*> %gep, i32 0
-  ret i32* %res
+  %tmp = insertelement <2 x ptr> poison, ptr %a, i32 0
+  %splatofa = shufflevector <2 x ptr> %tmp, <2 x ptr> poison, <2 x i32> zeroinitializer
+  %gep = getelementptr i32, <2 x ptr> %splatofa, i64 %index
+  %res = extractelement <2 x ptr> %gep, i32 0
+  ret ptr %res
 }
 
 
-define i32* @vector_splat_ptrs_nxv2i64_ext0(i32* %a, i64 %index) {
+define ptr @vector_splat_ptrs_nxv2i64_ext0(ptr %a, i64 %index) {
 ; CHECK-LABEL: @vector_splat_ptrs_nxv2i64_ext0(
-; CHECK-NEXT:    [[RES:%.*]] = getelementptr i32, i32* [[A:%.*]], i64 [[INDEX:%.*]]
-; CHECK-NEXT:    ret i32* [[RES]]
+; CHECK-NEXT:    [[RES:%.*]] = getelementptr i32, ptr [[A:%.*]], i64 [[INDEX:%.*]]
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %tmp = insertelement <vscale x 2 x i32*> poison, i32* %a, i32 0
-  %splatofa = shufflevector <vscale x 2 x i32*> %tmp, <vscale x 2 x i32*> poison, <vscale x 2 x i32> zeroinitializer
-  %gep = getelementptr i32, <vscale x 2 x i32*> %splatofa, i64 %index
-  %res = extractelement <vscale x 2 x i32*> %gep, i32 0
-  ret i32* %res
+  %tmp = insertelement <vscale x 2 x ptr> poison, ptr %a, i32 0
+  %splatofa = shufflevector <vscale x 2 x ptr> %tmp, <vscale x 2 x ptr> poison, <vscale x 2 x i32> zeroinitializer
+  %gep = getelementptr i32, <vscale x 2 x ptr> %splatofa, i64 %index
+  %res = extractelement <vscale x 2 x ptr> %gep, i32 0
+  ret ptr %res
 }
 
 
-define float* @vector_struct1_splat_indices_v4i64_ext1({float, float}* %a) {
+define ptr @vector_struct1_splat_indices_v4i64_ext1(ptr %a) {
 ; CHECK-LABEL: @vector_struct1_splat_indices_v4i64_ext1(
-; CHECK-NEXT:    [[RES:%.*]] = getelementptr { float, float }, { float, float }* [[A:%.*]], i64 4, i32 0
-; CHECK-NEXT:    ret float* [[RES]]
+; CHECK-NEXT:    [[RES:%.*]] = getelementptr { float, float }, ptr [[A:%.*]], i64 4, i32 0
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %gep = getelementptr {float, float}, {float, float}* %a, <4 x i32> <i32 4, i32 4, i32 4, i32 4>, i32 0
-  %res = extractelement <4 x float*> %gep, i32 1
-  ret float* %res
+  %gep = getelementptr {float, float}, ptr %a, <4 x i32> <i32 4, i32 4, i32 4, i32 4>, i32 0
+  %res = extractelement <4 x ptr> %gep, i32 1
+  ret ptr %res
 }
 
 
-define float* @vector_struct2_splat_indices_v4i64_ext1({float, [8 x float]}* %a) {
+define ptr @vector_struct2_splat_indices_v4i64_ext1(ptr %a) {
 ; CHECK-LABEL: @vector_struct2_splat_indices_v4i64_ext1(
-; CHECK-NEXT:    [[RES:%.*]] = getelementptr { float, [8 x float] }, { float, [8 x float] }* [[A:%.*]], i64 2, i32 1, i64 4
-; CHECK-NEXT:    ret float* [[RES]]
+; CHECK-NEXT:    [[RES:%.*]] = getelementptr { float, [8 x float] }, ptr [[A:%.*]], i64 2, i32 1, i64 4
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %gep = getelementptr {float, [8 x float]}, {float, [8 x float]}* %a, i32 2, i32 1, <4 x i32> <i32 4, i32 4, i32 4, i32 4>
-  %res = extractelement <4 x float*> %gep, i32 1
-  ret float* %res
+  %gep = getelementptr {float, [8 x float]}, ptr %a, i32 2, i32 1, <4 x i32> <i32 4, i32 4, i32 4, i32 4>
+  %res = extractelement <4 x ptr> %gep, i32 1
+  ret ptr %res
 }
 
 
 ; Negative tests
 
-define i32* @vector_indices_nxv2i64_ext3(i32* %a, <vscale x 2 x i64> %indices) {
+define ptr @vector_indices_nxv2i64_ext3(ptr %a, <vscale x 2 x i64> %indices) {
 ; CHECK-LABEL: @vector_indices_nxv2i64_ext3(
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, i32* [[A:%.*]], <vscale x 2 x i64> [[INDICES:%.*]]
-; CHECK-NEXT:    [[RES:%.*]] = extractelement <vscale x 2 x i32*> [[GEP]], i64 3
-; CHECK-NEXT:    ret i32* [[RES]]
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, ptr [[A:%.*]], <vscale x 2 x i64> [[INDICES:%.*]]
+; CHECK-NEXT:    [[RES:%.*]] = extractelement <vscale x 2 x ptr> [[GEP]], i64 3
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %gep = getelementptr i32, i32* %a, <vscale x 2 x i64> %indices
-  %res = extractelement <vscale x 2 x i32*> %gep, i32 3
-  ret i32* %res
+  %gep = getelementptr i32, ptr %a, <vscale x 2 x i64> %indices
+  %res = extractelement <vscale x 2 x ptr> %gep, i32 3
+  ret ptr %res
 }
 
-define i32* @vector_indices_nxv2i64_extN(i32* %a, <vscale x 2 x i64> %indices, i32 %N) {
+define ptr @vector_indices_nxv2i64_extN(ptr %a, <vscale x 2 x i64> %indices, i32 %N) {
 ; CHECK-LABEL: @vector_indices_nxv2i64_extN(
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, i32* [[A:%.*]], <vscale x 2 x i64> [[INDICES:%.*]]
-; CHECK-NEXT:    [[RES:%.*]] = extractelement <vscale x 2 x i32*> [[GEP]], i32 [[N:%.*]]
-; CHECK-NEXT:    ret i32* [[RES]]
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, ptr [[A:%.*]], <vscale x 2 x i64> [[INDICES:%.*]]
+; CHECK-NEXT:    [[RES:%.*]] = extractelement <vscale x 2 x ptr> [[GEP]], i32 [[N:%.*]]
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %gep = getelementptr i32, i32* %a, <vscale x 2 x i64> %indices
-  %res = extractelement <vscale x 2 x i32*> %gep, i32 %N
-  ret i32* %res
+  %gep = getelementptr i32, ptr %a, <vscale x 2 x i64> %indices
+  %res = extractelement <vscale x 2 x ptr> %gep, i32 %N
+  ret ptr %res
 }
 
-define void @vector_indices_nxv2i64_mulitple_use(i32* %a, <vscale x 2 x i64> %indices, i32** %b, i32** %c) {
+define void @vector_indices_nxv2i64_mulitple_use(ptr %a, <vscale x 2 x i64> %indices, ptr %b, ptr %c) {
 ; CHECK-LABEL: @vector_indices_nxv2i64_mulitple_use(
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, i32* [[A:%.*]], <vscale x 2 x i64> [[INDICES:%.*]]
-; CHECK-NEXT:    [[LANE0:%.*]] = extractelement <vscale x 2 x i32*> [[GEP]], i64 0
-; CHECK-NEXT:    [[LANE1:%.*]] = extractelement <vscale x 2 x i32*> [[GEP]], i64 1
-; CHECK-NEXT:    store i32* [[LANE0]], i32** [[B:%.*]], align 8
-; CHECK-NEXT:    store i32* [[LANE1]], i32** [[C:%.*]], align 8
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, ptr [[A:%.*]], <vscale x 2 x i64> [[INDICES:%.*]]
+; CHECK-NEXT:    [[LANE0:%.*]] = extractelement <vscale x 2 x ptr> [[GEP]], i64 0
+; CHECK-NEXT:    [[LANE1:%.*]] = extractelement <vscale x 2 x ptr> [[GEP]], i64 1
+; CHECK-NEXT:    store ptr [[LANE0]], ptr [[B:%.*]], align 8
+; CHECK-NEXT:    store ptr [[LANE1]], ptr [[C:%.*]], align 8
 ; CHECK-NEXT:    ret void
 ;
-  %gep = getelementptr i32, i32* %a, <vscale x 2 x i64> %indices
-  %lane0 = extractelement <vscale x 2 x i32*> %gep, i32 0
-  %lane1 = extractelement <vscale x 2 x i32*> %gep, i32 1
-  store i32* %lane0, i32** %b, align 8
-  store i32* %lane1, i32** %c, align 8
+  %gep = getelementptr i32, ptr %a, <vscale x 2 x i64> %indices
+  %lane0 = extractelement <vscale x 2 x ptr> %gep, i32 0
+  %lane1 = extractelement <vscale x 2 x ptr> %gep, i32 1
+  store ptr %lane0, ptr %b, align 8
+  store ptr %lane1, ptr %c, align 8
   ret void
 }
 
-define i32* @vector_ptrs_and_indices_ext0(<vscale x 4 x i32*> %a, <vscale x 4 x i64> %indices) {
+define ptr @vector_ptrs_and_indices_ext0(<vscale x 4 x ptr> %a, <vscale x 4 x i64> %indices) {
 ; CHECK-LABEL: @vector_ptrs_and_indices_ext0(
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <vscale x 4 x i32*> [[A:%.*]], <vscale x 4 x i64> [[INDICES:%.*]]
-; CHECK-NEXT:    [[RES:%.*]] = extractelement <vscale x 4 x i32*> [[GEP]], i64 0
-; CHECK-NEXT:    ret i32* [[RES]]
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <vscale x 4 x ptr> [[A:%.*]], <vscale x 4 x i64> [[INDICES:%.*]]
+; CHECK-NEXT:    [[RES:%.*]] = extractelement <vscale x 4 x ptr> [[GEP]], i64 0
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %gep = getelementptr i32, <vscale x 4 x i32*> %a, <vscale x 4 x i64> %indices
-  %res = extractelement <vscale x 4 x i32*> %gep, i32 0
-  ret i32* %res
+  %gep = getelementptr i32, <vscale x 4 x ptr> %a, <vscale x 4 x i64> %indices
+  %res = extractelement <vscale x 4 x ptr> %gep, i32 0
+  ret ptr %res
 }
index de4b101aee04cbaa05575d2e8a671c8e0580af0e..f7fc89656a0184fc752a9d4e658b1e14568436b4 100644 (file)
@@ -5,9 +5,9 @@ target triple = "x86_64-unknown-linux-gnu"
 
 @buffer = external global [64 x float]
 
-declare void @use(i8*)
+declare void @use(ptr)
 
 define void @f() {
-  call void @use(i8* getelementptr (i8, i8* getelementptr (i8, i8* bitcast ([64 x float]* @buffer to i8*), i64 and (i64 sub (i64 0, i64 ptrtoint ([64 x float]* @buffer to i64)), i64 63)), i64 64))
+  call void @use(ptr getelementptr (i8, ptr getelementptr (i8, ptr @buffer, i64 and (i64 sub (i64 0, i64 ptrtoint (ptr @buffer to i64)), i64 63)), i64 64))
   ret void
 }
index cbb0039d608a9207d18600c57380a3a15b3327b4..1386192eca808132b1ef55ad66822202adf0f81d 100644 (file)
@@ -9,5 +9,5 @@ target triple = "x86_64-apple-macosx10.11.0"
 %struct.matrix_float3x3 = type { [3 x <3 x float>] }
 
 @matrix_identity_float3x3 = external global %struct.matrix_float3x3, align 16
-@bbb = global float* getelementptr inbounds (%struct.matrix_float3x3, %struct.matrix_float3x3* @matrix_identity_float3x3, i64 0, i32 0, i64 1, i64 3)
-; CHECK: @bbb = global float* getelementptr inbounds (%struct.matrix_float3x3, %struct.matrix_float3x3* @matrix_identity_float3x3, i64 0, i32 0, i64 1, i64 3)
+@bbb = global ptr getelementptr inbounds (%struct.matrix_float3x3, ptr @matrix_identity_float3x3, i64 0, i32 0, i64 1, i64 3)
+; CHECK: @bbb = global ptr getelementptr inbounds (%struct.matrix_float3x3, ptr @matrix_identity_float3x3, i64 0, i32 0, i64 1, i64 3)
index 23506fa36df79bb0685ba3ba6aba8507137b7728..3cea5aff7e704c8e8dae234dc5a89e68ba6e807e 100644 (file)
@@ -80,29 +80,29 @@ define i8 @t5_commutativity(i8 %x) {
 define i8 @constantexpr(i8 %or) local_unnamed_addr #0 {
 ; CHECK-LABEL: @constantexpr(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[R:%.*]] = xor i8 [[OR:%.*]], xor (i8 ptrtoint (i32* @global_constant to i8), i8 ptrtoint (i32* @global_constant2 to i8))
+; CHECK-NEXT:    [[R:%.*]] = xor i8 [[OR:%.*]], xor (i8 ptrtoint (ptr @global_constant to i8), i8 ptrtoint (ptr @global_constant2 to i8))
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
 entry:
-  %r = xor i8 %or, xor (i8 xor (i8 ptrtoint (i32* @global_constant to i8), i8 -1), i8 xor (i8 ptrtoint (i32* @global_constant2 to i8), i8 -1))
+  %r = xor i8 %or, xor (i8 xor (i8 ptrtoint (ptr @global_constant to i8), i8 -1), i8 xor (i8 ptrtoint (ptr @global_constant2 to i8), i8 -1))
   ret i8 %r
 }
 
 @global_constant3 = external global [6 x [1 x i64]], align 1
 @global_constant4 = external global i64, align 1
-@global_constant5 = external global i16*, align 1
+@global_constant5 = external global ptr, align 1
 
 define i16 @constantexpr2() {
 ; CHECK-LABEL: @constantexpr2(
-; CHECK-NEXT:    [[I2:%.*]] = load i16*, i16** @global_constant5, align 1
-; CHECK-NEXT:    [[I3:%.*]] = load i16, i16* [[I2]], align 1
-; CHECK-NEXT:    [[I5:%.*]] = xor i16 [[I3]], xor (i16 zext (i1 icmp ne (i64* getelementptr inbounds ([6 x [1 x i64]], [6 x [1 x i64]]* @global_constant3, i64 0, i64 5, i64 0), i64* @global_constant4) to i16), i16 -1)
+; CHECK-NEXT:    [[I2:%.*]] = load ptr, ptr @global_constant5, align 1
+; CHECK-NEXT:    [[I3:%.*]] = load i16, ptr [[I2]], align 1
+; CHECK-NEXT:    [[I5:%.*]] = xor i16 [[I3]], xor (i16 zext (i1 icmp ne (ptr getelementptr inbounds ([6 x [1 x i64]], ptr @global_constant3, i64 0, i64 5, i64 0), ptr @global_constant4) to i16), i16 -1)
 ; CHECK-NEXT:    ret i16 [[I5]]
 ;
-  %i0 = icmp ne i64* getelementptr inbounds ([6 x [1 x i64]], [6 x [1 x i64]]* @global_constant3, i16 0, i16 5, i16 0), @global_constant4
+  %i0 = icmp ne ptr getelementptr inbounds ([6 x [1 x i64]], ptr @global_constant3, i16 0, i16 5, i16 0), @global_constant4
   %i1 = zext i1 %i0 to i16
-  %i2 = load i16*, i16** @global_constant5, align 1
-  %i3 = load i16, i16* %i2, align 1
+  %i2 = load ptr, ptr @global_constant5, align 1
+  %i3 = load i16, ptr %i2, align 1
   %i4 = xor i16 %i3, %i1
   %i5 = xor i16 %i4, -1
   ret i16 %i5
index 4e04ac60862bbcbc393ce5e055b9bb78cf4d5c88..969957ce6ffa40ef53f1e069e97840c97716e7c3 100644 (file)
@@ -405,19 +405,19 @@ define <2 x i1> @op_ugt_sum_vec_commute2(<2 x i8> %p1, <2 x i8> %p2) {
   ret <2 x i1> %c
 }
 
-define i1 @sum_ugt_op_uses(i8 %p1, i8 %p2, i8* %p3) {
+define i1 @sum_ugt_op_uses(i8 %p1, i8 %p2, ptr %p3) {
 ; CHECK-LABEL: @sum_ugt_op_uses(
 ; CHECK-NEXT:    [[X:%.*]] = sdiv i8 42, [[P1:%.*]]
 ; CHECK-NEXT:    [[Y:%.*]] = sdiv i8 42, [[P2:%.*]]
 ; CHECK-NEXT:    [[A:%.*]] = add nsw i8 [[X]], [[Y]]
-; CHECK-NEXT:    store i8 [[A]], i8* [[P3:%.*]], align 1
+; CHECK-NEXT:    store i8 [[A]], ptr [[P3:%.*]], align 1
 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i8 [[X]], [[A]]
 ; CHECK-NEXT:    ret i1 [[C]]
 ;
   %x = sdiv i8 42, %p1
   %y = sdiv i8 42, %p2
   %a = add i8 %x, %y
-  store i8 %a, i8* %p3
+  store i8 %a, ptr %p3
   %c = icmp ugt i8 %x, %a
   ret i1 %c
 }
@@ -452,15 +452,15 @@ define i1 @sum_ult_op_commute2(i8 %p1, i8 %p2) {
   ret i1 %c
 }
 
-define i1 @sum_ult_op_uses(i8 %x, i8 %y, i8* %p) {
+define i1 @sum_ult_op_uses(i8 %x, i8 %y, ptr %p) {
 ; CHECK-LABEL: @sum_ult_op_uses(
 ; CHECK-NEXT:    [[A:%.*]] = add i8 [[Y:%.*]], [[X:%.*]]
-; CHECK-NEXT:    store i8 [[A]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[A]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i8 [[A]], [[X]]
 ; CHECK-NEXT:    ret i1 [[C]]
 ;
   %a = add i8 %y, %x
-  store i8 %a, i8* %p
+  store i8 %a, ptr %p
   %c = icmp ult i8 %a, %x
   ret i1 %c
 }
index 420431844a895574a3fe6edbfc709d8519305bea..01a094129a85fd0690630ca15666e20c55c82166 100644 (file)
@@ -1,21 +1,21 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare i32 @f32(i32**, i32**)
+declare i32 @f32(ptr, ptr)
 
-declare i32 @f64(i64**, i64**)
+declare i32 @f64(ptr, ptr)
 
 define i1 @icmp_func() {
 ; CHECK-LABEL: @icmp_func(
 ; CHECK: ret i1 false
-  %cmp = icmp eq i32 (i8*, i8*)* bitcast (i32 (i32**, i32**)* @f32 to i32 (i8*, i8*)*), bitcast (i32 (i64**, i64**)* @f64 to i32 (i8*, i8*)*)
+  %cmp = icmp eq ptr @f32, @f64
   ret i1 %cmp
 }
 
-define i1 @icmp_fptr(i32 (i8*, i8*)*) {
+define i1 @icmp_fptr(ptr) {
 ; CHECK-LABEL: @icmp_fptr(
-; CHECK: %cmp = icmp ne i32 (i8*, i8*)* %0, bitcast (i32 (i32**, i32**)* @f32 to i32 (i8*, i8*)*)
+; CHECK: %cmp = icmp ne ptr %0, @f32
 ; CHECK: ret i1 %cmp
-  %cmp = icmp ne i32 (i8*, i8*)* bitcast (i32 (i32**, i32**)* @f32 to i32 (i8*, i8*)*), %0
+  %cmp = icmp ne ptr @f32, %0
   ret i1 %cmp
 }
 
@@ -25,6 +25,6 @@ define i32 @icmp_glob(i32 %x, i32 %y) {
 ; CHECK-LABEL: define i32 @icmp_glob(i32 %x, i32 %y)
 ; CHECK-NEXT:   ret i32 %y
 ;
-  %sel = select i1 icmp eq (i32* bitcast (i32 (i32, i32)* @icmp_glob to i32*), i32* @b), i32 %x, i32 %y
+  %sel = select i1 icmp eq (ptr @icmp_glob, ptr @b), i32 %x, i32 %y
   ret i32 %sel
 }
index fc4c827ca2b66cb0ed0cf0e54a944c878e19d61b..a356a5aa78278e9a1f8d6bb574c05b5f369534d9 100644 (file)
@@ -351,7 +351,7 @@ f:
 ; This used to infinite loop because of a conflict
 ; with min/max canonicalization.
 
-define i32 @PR48900(i32 %i, i1* %p) {
+define i32 @PR48900(i32 %i, ptr %p) {
 ; CHECK-LABEL: @PR48900(
 ; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.umax.i32(i32 [[I:%.*]], i32 1)
 ; CHECK-NEXT:    [[I4:%.*]] = icmp sgt i32 [[TMP1]], 0
@@ -379,7 +379,7 @@ falselabel:
 ; This used to infinite loop because of a conflict
 ; with min/max canonicalization.
 
-define i8 @PR48900_alt(i8 %i, i1* %p) {
+define i8 @PR48900_alt(i8 %i, ptr %p) {
 ; CHECK-LABEL: @PR48900_alt(
 ; CHECK-NEXT:    [[TMP1:%.*]] = call i8 @llvm.smax.i8(i8 [[I:%.*]], i8 -127)
 ; CHECK-NEXT:    [[I4:%.*]] = icmp ugt i8 [[TMP1]], -128
index 2e8c05638eb1a639dcdf61a5eb8a751da641fc2a..27d812a25b2a6474f57e60ec365a3285bfefef20 100644 (file)
@@ -60,10 +60,10 @@ define void @PR33765(i8 %beth) {
 ; CHECK:       if.then9:
 ; CHECK-NEXT:    [[CONV:%.*]] = zext i8 [[BETH:%.*]] to i32
 ; CHECK-NEXT:    [[MUL:%.*]] = mul nuw nsw i32 [[CONV]], [[CONV]]
-; CHECK-NEXT:    [[TINKY:%.*]] = load i16, i16* @glob, align 2
+; CHECK-NEXT:    [[TINKY:%.*]] = load i16, ptr @glob, align 2
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i32 [[MUL]] to i16
 ; CHECK-NEXT:    [[CONV14:%.*]] = and i16 [[TINKY]], [[TMP1]]
-; CHECK-NEXT:    store i16 [[CONV14]], i16* @glob, align 2
+; CHECK-NEXT:    store i16 [[CONV14]], ptr @glob, align 2
 ; CHECK-NEXT:    ret void
 ;
   %conv = zext i8 %beth to i32
@@ -73,11 +73,11 @@ define void @PR33765(i8 %beth) {
   br i1 %tobool8, label %if.then9, label %if.then9
 
 if.then9:
-  %tinky = load i16, i16* @glob
+  %tinky = load i16, ptr @glob
   %conv13 = sext i16 %tinky to i32
   %and = and i32 %mul, %conv13
   %conv14 = trunc i32 %and to i16
-  store i16 %conv14, i16* @glob
+  store i16 %conv14, ptr @glob
   ret void
 }
 
index f2aa0db1b326ebb395d6b7f84f750b6de7201ed4..be5c28f72cd825ebcc8f0ee4c1c836ce4c88372d 100644 (file)
@@ -749,11 +749,11 @@ define <2 x i1> @eq_mul_constants_with_tz_splat(<2 x i32> %x, <2 x i32> %y) {
 define i1 @oss_fuzz_39934(i32 %arg) {
 ; CHECK-LABEL: @oss_fuzz_39934(
 ; CHECK-NEXT:    [[B13:%.*]] = mul nsw i32 [[ARG:%.*]], -65536
-; CHECK-NEXT:    [[C10:%.*]] = icmp ne i32 [[B13]], mul (i32 or (i32 zext (i1 icmp eq (i32* @g, i32* null) to i32), i32 65537), i32 -65536)
+; CHECK-NEXT:    [[C10:%.*]] = icmp ne i32 [[B13]], mul (i32 or (i32 zext (i1 icmp eq (ptr @g, ptr null) to i32), i32 65537), i32 -65536)
 ; CHECK-NEXT:    ret i1 [[C10]]
 ;
   %B13 = mul nsw i32 %arg, -65536
-  %C10 = icmp ne i32 mul (i32 or (i32 zext (i1 icmp eq (i32* @g, i32* null) to i32), i32 65537), i32 -65536), %B13
+  %C10 = icmp ne i32 mul (i32 or (i32 zext (i1 icmp eq (ptr @g, ptr null) to i32), i32 65537), i32 -65536), %B13
   ret i1 %C10
 }
 
index df00200626b51f8b02c54cfdc6df7f4a443ded55..537e1c261ee82325a7a7291c6c1679a81f12faa8 100644 (file)
@@ -7,115 +7,115 @@ declare void @use(i8)
 declare void @use_vec(<2 x i8>)
 
 ; Definitely out of range
-define i1 @test_nonzero(i32* nocapture readonly %arg) {
+define i1 @test_nonzero(ptr nocapture readonly %arg) {
 ; CHECK-LABEL: @test_nonzero(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %val = load i32, i32* %arg, !range !0
+  %val = load i32, ptr %arg, !range !0
   %rval = icmp ne i32 %val, 0
   ret i1 %rval
 }
-define i1 @test_nonzero2(i32* nocapture readonly %arg) {
+define i1 @test_nonzero2(ptr nocapture readonly %arg) {
 ; CHECK-LABEL: @test_nonzero2(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %val = load i32, i32* %arg, !range !0
+  %val = load i32, ptr %arg, !range !0
   %rval = icmp eq i32 %val, 0
   ret i1 %rval
 }
 
 ; Potentially in range
-define i1 @test_nonzero3(i32* nocapture readonly %arg) {
+define i1 @test_nonzero3(ptr nocapture readonly %arg) {
 ; CHECK-LABEL: @test_nonzero3(
-; CHECK-NEXT:    [[VAL:%.*]] = load i32, i32* [[ARG:%.*]], align 4, !range [[RNG0:![0-9]+]]
+; CHECK-NEXT:    [[VAL:%.*]] = load i32, ptr [[ARG:%.*]], align 4, !range [[RNG0:![0-9]+]]
 ; CHECK-NEXT:    [[RVAL:%.*]] = icmp ne i32 [[VAL]], 0
 ; CHECK-NEXT:    ret i1 [[RVAL]]
 ;
 ; Check that this does not trigger - it wouldn't be legal
-  %val = load i32, i32* %arg, !range !1
+  %val = load i32, ptr %arg, !range !1
   %rval = icmp ne i32 %val, 0
   ret i1 %rval
 }
 
 ; Definitely in range
-define i1 @test_nonzero4(i8* nocapture readonly %arg) {
+define i1 @test_nonzero4(ptr nocapture readonly %arg) {
 ; CHECK-LABEL: @test_nonzero4(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %val = load i8, i8* %arg, !range !2
+  %val = load i8, ptr %arg, !range !2
   %rval = icmp ne i8 %val, 0
   ret i1 %rval
 }
 
-define i1 @test_nonzero5(i8* nocapture readonly %arg) {
+define i1 @test_nonzero5(ptr nocapture readonly %arg) {
 ; CHECK-LABEL: @test_nonzero5(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %val = load i8, i8* %arg, !range !2
+  %val = load i8, ptr %arg, !range !2
   %rval = icmp ugt i8 %val, 0
   ret i1 %rval
 }
 
 ; Cheaper checks (most values in range meet requirements)
-define i1 @test_nonzero6(i8* %argw) {
+define i1 @test_nonzero6(ptr %argw) {
 ; CHECK-LABEL: @test_nonzero6(
-; CHECK-NEXT:    [[VAL:%.*]] = load i8, i8* [[ARGW:%.*]], align 1, !range [[RNG1:![0-9]+]]
+; CHECK-NEXT:    [[VAL:%.*]] = load i8, ptr [[ARGW:%.*]], align 1, !range [[RNG1:![0-9]+]]
 ; CHECK-NEXT:    [[RVAL:%.*]] = icmp ne i8 [[VAL]], 0
 ; CHECK-NEXT:    ret i1 [[RVAL]]
 ;
-  %val = load i8, i8* %argw, !range !3
+  %val = load i8, ptr %argw, !range !3
   %rval = icmp sgt i8 %val, 0
   ret i1 %rval
 }
 
 ; Constant not in range, should return true.
-define i1 @test_not_in_range(i32* nocapture readonly %arg) {
+define i1 @test_not_in_range(ptr nocapture readonly %arg) {
 ; CHECK-LABEL: @test_not_in_range(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %val = load i32, i32* %arg, !range !0
+  %val = load i32, ptr %arg, !range !0
   %rval = icmp ne i32 %val, 6
   ret i1 %rval
 }
 
 ; Constant in range, can not fold.
-define i1 @test_in_range(i32* nocapture readonly %arg) {
+define i1 @test_in_range(ptr nocapture readonly %arg) {
 ; CHECK-LABEL: @test_in_range(
-; CHECK-NEXT:    [[VAL:%.*]] = load i32, i32* [[ARG:%.*]], align 4, !range [[RNG2:![0-9]+]]
+; CHECK-NEXT:    [[VAL:%.*]] = load i32, ptr [[ARG:%.*]], align 4, !range [[RNG2:![0-9]+]]
 ; CHECK-NEXT:    [[RVAL:%.*]] = icmp ne i32 [[VAL]], 3
 ; CHECK-NEXT:    ret i1 [[RVAL]]
 ;
-  %val = load i32, i32* %arg, !range !0
+  %val = load i32, ptr %arg, !range !0
   %rval = icmp ne i32 %val, 3
   ret i1 %rval
 }
 
 ; Values in range greater than constant.
-define i1 @test_range_sgt_constant(i32* nocapture readonly %arg) {
+define i1 @test_range_sgt_constant(ptr nocapture readonly %arg) {
 ; CHECK-LABEL: @test_range_sgt_constant(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %val = load i32, i32* %arg, !range !0
+  %val = load i32, ptr %arg, !range !0
   %rval = icmp sgt i32 %val, 0
   ret i1 %rval
 }
 
 ; Values in range less than constant.
-define i1 @test_range_slt_constant(i32* nocapture readonly %arg) {
+define i1 @test_range_slt_constant(ptr nocapture readonly %arg) {
 ; CHECK-LABEL: @test_range_slt_constant(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %val = load i32, i32* %arg, !range !0
+  %val = load i32, ptr %arg, !range !0
   %rval = icmp sgt i32 %val, 6
   ret i1 %rval
 }
 
 ; Values in union of multiple sub ranges not equal to constant.
-define i1 @test_multi_range1(i32* nocapture readonly %arg) {
+define i1 @test_multi_range1(ptr nocapture readonly %arg) {
 ; CHECK-LABEL: @test_multi_range1(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %val = load i32, i32* %arg, !range !4
+  %val = load i32, ptr %arg, !range !4
   %rval = icmp ne i32 %val, 0
   ret i1 %rval
 }
@@ -124,49 +124,49 @@ define i1 @test_multi_range1(i32* nocapture readonly %arg) {
 ; union of sub ranges could possibly equal to constant. This
 ; in theory could also be folded and might be implemented in
 ; the future if shown profitable in practice.
-define i1 @test_multi_range2(i32* nocapture readonly %arg) {
+define i1 @test_multi_range2(ptr nocapture readonly %arg) {
 ; CHECK-LABEL: @test_multi_range2(
-; CHECK-NEXT:    [[VAL:%.*]] = load i32, i32* [[ARG:%.*]], align 4, !range [[RNG3:![0-9]+]]
+; CHECK-NEXT:    [[VAL:%.*]] = load i32, ptr [[ARG:%.*]], align 4, !range [[RNG3:![0-9]+]]
 ; CHECK-NEXT:    [[RVAL:%.*]] = icmp ne i32 [[VAL]], 7
 ; CHECK-NEXT:    ret i1 [[RVAL]]
 ;
-  %val = load i32, i32* %arg, !range !4
+  %val = load i32, ptr %arg, !range !4
   %rval = icmp ne i32 %val, 7
   ret i1 %rval
 }
 
 ; Values' ranges overlap each other, so it can not be simplified.
-define i1 @test_two_ranges(i32* nocapture readonly %arg1, i32* nocapture readonly %arg2) {
+define i1 @test_two_ranges(ptr nocapture readonly %arg1, ptr nocapture readonly %arg2) {
 ; CHECK-LABEL: @test_two_ranges(
-; CHECK-NEXT:    [[VAL1:%.*]] = load i32, i32* [[ARG1:%.*]], align 4, !range [[RNG4:![0-9]+]]
-; CHECK-NEXT:    [[VAL2:%.*]] = load i32, i32* [[ARG2:%.*]], align 4, !range [[RNG5:![0-9]+]]
+; CHECK-NEXT:    [[VAL1:%.*]] = load i32, ptr [[ARG1:%.*]], align 4, !range [[RNG4:![0-9]+]]
+; CHECK-NEXT:    [[VAL2:%.*]] = load i32, ptr [[ARG2:%.*]], align 4, !range [[RNG5:![0-9]+]]
 ; CHECK-NEXT:    [[RVAL:%.*]] = icmp ult i32 [[VAL2]], [[VAL1]]
 ; CHECK-NEXT:    ret i1 [[RVAL]]
 ;
-  %val1 = load i32, i32* %arg1, !range !5
-  %val2 = load i32, i32* %arg2, !range !6
+  %val1 = load i32, ptr %arg1, !range !5
+  %val2 = load i32, ptr %arg2, !range !6
   %rval = icmp ult i32 %val2, %val1
   ret i1 %rval
 }
 
 ; Values' ranges do not overlap each other, so it can simplified to false.
-define i1 @test_two_ranges2(i32* nocapture readonly %arg1, i32* nocapture readonly %arg2) {
+define i1 @test_two_ranges2(ptr nocapture readonly %arg1, ptr nocapture readonly %arg2) {
 ; CHECK-LABEL: @test_two_ranges2(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %val1 = load i32, i32* %arg1, !range !0
-  %val2 = load i32, i32* %arg2, !range !6
+  %val1 = load i32, ptr %arg1, !range !0
+  %val2 = load i32, ptr %arg2, !range !6
   %rval = icmp ult i32 %val2, %val1
   ret i1 %rval
 }
 
 ; Values' ranges do not overlap each other, so it can simplified to true.
-define i1 @test_two_ranges3(i32* nocapture readonly %arg1, i32* nocapture readonly %arg2) {
+define i1 @test_two_ranges3(ptr nocapture readonly %arg1, ptr nocapture readonly %arg2) {
 ; CHECK-LABEL: @test_two_ranges3(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %val1 = load i32, i32* %arg1, !range !0
-  %val2 = load i32, i32* %arg2, !range !6
+  %val1 = load i32, ptr %arg1, !range !0
+  %val2 = load i32, ptr %arg2, !range !6
   %rval = icmp ugt i32 %val2, %val1
   ret i1 %rval
 }
index b47eb6083115396583db6e0e3b8421dc6bcd1bde..6ef1c6ca211d5bfce2fde860fd672cb4e1f4cd7f 100644 (file)
@@ -2426,16 +2426,16 @@ define i1 @ashr_sle_noexact(i8 %x) {
   ret i1 %c
 }
 
-define i1 @ashr_00_00_ashr_extra_use(i8 %x, i8* %ptr) {
+define i1 @ashr_00_00_ashr_extra_use(i8 %x, ptr %ptr) {
 ; CHECK-LABEL: @ashr_00_00_ashr_extra_use(
 ; CHECK-NEXT:    [[S:%.*]] = ashr exact i8 [[X:%.*]], 3
 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i8 [[X]], 88
-; CHECK-NEXT:    store i8 [[S]], i8* [[PTR:%.*]], align 1
+; CHECK-NEXT:    store i8 [[S]], ptr [[PTR:%.*]], align 1
 ; CHECK-NEXT:    ret i1 [[C]]
 ;
   %s = ashr exact i8 %x, 3
   %c = icmp ule i8 %s, 10
-  store i8 %s, i8* %ptr
+  store i8 %s, ptr %ptr
   ret i1 %c
 }
 
index 74d002fefda8d9e77e375edf7c274f1123c58622..ab64934fcb5546299bd2bac3f9e6eb3cd9f75527 100644 (file)
@@ -489,14 +489,14 @@ define <2 x i1> @sub_ne_zero_use(<2 x i8> %x, <2 x i8> %y) {
   ret <2 x i1> %r
 }
 
-define i32 @sub_eq_zero_select(i32 %a, i32 %b, i32* %p) {
+define i32 @sub_eq_zero_select(i32 %a, i32 %b, ptr %p) {
 ; CHECK-LABEL: @sub_eq_zero_select(
 ; CHECK-NEXT:    [[SUB:%.*]] = sub i32 [[A:%.*]], [[B:%.*]]
-; CHECK-NEXT:    store i32 [[SUB]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[SUB]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i32 [[B]]
 ;
   %sub = sub i32 %a, %b
-  store i32 %sub, i32* %p
+  store i32 %sub, ptr %p
   %cmp = icmp eq i32 %sub, 0
   %sel = select i1 %cmp, i32 %a, i32 %b
   ret i32 %sel
index 883b28d152e04c15ef676eea6d9521ee1a516658..1a3ffddb8448d4e9bc005c9db3886c729a4b80e9 100644 (file)
@@ -61,8 +61,8 @@ define i1 @PR52260(i32 %x) {
 ; CHECK-NEXT:    ret i1 true
 ;
   %idxprom = sext i32 %x to i64
-  %idx = getelementptr inbounds [3 x i32], [3 x i32]* @a, i64 0, i64 %idxprom
-  %t1 = load i32, i32* %idx, align 4
+  %idx = getelementptr inbounds [3 x i32], ptr @a, i64 0, i64 %idxprom
+  %t1 = load i32, ptr %idx, align 4
   %conv1 = lshr i32 %t1, 1
   %t2 = trunc i32 %conv1 to i8
   %conv2 = and i8 %t2, 127
index bc6ac03c884750ff789f49403058f7aee77a226f..04d8d294c31935ae3cb39255040fdc3246e00a9d 100644 (file)
@@ -201,10 +201,10 @@ define <3 x i1> @PR27756_3(<3 x i8> %a) {
 
 define <2 x i1> @PR27786(<2 x i8> %a) {
 ; CHECK-LABEL: @PR27786(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp sle <2 x i8> [[A:%.*]], bitcast (i16 ptrtoint (i32* @someglobal to i16) to <2 x i8>)
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sle <2 x i8> [[A:%.*]], bitcast (i16 ptrtoint (ptr @someglobal to i16) to <2 x i8>)
 ; CHECK-NEXT:    ret <2 x i1> [[CMP]]
 ;
-  %cmp = icmp sle <2 x i8> %a, bitcast (i16 ptrtoint (i32* @someglobal to i16) to <2 x i8>)
+  %cmp = icmp sle <2 x i8> %a, bitcast (i16 ptrtoint (ptr @someglobal to i16) to <2 x i8>)
   ret <2 x i1> %cmp
 }
 
index f1980ef559c7540d12a7ef82f57e8bd227ba290c..ddc60ee0ce419394a489dc28409f885f947a3e17 100644 (file)
@@ -203,10 +203,10 @@ define <3 x i1> @PR27756_3(<3 x i8> %a) {
 
 define <2 x i1> @PR27786(<2 x i8> %a) {
 ; CHECK-LABEL: @PR27786(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp sle <2 x i8> [[A:%.*]], bitcast (i16 ptrtoint (i32* @someglobal to i16) to <2 x i8>)
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sle <2 x i8> [[A:%.*]], bitcast (i16 ptrtoint (ptr @someglobal to i16) to <2 x i8>)
 ; CHECK-NEXT:    ret <2 x i1> [[CMP]]
 ;
-  %cmp = icmp sle <2 x i8> %a, bitcast (i16 ptrtoint (i32* @someglobal to i16) to <2 x i8>)
+  %cmp = icmp sle <2 x i8> %a, bitcast (i16 ptrtoint (ptr @someglobal to i16) to <2 x i8>)
   ret <2 x i1> %cmp
 }
 
@@ -518,16 +518,16 @@ define i1 @not_cast_ne-1(<3 x i1> %x) {
   ret i1 %r
 }
 
-define i1 @not_cast_ne-1_uses(<3 x i2> %x, <3 x i2>* %p) {
+define i1 @not_cast_ne-1_uses(<3 x i2> %x, ptr %p) {
 ; CHECK-LABEL: @not_cast_ne-1_uses(
 ; CHECK-NEXT:    [[NOT:%.*]] = xor <3 x i2> [[X:%.*]], <i2 -1, i2 -1, i2 -1>
-; CHECK-NEXT:    store <3 x i2> [[NOT]], <3 x i2>* [[P:%.*]], align 1
+; CHECK-NEXT:    store <3 x i2> [[NOT]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <3 x i2> [[X]] to i6
 ; CHECK-NEXT:    [[R:%.*]] = icmp ne i6 [[TMP1]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %not = xor <3 x i2> %x, <i2 -1, i2 -1, i2 -1>
-  store <3 x i2> %not, <3 x i2>* %p
+  store <3 x i2> %not, ptr %p
   %b = bitcast <3 x i2> %not to i6
   %r = icmp ne i6 %b, -1
   ret i1 %r
@@ -565,16 +565,16 @@ define i1 @eq_cast_eq1(<2 x i4> %x, <2 x i4> %y) {
 
 ; negative test - extra use
 
-define i1 @eq_cast_eq-1_use1(<2 x i4> %x, <2 x i4> %y, <2 x i1>* %p) {
+define i1 @eq_cast_eq-1_use1(<2 x i4> %x, <2 x i4> %y, ptr %p) {
 ; CHECK-LABEL: @eq_cast_eq-1_use1(
 ; CHECK-NEXT:    [[IC:%.*]] = icmp sgt <2 x i4> [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    store <2 x i1> [[IC]], <2 x i1>* [[P:%.*]], align 1
+; CHECK-NEXT:    store <2 x i1> [[IC]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[B:%.*]] = bitcast <2 x i1> [[IC]] to i2
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i2 [[B]], -1
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %ic = icmp sgt <2 x i4> %x, %y
-  store <2 x i1> %ic, <2 x i1>* %p
+  store <2 x i1> %ic, ptr %p
   %b = bitcast <2 x i1> %ic to i2
   %r = icmp eq i2 %b, -1
   ret i1 %r
@@ -582,18 +582,17 @@ define i1 @eq_cast_eq-1_use1(<2 x i4> %x, <2 x i4> %y, <2 x i1>* %p) {
 
 ; negative test - extra use
 
-define i1 @eq_cast_eq-1_use2(<2 x i4> %x, <2 x i4> %y, i2* %p) {
+define i1 @eq_cast_eq-1_use2(<2 x i4> %x, <2 x i4> %y, ptr %p) {
 ; CHECK-LABEL: @eq_cast_eq-1_use2(
 ; CHECK-NEXT:    [[IC:%.*]] = icmp sgt <2 x i4> [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[B:%.*]] = bitcast <2 x i1> [[IC]] to i2
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i2* [[P:%.*]] to <2 x i1>*
-; CHECK-NEXT:    store <2 x i1> [[IC]], <2 x i1>* [[TMP1]], align 1
+; CHECK-NEXT:    store <2 x i1> [[IC]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i2 [[B]], -1
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %ic = icmp sgt <2 x i4> %x, %y
   %b = bitcast <2 x i1> %ic to i2
-  store i2 %b, i2* %p
+  store i2 %b, ptr %p
   %r = icmp eq i2 %b, -1
   ret i1 %r
 }
@@ -679,16 +678,16 @@ define i1 @eq7_cast_sext(<5 x i3> %b) {
 
 ; extra use of extend is ok
 
-define i1 @eq_cast_zext_use1(<5 x i3> %b, <5 x i7>* %p) {
+define i1 @eq_cast_zext_use1(<5 x i3> %b, ptr %p) {
 ; CHECK-LABEL: @eq_cast_zext_use1(
 ; CHECK-NEXT:    [[E:%.*]] = zext <5 x i3> [[B:%.*]] to <5 x i7>
-; CHECK-NEXT:    store <5 x i7> [[E]], <5 x i7>* [[P:%.*]], align 8
+; CHECK-NEXT:    store <5 x i7> [[E]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <5 x i3> [[B]] to i15
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i15 [[TMP1]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %e = zext <5 x i3> %b to <5 x i7>
-  store <5 x i7> %e, <5 x i7>* %p
+  store <5 x i7> %e, ptr %p
   %bc = bitcast <5 x i7> %e to i35
   %r = icmp eq i35 %bc, 0
   ret i1 %r
@@ -713,27 +712,27 @@ define i1 @eq_cast_zext_use2(<5 x i3> %b) {
   ret i1 %r
 }
 
-define i1 @eq_cast_eq_ptr-1(<2 x i4*> %x, <2 x i4*> %y) {
+define i1 @eq_cast_eq_ptr-1(<2 x ptr> %x, <2 x ptr> %y) {
 ; CHECK-LABEL: @eq_cast_eq_ptr-1(
-; CHECK-NEXT:    [[IC:%.*]] = icmp ne <2 x i4*> [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[IC:%.*]] = icmp ne <2 x ptr> [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i1> [[IC]] to i2
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i2 [[TMP1]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %ic = icmp eq <2 x i4*> %x, %y
+  %ic = icmp eq <2 x ptr> %x, %y
   %b = bitcast <2 x i1> %ic to i2
   %r = icmp eq i2 %b, -1
   ret i1 %r
 }
 
-define i1 @eq_cast_ne_ptr-1(<2 x i4*> %x, <2 x i4*> %y) {
+define i1 @eq_cast_ne_ptr-1(<2 x ptr> %x, <2 x ptr> %y) {
 ; CHECK-LABEL: @eq_cast_ne_ptr-1(
-; CHECK-NEXT:    [[IC:%.*]] = icmp ne <2 x i4*> [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[IC:%.*]] = icmp ne <2 x ptr> [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <2 x i1> [[IC]] to i2
 ; CHECK-NEXT:    [[R:%.*]] = icmp ne i2 [[TMP1]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %ic = icmp eq <2 x i4*> %x, %y
+  %ic = icmp eq <2 x ptr> %x, %y
   %b = bitcast <2 x i1> %ic to i2
   %r = icmp ne i2 %b, -1
   ret i1 %r
index 2e7687737820e9069487375281e7dfb4dfd96572..d26720a297a4d9bac6b80dc5ab5fece8197777ef 100644 (file)
@@ -499,15 +499,15 @@ define <2 x i1> @test23vec(<2 x i32> %x) {
 
 ; Note: offs can be negative, LLVM used to make an incorrect assumption that
 ; unsigned overflow does not happen during offset computation
-define i1 @test24_neg_offs(i32* %p, i64 %offs) {
+define i1 @test24_neg_offs(ptr %p, i64 %offs) {
 ; CHECK-LABEL: @test24_neg_offs(
 ; CHECK-NEXT:    [[P1_IDX_NEG:%.*]] = mul i64 [[OFFS:%.*]], -4
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i64 [[P1_IDX_NEG]], 8
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %p1 = getelementptr inbounds i32, i32* %p, i64 %offs
-  %conv1 = ptrtoint i32* %p to i64
-  %conv2 = ptrtoint i32* %p1 to i64
+  %p1 = getelementptr inbounds i32, ptr %p, i64 %offs
+  %conv1 = ptrtoint ptr %p to i64
+  %conv2 = ptrtoint ptr %p1 to i64
   %delta = sub i64 %conv1, %conv2
   %cmp = icmp eq i64 %delta, 8
   ret i1 %cmp
@@ -1087,29 +1087,29 @@ define void @test58() {
 declare i32 @test58_d(i64)
 
 ; Negative test: GEP inbounds may cross sign boundary.
-define i1 @test62(i8* %a) {
+define i1 @test62(ptr %a) {
 ; CHECK-LABEL: @test62(
-; CHECK-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, i8* [[A:%.*]], i64 1
-; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds i8, i8* [[A]], i64 10
-; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8* [[ARRAYIDX1]], [[ARRAYIDX2]]
+; CHECK-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[A:%.*]], i64 1
+; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 10
+; CHECK-NEXT:    [[CMP:%.*]] = icmp slt ptr [[ARRAYIDX1]], [[ARRAYIDX2]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %arrayidx1 = getelementptr inbounds i8, i8* %a, i64 1
-  %arrayidx2 = getelementptr inbounds i8, i8* %a, i64 10
-  %cmp = icmp slt i8* %arrayidx1, %arrayidx2
+  %arrayidx1 = getelementptr inbounds i8, ptr %a, i64 1
+  %arrayidx2 = getelementptr inbounds i8, ptr %a, i64 10
+  %cmp = icmp slt ptr %arrayidx1, %arrayidx2
   ret i1 %cmp
 }
 
-define i1 @test62_as1(i8 addrspace(1)* %a) {
+define i1 @test62_as1(ptr addrspace(1) %a) {
 ; CHECK-LABEL: @test62_as1(
-; CHECK-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, i8 addrspace(1)* [[A:%.*]], i16 1
-; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds i8, i8 addrspace(1)* [[A]], i16 10
-; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8 addrspace(1)* [[ARRAYIDX1]], [[ARRAYIDX2]]
+; CHECK-NEXT:    [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr addrspace(1) [[A:%.*]], i16 1
+; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds i8, ptr addrspace(1) [[A]], i16 10
+; CHECK-NEXT:    [[CMP:%.*]] = icmp slt ptr addrspace(1) [[ARRAYIDX1]], [[ARRAYIDX2]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %arrayidx1 = getelementptr inbounds i8, i8 addrspace(1)* %a, i64 1
-  %arrayidx2 = getelementptr inbounds i8, i8 addrspace(1)* %a, i64 10
-  %cmp = icmp slt i8 addrspace(1)* %arrayidx1, %arrayidx2
+  %arrayidx1 = getelementptr inbounds i8, ptr addrspace(1) %a, i64 1
+  %arrayidx2 = getelementptr inbounds i8, ptr addrspace(1) %a, i64 10
+  %cmp = icmp slt ptr addrspace(1) %arrayidx1, %arrayidx2
   ret i1 %cmp
 }
 
@@ -2731,15 +2731,15 @@ define <2 x i1> @xor_ult(<2 x i8> %x) {
   ret <2 x i1> %r
 }
 
-define i1 @xor_ult_extra_use(i8 %x, i8* %p) {
+define i1 @xor_ult_extra_use(i8 %x, ptr %p) {
 ; CHECK-LABEL: @xor_ult_extra_use(
 ; CHECK-NEXT:    [[XOR:%.*]] = xor i8 [[X:%.*]], -32
-; CHECK-NEXT:    store i8 [[XOR]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[XOR]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[R:%.*]] = icmp ugt i8 [[X]], 31
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %xor = xor i8 %x, -32
-  store i8 %xor, i8* %p
+  store i8 %xor, ptr %p
   %r = icmp ult i8 %xor, -32
   ret i1 %r
 }
@@ -2754,15 +2754,15 @@ define <2 x i1> @xor_ugt(<2 x i8> %x) {
   ret <2 x i1> %r
 }
 
-define i1 @xor_ugt_extra_use(i8 %x, i8* %p) {
+define i1 @xor_ugt_extra_use(i8 %x, ptr %p) {
 ; CHECK-LABEL: @xor_ugt_extra_use(
 ; CHECK-NEXT:    [[XOR:%.*]] = xor i8 [[X:%.*]], 63
-; CHECK-NEXT:    store i8 [[XOR]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[XOR]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[R:%.*]] = icmp ugt i8 [[X]], 63
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %xor = xor i8 %x, 63
-  store i8 %xor, i8* %p
+  store i8 %xor, ptr %p
   %r = icmp ugt i8 %xor, 63
   ret i1 %r
 }
@@ -3165,13 +3165,13 @@ define i1 @icmp_sle_zero_add_nsw(i32 %a) {
   ret i1 %cmp
 }
 
-define zeroext i1 @icmp_cmpxchg_strong(i32* %sc, i32 %old_val, i32 %new_val) {
+define zeroext i1 @icmp_cmpxchg_strong(ptr %sc, i32 %old_val, i32 %new_val) {
 ; CHECK-LABEL: @icmp_cmpxchg_strong(
-; CHECK-NEXT:    [[XCHG:%.*]] = cmpxchg i32* [[SC:%.*]], i32 [[OLD_VAL:%.*]], i32 [[NEW_VAL:%.*]] seq_cst seq_cst, align 4
+; CHECK-NEXT:    [[XCHG:%.*]] = cmpxchg ptr [[SC:%.*]], i32 [[OLD_VAL:%.*]], i32 [[NEW_VAL:%.*]] seq_cst seq_cst, align 4
 ; CHECK-NEXT:    [[ICMP:%.*]] = extractvalue { i32, i1 } [[XCHG]], 1
 ; CHECK-NEXT:    ret i1 [[ICMP]]
 ;
-  %xchg = cmpxchg i32* %sc, i32 %old_val, i32 %new_val seq_cst seq_cst
+  %xchg = cmpxchg ptr %sc, i32 %old_val, i32 %new_val seq_cst seq_cst
   %xtrc = extractvalue { i32, i1 } %xchg, 0
   %icmp = icmp eq i32 %xtrc, %old_val
   ret i1 %icmp
@@ -3330,10 +3330,10 @@ define i1 @f9(i32 %val, i32 %lim) {
 
 define i1 @f10(i16 %p) {
 ; CHECK-LABEL: @f10(
-; CHECK-NEXT:    [[CMP580:%.*]] = icmp uge i16 [[P:%.*]], mul (i16 zext (i8 ptrtoint (i1 (i16)* @f10 to i8) to i16), i16 zext (i8 ptrtoint (i1 (i16)* @f10 to i8) to i16))
+; CHECK-NEXT:    [[CMP580:%.*]] = icmp uge i16 [[P:%.*]], mul (i16 zext (i8 ptrtoint (ptr @f10 to i8) to i16), i16 zext (i8 ptrtoint (ptr @f10 to i8) to i16))
 ; CHECK-NEXT:    ret i1 [[CMP580]]
 ;
-  %cmp580 = icmp ule i16 mul (i16 zext (i8 ptrtoint (i1 (i16)* @f10 to i8) to i16), i16 zext (i8 ptrtoint (i1 (i16)* @f10 to i8) to i16)), %p
+  %cmp580 = icmp ule i16 mul (i16 zext (i8 ptrtoint (ptr @f10 to i8) to i16), i16 zext (i8 ptrtoint (ptr @f10 to i8) to i16)), %p
   ret i1 %cmp580
 }
 
@@ -3495,16 +3495,16 @@ define <2 x i1> @ugtKnownBitsVec(<2 x i8> %a) {
   ret <2 x i1> %cmp
 }
 
-define i1 @or_ptrtoint_mismatch(i8* %p, i32* %q) {
+define i1 @or_ptrtoint_mismatch(ptr %p, ptr %q) {
 ; CHECK-LABEL: @or_ptrtoint_mismatch(
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i8* [[P:%.*]], null
-; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32* [[Q:%.*]], null
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq ptr [[P:%.*]], null
+; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq ptr [[Q:%.*]], null
 ; CHECK-NEXT:    [[B:%.*]] = and i1 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i1 [[B]]
 ;
 
-  %pp = ptrtoint i8* %p to i64
-  %qq = ptrtoint i32* %q to i64
+  %pp = ptrtoint ptr %p to i64
+  %qq = ptrtoint ptr %q to i64
   %o = or i64 %pp, %qq
   %b = icmp eq i64 %o, 0
   ret i1 %b
@@ -3870,25 +3870,25 @@ define i32 @abs_preserve(i32 %x) {
 ; Don't crash by assuming the compared values are integers.
 
 declare void @llvm.assume(i1)
-define i1 @PR35794(i32* %a) {
+define i1 @PR35794(ptr %a) {
 ; CHECK-LABEL: @PR35794(
-; CHECK-NEXT:    [[MASKCOND:%.*]] = icmp eq i32* [[A:%.*]], null
+; CHECK-NEXT:    [[MASKCOND:%.*]] = icmp eq ptr [[A:%.*]], null
 ; CHECK-NEXT:    tail call void @llvm.assume(i1 [[MASKCOND]])
 ; CHECK-NEXT:    ret i1 true
 ;
-  %cmp = icmp sgt i32* %a, inttoptr (i64 -1 to i32*)
-  %maskcond = icmp eq i32* %a, null
+  %cmp = icmp sgt ptr %a, inttoptr (i64 -1 to ptr)
+  %maskcond = icmp eq ptr %a, null
   tail call void @llvm.assume(i1 %maskcond)
   ret i1 %cmp
 }
 
 ; Don't crash by assuming the compared values are integers.
-define <2 x i1> @PR36583(<2 x i8*>)  {
+define <2 x i1> @PR36583(<2 x ptr>)  {
 ; CHECK-LABEL: @PR36583(
-; CHECK-NEXT:    [[RES:%.*]] = icmp eq <2 x i8*> [[TMP0:%.*]], zeroinitializer
+; CHECK-NEXT:    [[RES:%.*]] = icmp eq <2 x ptr> [[TMP0:%.*]], zeroinitializer
 ; CHECK-NEXT:    ret <2 x i1> [[RES]]
 ;
-  %cast = ptrtoint <2 x i8*> %0 to <2 x i64>
+  %cast = ptrtoint <2 x ptr> %0 to <2 x i64>
   %res = icmp eq <2 x i64> %cast, zeroinitializer
   ret <2 x i1> %res
 }
@@ -3982,7 +3982,7 @@ define <4 x i1> @signbit_bitcast_fpext_vec_wrong_bitcast(<2 x half> %x) {
 declare void @use_i1(i1)
 declare void @use_i64(i64)
 
-define i1 @signbit_bitcast_fpext_extra_use(float %x, i64* %p) {
+define i1 @signbit_bitcast_fpext_extra_use(float %x, ptr %p) {
 ; CHECK-LABEL: @signbit_bitcast_fpext_extra_use(
 ; CHECK-NEXT:    [[F:%.*]] = fpext float [[X:%.*]] to double
 ; CHECK-NEXT:    [[B:%.*]] = bitcast double [[F]] to i64
@@ -4029,16 +4029,16 @@ define i1 @pr47997(i32 %arg) {
 ; CHECK-LABEL: @pr47997(
 ; CHECK-NEXT:  bb:
 ; CHECK-NEXT:    [[I:%.*]] = add nsw i32 [[ARG:%.*]], -1
-; CHECK-NEXT:    store i32 [[I]], i32* @x, align 4
+; CHECK-NEXT:    store i32 [[I]], ptr @x, align 4
 ; CHECK-NEXT:    [[I1:%.*]] = sub nsw i32 1, [[ARG]]
-; CHECK-NEXT:    store i32 [[I1]], i32* @y, align 4
+; CHECK-NEXT:    store i32 [[I1]], ptr @y, align 4
 ; CHECK-NEXT:    ret i1 true
 ;
 bb:
   %i = add nsw i32 %arg, -1
-  store i32 %i, i32* @x
+  store i32 %i, ptr @x
   %i1 = sub nsw i32 1, %arg
-  store i32 %i1, i32* @y
+  store i32 %i1, ptr @y
   %i2 = sub nsw i32 0, %i1
   %i3 = icmp eq i32 %i, %i2
   ret i1 %i3
index 6df5c4c86036711c0b01de71bcf50abaf0cede55..baad241f8dad99d3dc6cc24d4a12e779bb5039c8 100644 (file)
@@ -4,25 +4,25 @@
 ; Test that presence of range does not cause unprofitable transforms with bit
 ; arithmetics.
 
-define i1 @without_range(i32* %A) {
+define i1 @without_range(ptr %A) {
 ; CHECK-LABEL: @without_range(
-; CHECK-NEXT:    [[A_VAL:%.*]] = load i32, i32* [[A:%.*]], align 8
+; CHECK-NEXT:    [[A_VAL:%.*]] = load i32, ptr [[A:%.*]], align 8
 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i32 [[A_VAL]], 2
 ; CHECK-NEXT:    ret i1 [[C]]
 ;
-  %A.val = load i32, i32* %A, align 8
+  %A.val = load i32, ptr %A, align 8
   %B = sdiv i32 %A.val, 2
   %C = icmp sge i32 0, %B
   ret i1 %C
 }
 
-define i1 @with_range(i32* %A) {
+define i1 @with_range(ptr %A) {
 ; CHECK-LABEL: @with_range(
-; CHECK-NEXT:    [[A_VAL:%.*]] = load i32, i32* [[A:%.*]], align 8, !range [[RNG0:![0-9]+]]
+; CHECK-NEXT:    [[A_VAL:%.*]] = load i32, ptr [[A:%.*]], align 8, !range [[RNG0:![0-9]+]]
 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i32 [[A_VAL]], 2
 ; CHECK-NEXT:    ret i1 [[C]]
 ;
-  %A.val = load i32, i32* %A, align 8, !range !0
+  %A.val = load i32, ptr %A, align 8, !range !0
   %B = sdiv i32 %A.val, 2
   %C = icmp sge i32 0, %B
   ret i1 %C
index 1d2b4aee89c46a06d6467fde9760b82c106757b5..c894587d24fc6ac45a836c234648331e084adb39 100644 (file)
@@ -3,7 +3,7 @@
 
 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:64"
 
-define i32 *@test1(i32* %A, i32 %Offset) {
+define ptr@test1(ptr %A, i32 %Offset) {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[BB:%.*]]
@@ -13,25 +13,25 @@ define i32 *@test1(i32* %A, i32 %Offset) {
 ; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[RHS_IDX]], 100
 ; CHECK-NEXT:    br i1 [[COND]], label [[BB2:%.*]], label [[BB]]
 ; CHECK:       bb2:
-; CHECK-NEXT:    [[RHS_PTR:%.*]] = getelementptr inbounds i32, i32* [[A:%.*]], i32 [[RHS_IDX]]
-; CHECK-NEXT:    ret i32* [[RHS_PTR]]
+; CHECK-NEXT:    [[RHS_PTR:%.*]] = getelementptr inbounds i32, ptr [[A:%.*]], i32 [[RHS_IDX]]
+; CHECK-NEXT:    ret ptr [[RHS_PTR]]
 ;
 entry:
-  %tmp = getelementptr inbounds i32, i32* %A, i32 %Offset
+  %tmp = getelementptr inbounds i32, ptr %A, i32 %Offset
   br label %bb
 
 bb:
-  %RHS = phi i32* [ %RHS.next, %bb ], [ %tmp, %entry ]
-  %LHS = getelementptr inbounds i32, i32* %A, i32 100
-  %RHS.next = getelementptr inbounds i32, i32* %RHS, i64 1
-  %cond = icmp ult i32 * %LHS, %RHS
+  %RHS = phi ptr [ %RHS.next, %bb ], [ %tmp, %entry ]
+  %LHS = getelementptr inbounds i32, ptr %A, i32 100
+  %RHS.next = getelementptr inbounds i32, ptr %RHS, i64 1
+  %cond = icmp ult ptr %LHS, %RHS
   br i1 %cond, label %bb2, label %bb
 
 bb2:
-  ret i32* %RHS
+  ret ptr %RHS
 }
 
-define i32 *@test2(i32 %A, i32 %Offset) {
+define ptr@test2(i32 %A, i32 %Offset) {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[BB:%.*]]
@@ -41,62 +41,62 @@ define i32 *@test2(i32 %A, i32 %Offset) {
 ; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[RHS_IDX]], 100
 ; CHECK-NEXT:    br i1 [[COND]], label [[BB2:%.*]], label [[BB]]
 ; CHECK:       bb2:
-; CHECK-NEXT:    [[RHSTO_PTR:%.*]] = inttoptr i32 [[A:%.*]] to i32*
-; CHECK-NEXT:    [[RHS_PTR:%.*]] = getelementptr inbounds i32, i32* [[RHSTO_PTR]], i32 [[RHS_IDX]]
-; CHECK-NEXT:    ret i32* [[RHS_PTR]]
+; CHECK-NEXT:    [[RHSTO_PTR:%.*]] = inttoptr i32 [[A:%.*]] to ptr
+; CHECK-NEXT:    [[RHS_PTR:%.*]] = getelementptr inbounds i32, ptr [[RHSTO_PTR]], i32 [[RHS_IDX]]
+; CHECK-NEXT:    ret ptr [[RHS_PTR]]
 ;
 entry:
-  %A.ptr = inttoptr i32 %A to i32*
-  %tmp = getelementptr inbounds i32, i32* %A.ptr, i32 %Offset
+  %A.ptr = inttoptr i32 %A to ptr
+  %tmp = getelementptr inbounds i32, ptr %A.ptr, i32 %Offset
   br label %bb
 
 bb:
-  %RHS = phi i32* [ %RHS.next, %bb ], [ %tmp, %entry ]
-  %LHS = getelementptr inbounds i32, i32* %A.ptr, i32 100
-  %RHS.next = getelementptr inbounds i32, i32* %RHS, i64 1
-  %cmp0 = ptrtoint i32 *%LHS to i32
-  %cmp1 = ptrtoint i32 *%RHS to i32
+  %RHS = phi ptr [ %RHS.next, %bb ], [ %tmp, %entry ]
+  %LHS = getelementptr inbounds i32, ptr %A.ptr, i32 100
+  %RHS.next = getelementptr inbounds i32, ptr %RHS, i64 1
+  %cmp0 = ptrtoint ptr %LHS to i32
+  %cmp1 = ptrtoint ptr %RHS to i32
   %cond = icmp ult i32 %cmp0, %cmp1
   br i1 %cond, label %bb2, label %bb
 
 bb2:
-  ret i32* %RHS
+  ret ptr %RHS
 }
 
 ; Perform the transformation only if we know that the GEPs used are inbounds.
-define i32 *@test3(i32* %A, i32 %Offset) {
+define ptr@test3(ptr %A, i32 %Offset) {
 ; CHECK-LABEL: @test3(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP:%.*]] = getelementptr i32, i32* [[A:%.*]], i32 [[OFFSET:%.*]]
+; CHECK-NEXT:    [[TMP:%.*]] = getelementptr i32, ptr [[A:%.*]], i32 [[OFFSET:%.*]]
 ; CHECK-NEXT:    br label [[BB:%.*]]
 ; CHECK:       bb:
-; CHECK-NEXT:    [[RHS:%.*]] = phi i32* [ [[RHS_NEXT:%.*]], [[BB]] ], [ [[TMP]], [[ENTRY:%.*]] ]
-; CHECK-NEXT:    [[LHS:%.*]] = getelementptr i32, i32* [[A]], i32 100
-; CHECK-NEXT:    [[RHS_NEXT]] = getelementptr i32, i32* [[RHS]], i32 1
-; CHECK-NEXT:    [[COND:%.*]] = icmp ult i32* [[LHS]], [[RHS]]
+; CHECK-NEXT:    [[RHS:%.*]] = phi ptr [ [[RHS_NEXT:%.*]], [[BB]] ], [ [[TMP]], [[ENTRY:%.*]] ]
+; CHECK-NEXT:    [[LHS:%.*]] = getelementptr i32, ptr [[A]], i32 100
+; CHECK-NEXT:    [[RHS_NEXT]] = getelementptr i32, ptr [[RHS]], i32 1
+; CHECK-NEXT:    [[COND:%.*]] = icmp ult ptr [[LHS]], [[RHS]]
 ; CHECK-NEXT:    br i1 [[COND]], label [[BB2:%.*]], label [[BB]]
 ; CHECK:       bb2:
-; CHECK-NEXT:    ret i32* [[RHS]]
+; CHECK-NEXT:    ret ptr [[RHS]]
 ;
 entry:
-  %tmp = getelementptr i32, i32* %A, i32 %Offset
+  %tmp = getelementptr i32, ptr %A, i32 %Offset
   br label %bb
 
 bb:
-  %RHS = phi i32* [ %RHS.next, %bb ], [ %tmp, %entry ]
-  %LHS = getelementptr i32, i32* %A, i32 100
-  %RHS.next = getelementptr i32, i32* %RHS, i64 1
-  %cond = icmp ult i32 * %LHS, %RHS
+  %RHS = phi ptr [ %RHS.next, %bb ], [ %tmp, %entry ]
+  %LHS = getelementptr i32, ptr %A, i32 100
+  %RHS.next = getelementptr i32, ptr %RHS, i64 1
+  %cond = icmp ult ptr %LHS, %RHS
   br i1 %cond, label %bb2, label %bb
 
 bb2:
-  ret i32* %RHS
+  ret ptr %RHS
 }
 
 ; An inttoptr that requires an extension or truncation will be opaque when determining
 ; the base pointer. In this case we can still perform the transformation by considering
 ; A.ptr as being the base pointer.
-define i32 *@test4(i16 %A, i32 %Offset) {
+define ptr@test4(i16 %A, i32 %Offset) {
 ; CHECK-LABEL: @test4(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[BB:%.*]]
@@ -107,34 +107,34 @@ define i32 *@test4(i16 %A, i32 %Offset) {
 ; CHECK-NEXT:    br i1 [[COND]], label [[BB2:%.*]], label [[BB]]
 ; CHECK:       bb2:
 ; CHECK-NEXT:    [[TMP0:%.*]] = zext i16 [[A:%.*]] to i32
-; CHECK-NEXT:    [[RHSTO_PTR:%.*]] = inttoptr i32 [[TMP0]] to i32*
-; CHECK-NEXT:    [[RHS_PTR:%.*]] = getelementptr inbounds i32, i32* [[RHSTO_PTR]], i32 [[RHS_IDX]]
-; CHECK-NEXT:    ret i32* [[RHS_PTR]]
+; CHECK-NEXT:    [[RHSTO_PTR:%.*]] = inttoptr i32 [[TMP0]] to ptr
+; CHECK-NEXT:    [[RHS_PTR:%.*]] = getelementptr inbounds i32, ptr [[RHSTO_PTR]], i32 [[RHS_IDX]]
+; CHECK-NEXT:    ret ptr [[RHS_PTR]]
 ;
 entry:
-  %A.ptr = inttoptr i16 %A to i32*
-  %tmp = getelementptr inbounds i32, i32* %A.ptr, i32 %Offset
+  %A.ptr = inttoptr i16 %A to ptr
+  %tmp = getelementptr inbounds i32, ptr %A.ptr, i32 %Offset
   br label %bb
 
 bb:
-  %RHS = phi i32* [ %RHS.next, %bb ], [ %tmp, %entry ]
-  %LHS = getelementptr inbounds i32, i32* %A.ptr, i32 100
-  %RHS.next = getelementptr inbounds i32, i32* %RHS, i64 1
-  %cmp0 = ptrtoint i32 *%LHS to i32
-  %cmp1 = ptrtoint i32 *%RHS to i32
+  %RHS = phi ptr [ %RHS.next, %bb ], [ %tmp, %entry ]
+  %LHS = getelementptr inbounds i32, ptr %A.ptr, i32 100
+  %RHS.next = getelementptr inbounds i32, ptr %RHS, i64 1
+  %cmp0 = ptrtoint ptr %LHS to i32
+  %cmp1 = ptrtoint ptr %RHS to i32
   %cond = icmp ult i32 %cmp0, %cmp1
   br i1 %cond, label %bb2, label %bb
 
 bb2:
-  ret i32* %RHS
+  ret ptr %RHS
 }
 
-declare i32* @fun_ptr()
+declare ptr @fun_ptr()
 
-define i32 *@test5(i32 %Offset) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define ptr@test5(i32 %Offset) personality ptr @__gxx_personality_v0 {
 ; CHECK-LABEL: @test5(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A:%.*]] = invoke i32* @fun_ptr()
+; CHECK-NEXT:    [[A:%.*]] = invoke ptr @fun_ptr()
 ; CHECK-NEXT:    to label [[CONT:%.*]] unwind label [[LPAD:%.*]]
 ; CHECK:       cont:
 ; CHECK-NEXT:    br label [[BB:%.*]]
@@ -144,38 +144,38 @@ define i32 *@test5(i32 %Offset) personality i8* bitcast (i32 (...)* @__gxx_perso
 ; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[RHS_IDX]], 100
 ; CHECK-NEXT:    br i1 [[COND]], label [[BB2:%.*]], label [[BB]]
 ; CHECK:       bb2:
-; CHECK-NEXT:    [[RHS_PTR:%.*]] = getelementptr inbounds i32, i32* [[A]], i32 [[RHS_IDX]]
-; CHECK-NEXT:    ret i32* [[RHS_PTR]]
+; CHECK-NEXT:    [[RHS_PTR:%.*]] = getelementptr inbounds i32, ptr [[A]], i32 [[RHS_IDX]]
+; CHECK-NEXT:    ret ptr [[RHS_PTR]]
 ; CHECK:       lpad:
-; CHECK-NEXT:    [[L:%.*]] = landingpad { i8*, i32 }
+; CHECK-NEXT:    [[L:%.*]] = landingpad { ptr, i32 }
 ; CHECK-NEXT:    cleanup
-; CHECK-NEXT:    ret i32* null
+; CHECK-NEXT:    ret ptr null
 ;
 entry:
-  %A = invoke i32 *@fun_ptr() to label %cont unwind label %lpad
+  %A = invoke ptr@fun_ptr() to label %cont unwind label %lpad
 
 cont:
-  %tmp = getelementptr inbounds i32, i32* %A, i32 %Offset
+  %tmp = getelementptr inbounds i32, ptr %A, i32 %Offset
   br label %bb
 
 bb:
-  %RHS = phi i32* [ %RHS.next, %bb ], [ %tmp, %cont ]
-  %LHS = getelementptr inbounds i32, i32* %A, i32 100
-  %RHS.next = getelementptr inbounds i32, i32* %RHS, i64 1
-  %cond = icmp ult i32 * %LHS, %RHS
+  %RHS = phi ptr [ %RHS.next, %bb ], [ %tmp, %cont ]
+  %LHS = getelementptr inbounds i32, ptr %A, i32 100
+  %RHS.next = getelementptr inbounds i32, ptr %RHS, i64 1
+  %cond = icmp ult ptr %LHS, %RHS
   br i1 %cond, label %bb2, label %bb
 
 bb2:
-  ret i32* %RHS
+  ret ptr %RHS
 
 lpad:
-  %l = landingpad { i8*, i32 } cleanup
-  ret i32* null
+  %l = landingpad { ptr, i32 } cleanup
+  ret ptr null
 }
 
 declare i32 @fun_i32()
 
-define i32 *@test6(i32 %Offset) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define ptr@test6(i32 %Offset) personality ptr @__gxx_personality_v0 {
 ; CHECK-LABEL: @test6(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[A:%.*]] = invoke i32 @fun_i32()
@@ -188,35 +188,35 @@ define i32 *@test6(i32 %Offset) personality i8* bitcast (i32 (...)* @__gxx_perso
 ; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[RHS_IDX]], 100
 ; CHECK-NEXT:    br i1 [[COND]], label [[BB2:%.*]], label [[BB]]
 ; CHECK:       bb2:
-; CHECK-NEXT:    [[RHSTO_PTR:%.*]] = inttoptr i32 [[A]] to i32*
-; CHECK-NEXT:    [[RHS_PTR:%.*]] = getelementptr inbounds i32, i32* [[RHSTO_PTR]], i32 [[RHS_IDX]]
-; CHECK-NEXT:    ret i32* [[RHS_PTR]]
+; CHECK-NEXT:    [[RHSTO_PTR:%.*]] = inttoptr i32 [[A]] to ptr
+; CHECK-NEXT:    [[RHS_PTR:%.*]] = getelementptr inbounds i32, ptr [[RHSTO_PTR]], i32 [[RHS_IDX]]
+; CHECK-NEXT:    ret ptr [[RHS_PTR]]
 ; CHECK:       lpad:
-; CHECK-NEXT:    [[L:%.*]] = landingpad { i8*, i32 }
+; CHECK-NEXT:    [[L:%.*]] = landingpad { ptr, i32 }
 ; CHECK-NEXT:    cleanup
-; CHECK-NEXT:    ret i32* null
+; CHECK-NEXT:    ret ptr null
 ;
 entry:
   %A = invoke i32 @fun_i32() to label %cont unwind label %lpad
 
 cont:
-  %A.ptr = inttoptr i32 %A to i32*
-  %tmp = getelementptr inbounds i32, i32* %A.ptr, i32 %Offset
+  %A.ptr = inttoptr i32 %A to ptr
+  %tmp = getelementptr inbounds i32, ptr %A.ptr, i32 %Offset
   br label %bb
 
 bb:
-  %RHS = phi i32* [ %RHS.next, %bb ], [ %tmp, %cont ]
-  %LHS = getelementptr inbounds i32, i32* %A.ptr, i32 100
-  %RHS.next = getelementptr inbounds i32, i32* %RHS, i64 1
-  %cond = icmp ult i32 * %LHS, %RHS
+  %RHS = phi ptr [ %RHS.next, %bb ], [ %tmp, %cont ]
+  %LHS = getelementptr inbounds i32, ptr %A.ptr, i32 100
+  %RHS.next = getelementptr inbounds i32, ptr %RHS, i64 1
+  %cond = icmp ult ptr %LHS, %RHS
   br i1 %cond, label %bb2, label %bb
 
 bb2:
-  ret i32* %RHS
+  ret ptr %RHS
 
 lpad:
-  %l = landingpad { i8*, i32 } cleanup
-  ret i32* null
+  %l = landingpad { ptr, i32 } cleanup
+  ret ptr null
 }
 
 
@@ -235,8 +235,8 @@ entry:
   br label %bb7
 
 bb7:                                              ; preds = %bb10, %entry-block
-  %phi = phi i64* [ @pr30402, %entry ], [ getelementptr inbounds (i64, i64* @pr30402, i32 1), %bb7 ]
-  %cmp = icmp eq i64* %phi, getelementptr inbounds (i64, i64* @pr30402, i32 1)
+  %phi = phi ptr [ @pr30402, %entry ], [ getelementptr inbounds (i64, ptr @pr30402, i32 1), %bb7 ]
+  %cmp = icmp eq ptr %phi, getelementptr inbounds (i64, ptr @pr30402, i32 1)
   br i1 %cmp, label %bb10, label %bb7
 
 bb10:
@@ -245,33 +245,31 @@ bb10:
 
 declare i32 @__gxx_personality_v0(...)
 
-define i1 @test8(i64* %in, i64 %offset) {
+define i1 @test8(ptr %in, i64 %offset) {
 ; CHECK-LABEL: @test8(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[LD:%.*]] = load i64, i64* [[IN:%.*]], align 8
+; CHECK-NEXT:    [[LD:%.*]] = load i64, ptr [[IN:%.*]], align 8
 ; CHECK-NEXT:    [[TMP0:%.*]] = trunc i64 [[LD]] to i32
-; CHECK-NEXT:    [[CASTI8:%.*]] = inttoptr i32 [[TMP0]] to i8*
+; CHECK-NEXT:    [[CASTI8:%.*]] = inttoptr i32 [[TMP0]] to ptr
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i64 [[OFFSET:%.*]] to i32
-; CHECK-NEXT:    [[GEPI8:%.*]] = getelementptr inbounds i8, i8* [[CASTI8]], i32 [[TMP1]]
-; CHECK-NEXT:    [[CAST:%.*]] = bitcast i8* [[GEPI8]] to i32**
+; CHECK-NEXT:    [[GEPI8:%.*]] = getelementptr inbounds i8, ptr [[CASTI8]], i32 [[TMP1]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = trunc i64 [[LD]] to i32
-; CHECK-NEXT:    [[PTRCAST:%.*]] = inttoptr i32 [[TMP2]] to i32**
-; CHECK-NEXT:    [[GEPI32:%.*]] = getelementptr inbounds i32*, i32** [[PTRCAST]], i32 1
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32** [[GEPI32]], [[CAST]]
+; CHECK-NEXT:    [[PTRCAST:%.*]] = inttoptr i32 [[TMP2]] to ptr
+; CHECK-NEXT:    [[GEPI32:%.*]] = getelementptr inbounds ptr, ptr [[PTRCAST]], i32 1
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[GEPI32]], [[GEPI8]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
 entry:
-  %ld = load i64, i64* %in, align 8
-  %casti8 = inttoptr i64 %ld to i8*
-  %gepi8 = getelementptr inbounds i8, i8* %casti8, i64 %offset
-  %cast = bitcast i8* %gepi8 to i32**
-  %ptrcast = inttoptr i64 %ld to i32**
-  %gepi32 = getelementptr inbounds i32*, i32** %ptrcast, i64 1
-  %cmp = icmp eq i32** %gepi32, %cast
+  %ld = load i64, ptr %in, align 8
+  %casti8 = inttoptr i64 %ld to ptr
+  %gepi8 = getelementptr inbounds i8, ptr %casti8, i64 %offset
+  %ptrcast = inttoptr i64 %ld to ptr
+  %gepi32 = getelementptr inbounds ptr, ptr %ptrcast, i64 1
+  %cmp = icmp eq ptr %gepi32, %gepi8
   ret i1 %cmp
 }
 
-define void @test_zero_offset_cycle({ i64, i64 }* %arg) {
+define void @test_zero_offset_cycle(ptr %arg) {
 ; CHECK-LABEL: @test_zero_offset_cycle(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[LOOP:%.*]]
@@ -281,17 +279,17 @@ define void @test_zero_offset_cycle({ i64, i64 }* %arg) {
 ; CHECK-NEXT:    br label [[LOOP]]
 ;
 entry:
-  %gep = getelementptr inbounds { i64, i64 }, { i64, i64 }* %arg, i32 0, i32 1
-  %gep.int = ptrtoint i64* %gep to i32
+  %gep = getelementptr inbounds { i64, i64 }, ptr %arg, i32 0, i32 1
+  %gep.int = ptrtoint ptr %gep to i32
   br label %loop
 
 loop:
   %phi = phi i32 [ %gep.int, %entry ], [ %gep.int2, %loop.cont ], [ %phi, %loop ]
-  %phi.ptr = inttoptr i32 %phi to i64*
-  %cmp = icmp eq i64* %gep, %phi.ptr
+  %phi.ptr = inttoptr i32 %phi to ptr
+  %cmp = icmp eq ptr %gep, %phi.ptr
   br i1 %cmp, label %loop, label %loop.cont
 
 loop.cont:
-  %gep.int2 = ptrtoint i64* %gep to i32
+  %gep.int2 = ptrtoint ptr %gep to i32
   br label %loop
 }
index 28b2988583b4f361f62f63edb52ecc7931965b77..b222671d2a6213c1e0e6c3c216abc05f9b778fbf 100644 (file)
@@ -199,10 +199,10 @@ bb3:
 ; PR26354: https://llvm.org/bugs/show_bug.cgi?id=26354
 ; Don't create a shufflevector if we know that we're not going to replace the insertelement.
 
-define double @pr26354(<2 x double>* %tmp, i1 %B) {
+define double @pr26354(ptr %tmp, i1 %B) {
 ; CHECK-LABEL: @pr26354(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[LD:%.*]] = load <2 x double>, <2 x double>* [[TMP:%.*]], align 16
+; CHECK-NEXT:    [[LD:%.*]] = load <2 x double>, ptr [[TMP:%.*]], align 16
 ; CHECK-NEXT:    br i1 [[B:%.*]], label [[IF:%.*]], label [[END:%.*]]
 ; CHECK:       if:
 ; CHECK-NEXT:    [[E2:%.*]] = extractelement <2 x double> [[LD]], i64 1
@@ -217,7 +217,7 @@ define double @pr26354(<2 x double>* %tmp, i1 %B) {
 ;
 
 entry:
-  %ld = load <2 x double>, <2 x double>* %tmp
+  %ld = load <2 x double>, ptr %tmp
   %e1 = extractelement <2 x double> %ld, i32 0
   %e2 = extractelement <2 x double> %ld, i32 1
   br i1 %B, label %if, label %end
@@ -240,7 +240,7 @@ define <4 x float> @PR30923(<2 x float> %x) {
 ; CHECK-LABEL: @PR30923(
 ; CHECK-NEXT:  bb1:
 ; CHECK-NEXT:    [[EXT1:%.*]] = extractelement <2 x float> [[X:%.*]], i64 1
-; CHECK-NEXT:    store float [[EXT1]], float* undef, align 4
+; CHECK-NEXT:    store float [[EXT1]], ptr undef, align 4
 ; CHECK-NEXT:    br label [[BB2:%.*]]
 ; CHECK:       bb2:
 ; CHECK-NEXT:    [[EXT2:%.*]] = extractelement <2 x float> [[X]], i64 0
@@ -250,7 +250,7 @@ define <4 x float> @PR30923(<2 x float> %x) {
 ;
 bb1:
   %ext1 = extractelement <2 x float> %x, i32 1
-  store float %ext1, float* undef, align 4
+  store float %ext1, ptr undef, align 4
   br label %bb2
 
 bb2:
index 9c93a9e32815977ff3a3f0988f59d59fef8d3d9d..6d11a424763425f3a8205d4482cdf07afabb76d9 100644 (file)
@@ -199,10 +199,10 @@ bb3:
 ; PR26354: https://llvm.org/bugs/show_bug.cgi?id=26354
 ; Don't create a shufflevector if we know that we're not going to replace the insertelement.
 
-define double @pr26354(<2 x double>* %tmp, i1 %B) {
+define double @pr26354(ptr %tmp, i1 %B) {
 ; CHECK-LABEL: @pr26354(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[LD:%.*]] = load <2 x double>, <2 x double>* [[TMP:%.*]], align 16
+; CHECK-NEXT:    [[LD:%.*]] = load <2 x double>, ptr [[TMP:%.*]], align 16
 ; CHECK-NEXT:    br i1 [[B:%.*]], label [[IF:%.*]], label [[END:%.*]]
 ; CHECK:       if:
 ; CHECK-NEXT:    [[E2:%.*]] = extractelement <2 x double> [[LD]], i64 1
@@ -217,7 +217,7 @@ define double @pr26354(<2 x double>* %tmp, i1 %B) {
 ;
 
 entry:
-  %ld = load <2 x double>, <2 x double>* %tmp
+  %ld = load <2 x double>, ptr %tmp
   %e1 = extractelement <2 x double> %ld, i32 0
   %e2 = extractelement <2 x double> %ld, i32 1
   br i1 %B, label %if, label %end
@@ -240,7 +240,7 @@ define <4 x float> @PR30923(<2 x float> %x) {
 ; CHECK-LABEL: @PR30923(
 ; CHECK-NEXT:  bb1:
 ; CHECK-NEXT:    [[EXT1:%.*]] = extractelement <2 x float> [[X:%.*]], i64 1
-; CHECK-NEXT:    store float [[EXT1]], float* undef, align 4
+; CHECK-NEXT:    store float [[EXT1]], ptr undef, align 4
 ; CHECK-NEXT:    br label [[BB2:%.*]]
 ; CHECK:       bb2:
 ; CHECK-NEXT:    [[EXT2:%.*]] = extractelement <2 x float> [[X]], i64 0
@@ -250,7 +250,7 @@ define <4 x float> @PR30923(<2 x float> %x) {
 ;
 bb1:
   %ext1 = extractelement <2 x float> %x, i32 1
-  store float %ext1, float* undef, align 4
+  store float %ext1, ptr undef, align 4
   br label %bb2
 
 bb2:
index 21408d0e72bcefb1e83bb7cadeb275b059fcee66..20a73186d9e018eb6ca1921a46709431232c5f78 100644 (file)
@@ -4,14 +4,14 @@
 ; CHECK-NOT: insertvalue
 ; CHECK-NOT: extractelement
 ; CHECK: store <2 x double>
-define void @julia_2xdouble([2 x double]* sret([2 x double]), <2 x double>*) {
+define void @julia_2xdouble(ptr sret([2 x double]), ptr) {
 top:
-  %x = load <2 x double>, <2 x double>* %1
+  %x = load <2 x double>, ptr %1
   %x0 = extractelement <2 x double> %x, i32 0
   %i0 = insertvalue [2 x double] undef, double %x0, 0
   %x1 = extractelement <2 x double> %x, i32 1
   %i1 = insertvalue [2 x double] %i0, double %x1, 1
-  store [2 x double] %i1, [2 x double]* %0, align 4
+  store [2 x double] %i1, ptr %0, align 4
   ret void
 }
 
@@ -20,16 +20,16 @@ top:
 ; CHECK-NOT: insertvalue
 ; CHECK-NOT: extractelement
 ; CHECK: store <2 x i64>
-define void @julia_2xi64([2 x i64]* sret([2 x i64]), <2 x i64>*) {
+define void @julia_2xi64(ptr sret([2 x i64]), ptr) {
 top:
-  %x = load <2 x i64>, <2 x i64>* %1
+  %x = load <2 x i64>, ptr %1
   %x0 = extractelement <2 x i64> %x, i32 1
   %i0 = insertvalue [2 x i64] undef, i64 %x0, 0
   %x1 = extractelement <2 x i64> %x, i32 1
   %i1 = insertvalue [2 x i64] %i0, i64 %x1, 1
   %x2 = extractelement <2 x i64> %x, i32 0
   %i2 = insertvalue [2 x i64] %i1, i64 %x2, 0
-  store [2 x i64] %i2, [2 x i64]* %0, align 4
+  store [2 x i64] %i2, ptr %0, align 4
   ret void
 }
 
@@ -37,9 +37,9 @@ top:
 ; CHECK-NOT: insertvalue
 ; CHECK-NOT: extractelement
 ; CHECK: store <4 x float>
-define void @julia_4xfloat([4 x float]* sret([4 x float]), <4 x float>*) {
+define void @julia_4xfloat(ptr sret([4 x float]), ptr) {
 top:
-  %x = load <4 x float>, <4 x float>* %1
+  %x = load <4 x float>, ptr %1
   %x0 = extractelement <4 x float> %x, i32 0
   %i0 = insertvalue [4 x float] undef, float %x0, 0
   %x1 = extractelement <4 x float> %x, i32 1
@@ -48,7 +48,7 @@ top:
   %i2 = insertvalue [4 x float] %i1, float %x2, 2
   %x3 = extractelement <4 x float> %x, i32 3
   %i3 = insertvalue [4 x float] %i2, float %x3, 3
-  store [4 x float] %i3, [4 x float]* %0, align 4
+  store [4 x float] %i3, ptr %0, align 4
   ret void
 }
 
@@ -58,9 +58,9 @@ top:
 ; CHECK-NOT: insertvalue
 ; CHECK-NOT: extractelement
 ; CHECK: store <4 x float>
-define void @julia_pseudovec(%pseudovec* sret(%pseudovec), <4 x float>*) {
+define void @julia_pseudovec(ptr sret(%pseudovec), ptr) {
 top:
-  %x = load <4 x float>, <4 x float>* %1
+  %x = load <4 x float>, ptr %1
   %x0 = extractelement <4 x float> %x, i32 0
   %i0 = insertvalue %pseudovec undef, float %x0, 0
   %x1 = extractelement <4 x float> %x, i32 1
@@ -69,6 +69,6 @@ top:
   %i2 = insertvalue %pseudovec %i1, float %x2, 2
   %x3 = extractelement <4 x float> %x, i32 3
   %i3 = insertvalue %pseudovec %i2, float %x3, 3
-  store %pseudovec %i3, %pseudovec* %0, align 4
+  store %pseudovec %i3, ptr %0, align 4
   ret void
 }
index a579a8fb81ec7a89acc218d8063c477eba1f0139..7105024526e6f0763c17c1da22b93ee3b155566b 100644 (file)
@@ -6,9 +6,9 @@ declare void @llvm.sideeffect()
 
 ; CHECK-LABEL: s2l
 ; CHECK-NOT: load
-define float @s2l(float* %p) {
-    store float 0.0, float* %p
+define float @s2l(ptr %p) {
+    store float 0.0, ptr %p
     call void @llvm.sideeffect()
-    %t = load float, float* %p
+    %t = load float, ptr %p
     ret float %t
 }
index 858b9b6e59bd4aa2b18e6f93e8a3ad149fb078ea..fc1597e6c9761dcdbe8ecf51a89d9f35a05df6e3 100644 (file)
@@ -5,7 +5,7 @@
 ;              for (int j = 0; j <  n;j+=1)
 ;                      for (int k = 0; k < n; k += 1)
 ;                              for (int l = 0; l < n; l += 1) {
-;                                      double *p = &A[i + j + k + l];
+;                                      ptr p = &A[i + j + k + l];
 ;                                      double x = *p;
 ;                                      double y = *p;
 ;                                      arg(x + y);
@@ -23,7 +23,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 
 declare void @arg(double)
 
-define void @func(i64 %n, double* noalias nonnull %A) {
+define void @func(i64 %n, ptr noalias nonnull %A) {
 entry:
   br label %for.cond
 
@@ -56,9 +56,9 @@ for.body19:
   %add20 = add nsw i32 %add, %k.0
   %add21 = add nsw i32 %add20, %l.0
   %idxprom = sext i32 %add21 to i64
-  %arrayidx = getelementptr inbounds double, double* %A, i64 %idxprom
-  %0 = load double, double* %arrayidx, align 8, !llvm.access.group !1
-  %1 = load double, double* %arrayidx, align 8, !llvm.access.group !2
+  %arrayidx = getelementptr inbounds double, ptr %A, i64 %idxprom
+  %0 = load double, ptr %arrayidx, align 8, !llvm.access.group !1
+  %1 = load double, ptr %arrayidx, align 8, !llvm.access.group !2
   %add22 = fadd double %0, %1
   call void @arg(double %add22), !llvm.access.group !3
   %add23 = add nsw i32 %l.0, 1
index 5ba8519583fe9175c5e8b0cf1c42fe7115bb13b2..37febe3ee49834c7dac482840a52d35fa6a0a348 100644 (file)
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s  -passes=instcombine  -S | FileCheck %s
 
-define void @test1(float* %a, float* readnone %a_end, i64* %b.i64) {
+define void @test1(ptr %a, ptr readnone %a_end, ptr %b.i64) {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult float* [[A:%.*]], [[A_END:%.*]]
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult ptr [[A:%.*]], [[A_END:%.*]]
 ; CHECK-NEXT:    br i1 [[CMP1]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
 ; CHECK:       for.body.preheader:
-; CHECK-NEXT:    [[B:%.*]] = load i64, i64* [[B_I64:%.*]], align 8
-; CHECK-NEXT:    [[B_PTR:%.*]] = inttoptr i64 [[B]] to float*
+; CHECK-NEXT:    [[B:%.*]] = load i64, ptr [[B_I64:%.*]], align 8
+; CHECK-NEXT:    [[B_PTR:%.*]] = inttoptr i64 [[B]] to ptr
 ; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
 ; CHECK:       for.body:
-; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi float* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[B_ADDR_02_PTR:%.*]] = phi float* [ [[ADD:%.*]], [[FOR_BODY]] ], [ [[B_PTR]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[I1:%.*]] = load float, float* [[B_ADDR_02_PTR]], align 4
+; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[B_ADDR_02_PTR:%.*]] = phi ptr [ [[ADD:%.*]], [[FOR_BODY]] ], [ [[B_PTR]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[I1:%.*]] = load float, ptr [[B_ADDR_02_PTR]], align 4
 ; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[I1]], 4.200000e+01
-; CHECK-NEXT:    store float [[MUL_I]], float* [[A_ADDR_03]], align 4
-; CHECK-NEXT:    [[ADD]] = getelementptr inbounds float, float* [[B_ADDR_02_PTR]], i64 1
-; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, float* [[A_ADDR_03]], i64 1
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ult float* [[INCDEC_PTR]], [[A_END]]
+; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 4
+; CHECK-NEXT:    [[ADD]] = getelementptr inbounds float, ptr [[B_ADDR_02_PTR]], i64 1
+; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, ptr [[A_ADDR_03]], i64 1
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[INCDEC_PTR]], [[A_END]]
 ; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]
 ; CHECK:       for.end:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %cmp1 = icmp ult float* %a, %a_end
+  %cmp1 = icmp ult ptr %a, %a_end
   br i1 %cmp1, label %for.body.preheader, label %for.end
 
 for.body.preheader:                               ; preds = %entry
-  %b = load i64, i64* %b.i64, align 8
+  %b = load i64, ptr %b.i64, align 8
   br label %for.body
 
 for.body:                                         ; preds = %for.body, %for.body.preheader
-  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]
+  %a.addr.03 = phi ptr [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]
   %b.addr.02 = phi i64 [ %add.int, %for.body ], [ %b, %for.body.preheader ]
 
 
-  %tmp = inttoptr i64 %b.addr.02 to float*
-  %i1 = load float, float* %tmp, align 4
+  %tmp = inttoptr i64 %b.addr.02 to ptr
+  %i1 = load float, ptr %tmp, align 4
   %mul.i = fmul float %i1, 4.200000e+01
-  store float %mul.i, float* %a.addr.03, align 4
-  %add = getelementptr inbounds float, float* %tmp, i64 1
-  %add.int = ptrtoint float* %add to i64
-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1
-  %cmp = icmp ult float* %incdec.ptr, %a_end
+  store float %mul.i, ptr %a.addr.03, align 4
+  %add = getelementptr inbounds float, ptr %tmp, i64 1
+  %add.int = ptrtoint ptr %add to i64
+  %incdec.ptr = getelementptr inbounds float, ptr %a.addr.03, i64 1
+  %cmp = icmp ult ptr %incdec.ptr, %a_end
   br i1 %cmp, label %for.body, label %for.end
 
 for.end:                                          ; preds = %for.body, %entry
   ret void
 }
 
-define void @test1_neg(float* %a, float* readnone %a_end, i64* %b.i64) {
+define void @test1_neg(ptr %a, ptr readnone %a_end, ptr %b.i64) {
 ; CHECK-LABEL: @test1_neg(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult float* [[A:%.*]], [[A_END:%.*]]
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult ptr [[A:%.*]], [[A_END:%.*]]
 ; CHECK-NEXT:    br i1 [[CMP1]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
 ; CHECK:       for.body.preheader:
-; CHECK-NEXT:    [[B:%.*]] = load i64, i64* [[B_I64:%.*]], align 8
+; CHECK-NEXT:    [[B:%.*]] = load i64, ptr [[B_I64:%.*]], align 8
 ; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
 ; CHECK:       for.body:
-; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi float* [ [[INCDEC_PTR:%.*]], [[BB:%.*]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[BB:%.*]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
 ; CHECK-NEXT:    [[B_ADDR_02:%.*]] = phi i64 [ [[ADD_INT:%.*]], [[BB]] ], [ [[B]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[TMP:%.*]] = inttoptr i64 [[B_ADDR_02]] to float*
-; CHECK-NEXT:    [[PTRCMP:%.*]] = icmp ult float* [[TMP]], [[A_END]]
+; CHECK-NEXT:    [[TMP:%.*]] = inttoptr i64 [[B_ADDR_02]] to ptr
+; CHECK-NEXT:    [[PTRCMP:%.*]] = icmp ult ptr [[TMP]], [[A_END]]
 ; CHECK-NEXT:    br i1 [[PTRCMP]], label [[FOR_END]], label [[BB]]
 ; CHECK:       bb:
-; CHECK-NEXT:    [[I1:%.*]] = load float, float* [[A]], align 4
+; CHECK-NEXT:    [[I1:%.*]] = load float, ptr [[A]], align 4
 ; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[I1]], 4.200000e+01
-; CHECK-NEXT:    store float [[MUL_I]], float* [[A_ADDR_03]], align 4
-; CHECK-NEXT:    [[ADD:%.*]] = getelementptr inbounds float, float* [[A]], i64 1
-; CHECK-NEXT:    [[ADD_INT]] = ptrtoint float* [[ADD]] to i64
-; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, float* [[A_ADDR_03]], i64 1
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ult float* [[INCDEC_PTR]], [[A_END]]
+; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 4
+; CHECK-NEXT:    [[ADD:%.*]] = getelementptr inbounds float, ptr [[A]], i64 1
+; CHECK-NEXT:    [[ADD_INT]] = ptrtoint ptr [[ADD]] to i64
+; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, ptr [[A_ADDR_03]], i64 1
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[INCDEC_PTR]], [[A_END]]
 ; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]
 ; CHECK:       for.end:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %cmp1 = icmp ult float* %a, %a_end
+  %cmp1 = icmp ult ptr %a, %a_end
   br i1 %cmp1, label %for.body.preheader, label %for.end
 
 for.body.preheader:                               ; preds = %entry
-  %b = load i64, i64* %b.i64, align 8
+  %b = load i64, ptr %b.i64, align 8
   br label %for.body
 
 for.body:                                         ; preds = %for.body, %for.body.preheader
-  %a.addr.03 = phi float* [ %incdec.ptr, %bb ], [ %a, %for.body.preheader ]
+  %a.addr.03 = phi ptr [ %incdec.ptr, %bb ], [ %a, %for.body.preheader ]
   %b.addr.02 = phi i64 [ %add.int, %bb ], [ %b, %for.body.preheader ]
 
 
-  %tmp = inttoptr i64 %b.addr.02 to float*
-  %ptrcmp = icmp ult float* %tmp, %a_end
+  %tmp = inttoptr i64 %b.addr.02 to ptr
+  %ptrcmp = icmp ult ptr %tmp, %a_end
   br i1 %ptrcmp, label %for.end, label %bb
 
 bb:
-  %i1 = load float, float* %a, align 4
+  %i1 = load float, ptr %a, align 4
   %mul.i = fmul float %i1, 4.200000e+01
-  store float %mul.i, float* %a.addr.03, align 4
-  %add = getelementptr inbounds float, float* %a, i64 1
-  %add.int = ptrtoint float* %add to i64
-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1
-  %cmp = icmp ult float* %incdec.ptr, %a_end
+  store float %mul.i, ptr %a.addr.03, align 4
+  %add = getelementptr inbounds float, ptr %a, i64 1
+  %add.int = ptrtoint ptr %add to i64
+  %incdec.ptr = getelementptr inbounds float, ptr %a.addr.03, i64 1
+  %cmp = icmp ult ptr %incdec.ptr, %a_end
   br i1 %cmp, label %for.body, label %for.end
 
 for.end:                                          ; preds = %for.body, %entry
@@ -108,51 +108,49 @@ for.end:                                          ; preds = %for.body, %entry
 }
 
 
-define void @test2(float* %a, float* readnone %a_end, float** %b.float) {
+define void @test2(ptr %a, ptr readnone %a_end, ptr %b.float) {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult float* [[A:%.*]], [[A_END:%.*]]
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult ptr [[A:%.*]], [[A_END:%.*]]
 ; CHECK-NEXT:    br i1 [[CMP1]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
 ; CHECK:       for.body.preheader:
-; CHECK-NEXT:    [[B_I64:%.*]] = bitcast float** [[B_FLOAT:%.*]] to i64*
-; CHECK-NEXT:    [[B:%.*]] = load i64, i64* [[B_I64]], align 8
-; CHECK-NEXT:    [[B_PTR:%.*]] = inttoptr i64 [[B]] to float*
+; CHECK-NEXT:    [[B:%.*]] = load i64, ptr [[B_FLOAT:%.*]], align 8
+; CHECK-NEXT:    [[B_PTR:%.*]] = inttoptr i64 [[B]] to ptr
 ; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
 ; CHECK:       for.body:
-; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi float* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[B_ADDR_02_PTR:%.*]] = phi float* [ [[ADD:%.*]], [[FOR_BODY]] ], [ [[B_PTR]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[I1:%.*]] = load float, float* [[B_ADDR_02_PTR]], align 4
+; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[B_ADDR_02_PTR:%.*]] = phi ptr [ [[ADD:%.*]], [[FOR_BODY]] ], [ [[B_PTR]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[I1:%.*]] = load float, ptr [[B_ADDR_02_PTR]], align 4
 ; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[I1]], 4.200000e+01
-; CHECK-NEXT:    store float [[MUL_I]], float* [[A_ADDR_03]], align 4
-; CHECK-NEXT:    [[ADD]] = getelementptr inbounds float, float* [[B_ADDR_02_PTR]], i64 1
-; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, float* [[A_ADDR_03]], i64 1
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ult float* [[INCDEC_PTR]], [[A_END]]
+; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 4
+; CHECK-NEXT:    [[ADD]] = getelementptr inbounds float, ptr [[B_ADDR_02_PTR]], i64 1
+; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, ptr [[A_ADDR_03]], i64 1
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[INCDEC_PTR]], [[A_END]]
 ; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]
 ; CHECK:       for.end:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %cmp1 = icmp ult float* %a, %a_end
+  %cmp1 = icmp ult ptr %a, %a_end
   br i1 %cmp1, label %for.body.preheader, label %for.end
 
 for.body.preheader:                               ; preds = %entry
-  %b.i64 = bitcast float** %b.float to i64*
-  %b = load i64, i64* %b.i64, align 8
+  %b = load i64, ptr %b.float, align 8
   br label %for.body
 
 for.body:                                         ; preds = %for.body, %for.body.preheader
-  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]
+  %a.addr.03 = phi ptr [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]
   %b.addr.02 = phi i64 [ %add.int, %for.body ], [ %b, %for.body.preheader ]
 
 
-  %tmp = inttoptr i64 %b.addr.02 to float*
-  %i1 = load float, float* %tmp, align 4
+  %tmp = inttoptr i64 %b.addr.02 to ptr
+  %i1 = load float, ptr %tmp, align 4
   %mul.i = fmul float %i1, 4.200000e+01
-  store float %mul.i, float* %a.addr.03, align 4
-  %add = getelementptr inbounds float, float* %tmp, i64 1
-  %add.int = ptrtoint float* %add to i64
-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1
-  %cmp = icmp ult float* %incdec.ptr, %a_end
+  store float %mul.i, ptr %a.addr.03, align 4
+  %add = getelementptr inbounds float, ptr %tmp, i64 1
+  %add.int = ptrtoint ptr %add to i64
+  %incdec.ptr = getelementptr inbounds float, ptr %a.addr.03, i64 1
+  %cmp = icmp ult ptr %incdec.ptr, %a_end
   br i1 %cmp, label %for.body, label %for.end
 
 for.end:                                          ; preds = %for.body, %entry
@@ -160,51 +158,49 @@ for.end:                                          ; preds = %for.body, %entry
 }
 
 
-define void @test3(float* %a, float* readnone %a_end, i8** %b.i8p) {
+define void @test3(ptr %a, ptr readnone %a_end, ptr %b.i8p) {
 ; CHECK-LABEL: @test3(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult float* [[A:%.*]], [[A_END:%.*]]
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult ptr [[A:%.*]], [[A_END:%.*]]
 ; CHECK-NEXT:    br i1 [[CMP1]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
 ; CHECK:       for.body.preheader:
-; CHECK-NEXT:    [[B_I64:%.*]] = bitcast i8** [[B_I8P:%.*]] to i64*
-; CHECK-NEXT:    [[B:%.*]] = load i64, i64* [[B_I64]], align 8
-; CHECK-NEXT:    [[B_PTR:%.*]] = inttoptr i64 [[B]] to float*
+; CHECK-NEXT:    [[B:%.*]] = load i64, ptr [[B_I8P:%.*]], align 8
+; CHECK-NEXT:    [[B_PTR:%.*]] = inttoptr i64 [[B]] to ptr
 ; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
 ; CHECK:       for.body:
-; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi float* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[B_ADDR_02_PTR:%.*]] = phi float* [ [[ADD:%.*]], [[FOR_BODY]] ], [ [[B_PTR]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[I1:%.*]] = load float, float* [[B_ADDR_02_PTR]], align 4
+; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[B_ADDR_02_PTR:%.*]] = phi ptr [ [[ADD:%.*]], [[FOR_BODY]] ], [ [[B_PTR]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[I1:%.*]] = load float, ptr [[B_ADDR_02_PTR]], align 4
 ; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[I1]], 4.200000e+01
-; CHECK-NEXT:    store float [[MUL_I]], float* [[A_ADDR_03]], align 4
-; CHECK-NEXT:    [[ADD]] = getelementptr inbounds float, float* [[B_ADDR_02_PTR]], i64 1
-; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, float* [[A_ADDR_03]], i64 1
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ult float* [[INCDEC_PTR]], [[A_END]]
+; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 4
+; CHECK-NEXT:    [[ADD]] = getelementptr inbounds float, ptr [[B_ADDR_02_PTR]], i64 1
+; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, ptr [[A_ADDR_03]], i64 1
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[INCDEC_PTR]], [[A_END]]
 ; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]
 ; CHECK:       for.end:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %cmp1 = icmp ult float* %a, %a_end
+  %cmp1 = icmp ult ptr %a, %a_end
   br i1 %cmp1, label %for.body.preheader, label %for.end
 
 for.body.preheader:                               ; preds = %entry
-  %b.i64 = bitcast i8** %b.i8p to i64*
-  %b = load i64, i64* %b.i64, align 8
+  %b = load i64, ptr %b.i8p, align 8
   br label %for.body
 
 for.body:                                         ; preds = %for.body, %for.body.preheader
-  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]
+  %a.addr.03 = phi ptr [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]
   %b.addr.02 = phi i64 [ %add.int, %for.body ], [ %b, %for.body.preheader ]
 
 
-  %tmp = inttoptr i64 %b.addr.02 to float*
-  %i1 = load float, float* %tmp, align 4
+  %tmp = inttoptr i64 %b.addr.02 to ptr
+  %i1 = load float, ptr %tmp, align 4
   %mul.i = fmul float %i1, 4.200000e+01
-  store float %mul.i, float* %a.addr.03, align 4
-  %add = getelementptr inbounds float, float* %tmp, i64 1
-  %add.int = ptrtoint float* %add to i64
-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1
-  %cmp = icmp ult float* %incdec.ptr, %a_end
+  store float %mul.i, ptr %a.addr.03, align 4
+  %add = getelementptr inbounds float, ptr %tmp, i64 1
+  %add.int = ptrtoint ptr %add to i64
+  %incdec.ptr = getelementptr inbounds float, ptr %a.addr.03, i64 1
+  %cmp = icmp ult ptr %incdec.ptr, %a_end
   br i1 %cmp, label %for.body, label %for.end
 
 for.end:                                          ; preds = %for.body, %entry
@@ -212,47 +208,47 @@ for.end:                                          ; preds = %for.body, %entry
 }
 
 
-define void @test4(float* %a, float* readnone %a_end, float** %b.float) {
+define void @test4(ptr %a, ptr readnone %a_end, ptr %b.float) {
 ; CHECK-LABEL: @test4(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult float* [[A:%.*]], [[A_END:%.*]]
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult ptr [[A:%.*]], [[A_END:%.*]]
 ; CHECK-NEXT:    br i1 [[CMP1]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
 ; CHECK:       for.body.preheader:
-; CHECK-NEXT:    [[B_F:%.*]] = load float*, float** [[B_FLOAT:%.*]], align 8
+; CHECK-NEXT:    [[B_F:%.*]] = load ptr, ptr [[B_FLOAT:%.*]], align 8
 ; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
 ; CHECK:       for.body:
-; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi float* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[B_ADDR_02_IN:%.*]] = phi float* [ [[ADD:%.*]], [[FOR_BODY]] ], [ [[B_F]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[I1:%.*]] = load float, float* [[B_ADDR_02_IN]], align 4
+; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[B_ADDR_02_IN:%.*]] = phi ptr [ [[ADD:%.*]], [[FOR_BODY]] ], [ [[B_F]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[I1:%.*]] = load float, ptr [[B_ADDR_02_IN]], align 4
 ; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[I1]], 4.200000e+01
-; CHECK-NEXT:    store float [[MUL_I]], float* [[A_ADDR_03]], align 4
-; CHECK-NEXT:    [[ADD]] = getelementptr inbounds float, float* [[B_ADDR_02_IN]], i64 1
-; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, float* [[A_ADDR_03]], i64 1
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ult float* [[INCDEC_PTR]], [[A_END]]
+; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 4
+; CHECK-NEXT:    [[ADD]] = getelementptr inbounds float, ptr [[B_ADDR_02_IN]], i64 1
+; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, ptr [[A_ADDR_03]], i64 1
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[INCDEC_PTR]], [[A_END]]
 ; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]
 ; CHECK:       for.end:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %cmp1 = icmp ult float* %a, %a_end
+  %cmp1 = icmp ult ptr %a, %a_end
   br i1 %cmp1, label %for.body.preheader, label %for.end
 
 for.body.preheader:                               ; preds = %entry
-  %b.f = load float*, float** %b.float, align 8
-  %b = ptrtoint float* %b.f to i64
+  %b.f = load ptr, ptr %b.float, align 8
+  %b = ptrtoint ptr %b.f to i64
   br label %for.body
 
 for.body:                                         ; preds = %for.body, %for.body.preheader
-  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]
+  %a.addr.03 = phi ptr [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]
   %b.addr.02 = phi i64 [ %add.int, %for.body ], [ %b, %for.body.preheader ]
-  %tmp = inttoptr i64 %b.addr.02 to float*
-  %i1 = load float, float* %tmp, align 4
+  %tmp = inttoptr i64 %b.addr.02 to ptr
+  %i1 = load float, ptr %tmp, align 4
   %mul.i = fmul float %i1, 4.200000e+01
-  store float %mul.i, float* %a.addr.03, align 4
-  %add = getelementptr inbounds float, float* %tmp, i64 1
-  %add.int = ptrtoint float* %add to i64
-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1
-  %cmp = icmp ult float* %incdec.ptr, %a_end
+  store float %mul.i, ptr %a.addr.03, align 4
+  %add = getelementptr inbounds float, ptr %tmp, i64 1
+  %add.int = ptrtoint ptr %add to i64
+  %incdec.ptr = getelementptr inbounds float, ptr %a.addr.03, i64 1
+  %cmp = icmp ult ptr %incdec.ptr, %a_end
   br i1 %cmp, label %for.body, label %for.end
 
 for.end:                                          ; preds = %for.body, %entry
index 4dd3ecc451a4de6c4f09ba38a91a795c7cd378be..f6e8843f3dd9b7f077f8e3477e29a780a7decd8e 100644 (file)
@@ -1,47 +1,47 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s  -passes=instcombine -S | FileCheck %s
 
-define  void @test(float* %a, float* readnone %a_end, i64 %b) unnamed_addr  {
+define  void @test(ptr %a, ptr readnone %a_end, i64 %b) unnamed_addr  {
 ; CHECK-LABEL: @test(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult float* [[A:%.*]], [[A_END:%.*]]
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult ptr [[A:%.*]], [[A_END:%.*]]
 ; CHECK-NEXT:    br i1 [[CMP1]], label [[FOR_BODY_PREHEADER:%.*]], label [[FOR_END:%.*]]
 ; CHECK:       for.body.preheader:
-; CHECK-NEXT:    [[B_FLOAT:%.*]] = inttoptr i64 [[B:%.*]] to float*
+; CHECK-NEXT:    [[B_FLOAT:%.*]] = inttoptr i64 [[B:%.*]] to ptr
 ; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
 ; CHECK:       for.body:
-; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi float* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[B_ADDR_FLOAT:%.*]] = phi float* [ [[B_ADDR_FLOAT_INC:%.*]], [[FOR_BODY]] ], [ [[B_FLOAT]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[L:%.*]] = load float, float* [[B_ADDR_FLOAT]], align 4
+; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[B_ADDR_FLOAT:%.*]] = phi ptr [ [[B_ADDR_FLOAT_INC:%.*]], [[FOR_BODY]] ], [ [[B_FLOAT]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[L:%.*]] = load float, ptr [[B_ADDR_FLOAT]], align 4
 ; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[L]], 4.200000e+01
-; CHECK-NEXT:    store float [[MUL_I]], float* [[A_ADDR_03]], align 4
-; CHECK-NEXT:    [[B_ADDR_FLOAT_INC]] = getelementptr inbounds float, float* [[B_ADDR_FLOAT]], i64 1
-; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, float* [[A_ADDR_03]], i64 1
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ult float* [[INCDEC_PTR]], [[A_END]]
+; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 4
+; CHECK-NEXT:    [[B_ADDR_FLOAT_INC]] = getelementptr inbounds float, ptr [[B_ADDR_FLOAT]], i64 1
+; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, ptr [[A_ADDR_03]], i64 1
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[INCDEC_PTR]], [[A_END]]
 ; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END]]
 ; CHECK:       for.end:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %cmp1 = icmp ult float* %a, %a_end
+  %cmp1 = icmp ult ptr %a, %a_end
   br i1 %cmp1, label %for.body.preheader, label %for.end
 
 for.body.preheader:                               ; preds = %entry
-  %b.float = inttoptr i64 %b to float*
+  %b.float = inttoptr i64 %b to ptr
   br label %for.body
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
-  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]
-  %b.addr.float = phi float* [ %b.addr.float.inc, %for.body ], [ %b.float, %for.body.preheader ]
+  %a.addr.03 = phi ptr [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]
+  %b.addr.float = phi ptr [ %b.addr.float.inc, %for.body ], [ %b.float, %for.body.preheader ]
   %b.addr.i64 = phi i64 [ %b.addr.i64.inc, %for.body ], [ %b, %for.body.preheader ]
-  %l = load float, float* %b.addr.float, align 4
+  %l = load float, ptr %b.addr.float, align 4
   %mul.i = fmul float %l, 4.200000e+01
-  store float %mul.i, float* %a.addr.03, align 4
-  %b.addr.float.2 = inttoptr i64 %b.addr.i64 to float*
-  %b.addr.float.inc = getelementptr inbounds float, float* %b.addr.float.2, i64 1
-  %b.addr.i64.inc = ptrtoint float* %b.addr.float.inc to i64
-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1
-  %cmp = icmp ult float* %incdec.ptr, %a_end
+  store float %mul.i, ptr %a.addr.03, align 4
+  %b.addr.float.2 = inttoptr i64 %b.addr.i64 to ptr
+  %b.addr.float.inc = getelementptr inbounds float, ptr %b.addr.float.2, i64 1
+  %b.addr.i64.inc = ptrtoint ptr %b.addr.float.inc to i64
+  %incdec.ptr = getelementptr inbounds float, ptr %a.addr.03, i64 1
+  %cmp = icmp ult ptr %incdec.ptr, %a_end
   br i1 %cmp, label %for.body, label %for.end
 
 for.end:                                          ; preds = %for.body, %entry
index f24067076e63880634572c0bba1af841c7537a03..333d278d0bf6d30abc66de8216a43c84206ae61b 100644 (file)
@@ -1,44 +1,44 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s  -passes=instcombine -S | FileCheck %s
 
-define  void @test(float* %a, float* readnone %a_end, i64 %b, float* %bf) unnamed_addr  {
+define  void @test(ptr %a, ptr readnone %a_end, i64 %b, ptr %bf) unnamed_addr  {
 ; CHECK-LABEL: @test(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult float* [[A:%.*]], [[A_END:%.*]]
-; CHECK-NEXT:    [[B_FLOAT:%.*]] = inttoptr i64 [[B:%.*]] to float*
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult ptr [[A:%.*]], [[A_END:%.*]]
+; CHECK-NEXT:    [[B_FLOAT:%.*]] = inttoptr i64 [[B:%.*]] to ptr
 ; CHECK-NEXT:    br i1 [[CMP1]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; CHECK:       bb1:
 ; CHECK-NEXT:    br label [[FOR_BODY_PREHEADER:%.*]]
 ; CHECK:       bb2:
-; CHECK-NEXT:    [[BFI:%.*]] = ptrtoint float* [[BF:%.*]] to i64
+; CHECK-NEXT:    [[BFI:%.*]] = ptrtoint ptr [[BF:%.*]] to i64
 ; CHECK-NEXT:    br label [[FOR_BODY_PREHEADER]]
 ; CHECK:       for.body.preheader:
 ; CHECK-NEXT:    [[B_PHI:%.*]] = phi i64 [ [[B]], [[BB1]] ], [ [[BFI]], [[BB2]] ]
-; CHECK-NEXT:    [[B_PHI_PTR:%.*]] = inttoptr i64 [[B_PHI]] to float*
+; CHECK-NEXT:    [[B_PHI_PTR:%.*]] = inttoptr i64 [[B_PHI]] to ptr
 ; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
 ; CHECK:       for.body:
-; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi float* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[B_ADDR_FLOAT:%.*]] = phi float* [ [[B_ADDR_FLOAT_INC:%.*]], [[FOR_BODY]] ], [ [[B_FLOAT]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[B_ADDR_I64_PTR:%.*]] = phi float* [ [[B_ADDR_FLOAT_INC]], [[FOR_BODY]] ], [ [[B_PHI_PTR]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[L:%.*]] = load float, float* [[B_ADDR_FLOAT]], align 4
+; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[B_ADDR_FLOAT:%.*]] = phi ptr [ [[B_ADDR_FLOAT_INC:%.*]], [[FOR_BODY]] ], [ [[B_FLOAT]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[B_ADDR_I64_PTR:%.*]] = phi ptr [ [[B_ADDR_FLOAT_INC]], [[FOR_BODY]] ], [ [[B_PHI_PTR]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[L:%.*]] = load float, ptr [[B_ADDR_FLOAT]], align 4
 ; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[L]], 4.200000e+01
-; CHECK-NEXT:    store float [[MUL_I]], float* [[A_ADDR_03]], align 4
-; CHECK-NEXT:    [[B_ADDR_FLOAT_INC]] = getelementptr inbounds float, float* [[B_ADDR_I64_PTR]], i64 1
-; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, float* [[A_ADDR_03]], i64 1
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ult float* [[INCDEC_PTR]], [[A_END]]
+; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 4
+; CHECK-NEXT:    [[B_ADDR_FLOAT_INC]] = getelementptr inbounds float, ptr [[B_ADDR_I64_PTR]], i64 1
+; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, ptr [[A_ADDR_03]], i64 1
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[INCDEC_PTR]], [[A_END]]
 ; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
 ; CHECK:       for.end:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %cmp1 = icmp ult float* %a, %a_end
-  %b.float = inttoptr i64 %b to float*
+  %cmp1 = icmp ult ptr %a, %a_end
+  %b.float = inttoptr i64 %b to ptr
   br i1 %cmp1, label %bb1, label %bb2
 
 bb1:
   br label %for.body.preheader
 bb2:
-  %bfi = ptrtoint float* %bf to i64
+  %bfi = ptrtoint ptr %bf to i64
   br label %for.body.preheader
 
 for.body.preheader:                               ; preds = %entry
@@ -46,17 +46,17 @@ for.body.preheader:                               ; preds = %entry
   br label %for.body
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
-  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]
-  %b.addr.float = phi float* [ %b.addr.float.inc, %for.body ], [ %b.float, %for.body.preheader ]
+  %a.addr.03 = phi ptr [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ]
+  %b.addr.float = phi ptr [ %b.addr.float.inc, %for.body ], [ %b.float, %for.body.preheader ]
   %b.addr.i64 = phi i64 [ %b.addr.i64.inc, %for.body ], [ %b.phi, %for.body.preheader ]
-  %l = load float, float* %b.addr.float, align 4
+  %l = load float, ptr %b.addr.float, align 4
   %mul.i = fmul float %l, 4.200000e+01
-  store float %mul.i, float* %a.addr.03, align 4
-  %b.addr.float.2 = inttoptr i64 %b.addr.i64 to float*
-  %b.addr.float.inc = getelementptr inbounds float, float* %b.addr.float.2, i64 1
-  %b.addr.i64.inc = ptrtoint float* %b.addr.float.inc to i64
-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1
-  %cmp = icmp ult float* %incdec.ptr, %a_end
+  store float %mul.i, ptr %a.addr.03, align 4
+  %b.addr.float.2 = inttoptr i64 %b.addr.i64 to ptr
+  %b.addr.float.inc = getelementptr inbounds float, ptr %b.addr.float.2, i64 1
+  %b.addr.i64.inc = ptrtoint ptr %b.addr.float.inc to i64
+  %incdec.ptr = getelementptr inbounds float, ptr %a.addr.03, i64 1
+  %cmp = icmp ult ptr %incdec.ptr, %a_end
   br i1 %cmp, label %for.body, label %for.end
 
 for.end:                                          ; preds = %for.body, %entry
index 7fd988f36033aa0ef4bea45cd5cf97a4664f4bb4..b88eb45c89a0245a0575a542296215a2973096f9 100644 (file)
@@ -1,46 +1,46 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s  -passes=instcombine -S | FileCheck %s
 
-define  void @test(float* %a, float* readnone %a_end, i64 %b, float* %bf) unnamed_addr  {
+define  void @test(ptr %a, ptr readnone %a_end, i64 %b, ptr %bf) unnamed_addr  {
 ; CHECK-LABEL: @test(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult float* [[A:%.*]], [[A_END:%.*]]
-; CHECK-NEXT:    [[B_FLOAT:%.*]] = inttoptr i64 [[B:%.*]] to float*
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult ptr [[A:%.*]], [[A_END:%.*]]
+; CHECK-NEXT:    [[B_FLOAT:%.*]] = inttoptr i64 [[B:%.*]] to ptr
 ; CHECK-NEXT:    br i1 [[CMP1]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; CHECK:       bb1:
 ; CHECK-NEXT:    br label [[FOR_BODY_PREHEADER:%.*]]
 ; CHECK:       bb2:
-; CHECK-NEXT:    [[BFI:%.*]] = ptrtoint float* [[BF:%.*]] to i64
+; CHECK-NEXT:    [[BFI:%.*]] = ptrtoint ptr [[BF:%.*]] to i64
 ; CHECK-NEXT:    br label [[FOR_BODY_PREHEADER]]
 ; CHECK:       for.body.preheader:
 ; CHECK-NEXT:    [[B_PHI:%.*]] = phi i64 [ [[B]], [[BB1]] ], [ [[BFI]], [[BB2]] ]
-; CHECK-NEXT:    [[B_PHI_PTR:%.*]] = inttoptr i64 [[B_PHI]] to float*
+; CHECK-NEXT:    [[B_PHI_PTR:%.*]] = inttoptr i64 [[B_PHI]] to ptr
 ; CHECK-NEXT:    switch i64 [[B]], label [[FOR_BODY:%.*]] [
 ; CHECK-NEXT:    i64 1, label [[FOR_BODY]]
 ; CHECK-NEXT:    ]
 ; CHECK:       for.body:
-; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi float* [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[B_ADDR_FLOAT:%.*]] = phi float* [ [[B_ADDR_FLOAT_INC:%.*]], [[FOR_BODY]] ], [ [[B_FLOAT]], [[FOR_BODY_PREHEADER]] ], [ [[B_FLOAT]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[B_ADDR_I64_PTR:%.*]] = phi float* [ [[B_ADDR_FLOAT_INC]], [[FOR_BODY]] ], [ [[B_PHI_PTR]], [[FOR_BODY_PREHEADER]] ], [ [[B_PHI_PTR]], [[FOR_BODY_PREHEADER]] ]
-; CHECK-NEXT:    [[L:%.*]] = load float, float* [[B_ADDR_FLOAT]], align 4
+; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[INCDEC_PTR:%.*]], [[FOR_BODY]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ], [ [[A]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[B_ADDR_FLOAT:%.*]] = phi ptr [ [[B_ADDR_FLOAT_INC:%.*]], [[FOR_BODY]] ], [ [[B_FLOAT]], [[FOR_BODY_PREHEADER]] ], [ [[B_FLOAT]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[B_ADDR_I64_PTR:%.*]] = phi ptr [ [[B_ADDR_FLOAT_INC]], [[FOR_BODY]] ], [ [[B_PHI_PTR]], [[FOR_BODY_PREHEADER]] ], [ [[B_PHI_PTR]], [[FOR_BODY_PREHEADER]] ]
+; CHECK-NEXT:    [[L:%.*]] = load float, ptr [[B_ADDR_FLOAT]], align 4
 ; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[L]], 4.200000e+01
-; CHECK-NEXT:    store float [[MUL_I]], float* [[A_ADDR_03]], align 4
-; CHECK-NEXT:    [[B_ADDR_FLOAT_INC]] = getelementptr inbounds float, float* [[B_ADDR_I64_PTR]], i64 1
-; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, float* [[A_ADDR_03]], i64 1
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ult float* [[INCDEC_PTR]], [[A_END]]
+; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 4
+; CHECK-NEXT:    [[B_ADDR_FLOAT_INC]] = getelementptr inbounds float, ptr [[B_ADDR_I64_PTR]], i64 1
+; CHECK-NEXT:    [[INCDEC_PTR]] = getelementptr inbounds float, ptr [[A_ADDR_03]], i64 1
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult ptr [[INCDEC_PTR]], [[A_END]]
 ; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
 ; CHECK:       for.end:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %cmp1 = icmp ult float* %a, %a_end
-  %b.float = inttoptr i64 %b to float*
+  %cmp1 = icmp ult ptr %a, %a_end
+  %b.float = inttoptr i64 %b to ptr
   br i1 %cmp1, label %bb1, label %bb2
 
 bb1:
   br label %for.body.preheader
 bb2:
-  %bfi = ptrtoint float* %bf to i64
+  %bfi = ptrtoint ptr %bf to i64
   br label %for.body.preheader
 
 for.body.preheader:                               ; preds = %entry
@@ -50,17 +50,17 @@ for.body.preheader:                               ; preds = %entry
   ]
 
 for.body:                                         ; preds = %for.body.preheader, %for.body
-  %a.addr.03 = phi float* [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ], [%a, %for.body.preheader]
-  %b.addr.float = phi float* [ %b.addr.float.inc, %for.body ], [ %b.float, %for.body.preheader ], [%b.float, %for.body.preheader]
+  %a.addr.03 = phi ptr [ %incdec.ptr, %for.body ], [ %a, %for.body.preheader ], [%a, %for.body.preheader]
+  %b.addr.float = phi ptr [ %b.addr.float.inc, %for.body ], [ %b.float, %for.body.preheader ], [%b.float, %for.body.preheader]
   %b.addr.i64 = phi i64 [ %b.addr.i64.inc, %for.body ], [ %b.phi, %for.body.preheader ], [ %b.phi, %for.body.preheader]
-  %l = load float, float* %b.addr.float, align 4
+  %l = load float, ptr %b.addr.float, align 4
   %mul.i = fmul float %l, 4.200000e+01
-  store float %mul.i, float* %a.addr.03, align 4
-  %b.addr.float.2 = inttoptr i64 %b.addr.i64 to float*
-  %b.addr.float.inc = getelementptr inbounds float, float* %b.addr.float.2, i64 1
-  %b.addr.i64.inc = ptrtoint float* %b.addr.float.inc to i64
-  %incdec.ptr = getelementptr inbounds float, float* %a.addr.03, i64 1
-  %cmp = icmp ult float* %incdec.ptr, %a_end
+  store float %mul.i, ptr %a.addr.03, align 4
+  %b.addr.float.2 = inttoptr i64 %b.addr.i64 to ptr
+  %b.addr.float.inc = getelementptr inbounds float, ptr %b.addr.float.2, i64 1
+  %b.addr.i64.inc = ptrtoint ptr %b.addr.float.inc to i64
+  %incdec.ptr = getelementptr inbounds float, ptr %a.addr.03, i64 1
+  %cmp = icmp ult ptr %incdec.ptr, %a_end
   br i1 %cmp, label %for.body, label %for.end
 
 for.end:                                          ; preds = %for.body, %entry
index e42c292cd54af79707a99a1c7a5ad91b2409402c..27ee6602943353dbb3318960656b210915e29026 100644 (file)
@@ -2,8 +2,8 @@
 ; no crash
 
 %A = type { %B }
-%B = type { %C *}
-%C = type <{ i32 (...)**, i32, [4 x i8] }>
+%B = type { ptr}
+%C = type <{ ptr, i32, [4 x i8] }>
 
 $foo = comdat any
 
@@ -12,17 +12,17 @@ $foo = comdat any
 declare i32 @__gxx_personality_v0(...)
 
 ; Function Attrs: inlinehint sanitize_memory uwtable
-define void @foo(i1 %c1) local_unnamed_addr #0 comdat align 2 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define void @foo(i1 %c1) local_unnamed_addr #0 comdat align 2 personality ptr @__gxx_personality_v0 {
 entry:
-  %0 = load %C*, %C** getelementptr inbounds (%A, %A* @bar, i64 0, i32 0, i32 0), align 8
-  %1 = ptrtoint %C* %0 to i64
-  %count.i.i.i23 = getelementptr inbounds %C, %C* %0, i64 0, i32 1
-  store i32 0, i32* %count.i.i.i23, align 8
-  %2 = invoke i8* @_Znwm() #3
+  %0 = load ptr, ptr @bar, align 8
+  %1 = ptrtoint ptr %0 to i64
+  %count.i.i.i23 = getelementptr inbounds %C, ptr %0, i64 0, i32 1
+  store i32 0, ptr %count.i.i.i23, align 8
+  %2 = invoke ptr @_Znwm() #3
           to label %invoke.cont unwind label %lpad
 
 invoke.cont:                                      ; preds = %entry
-  %call.i25 = invoke i8* @_Znwm() #3
+  %call.i25 = invoke ptr @_Znwm() #3
           to label %call.i.noexc unwind label %lpad4
 
 call.i.noexc:                                     ; preds = %invoke.cont
@@ -30,12 +30,12 @@ call.i.noexc:                                     ; preds = %invoke.cont
           to label %invoke.cont5 unwind label %lpad.i
 
 lpad.i:                                           ; preds = %call.i.noexc
-  %3 = landingpad { i8*, i32 }
+  %3 = landingpad { ptr, i32 }
           cleanup
   br label %ehcleanup
 
 invoke.cont5:                                     ; preds = %call.i.noexc
-  %4 = ptrtoint i8* %call.i25 to i64
+  %4 = ptrtoint ptr %call.i25 to i64
   invoke void @scale()
           to label %invoke.cont16 unwind label %lpad15
 
@@ -43,12 +43,12 @@ invoke.cont16:                                    ; preds = %invoke.cont5
   ret void
 
 lpad:                                             ; preds = %entry
-  %5 = landingpad { i8*, i32 }
+  %5 = landingpad { ptr, i32 }
           cleanup
   unreachable
 
 lpad4:                                            ; preds = %invoke.cont
-  %6 = landingpad { i8*, i32 }
+  %6 = landingpad { ptr, i32 }
           cleanup
   unreachable
 
@@ -56,26 +56,26 @@ ehcleanup:                                        ; preds = %lpad.i
   br label %ehcleanup21
 
 lpad15:                                           ; preds = %invoke.cont5
-  %7 = landingpad { i8*, i32 }
+  %7 = landingpad { ptr, i32 }
           cleanup
   br label %ehcleanup21
 
 ehcleanup21:                                      ; preds = %lpad15, %ehcleanup
   %actual_other.sroa.0.0 = phi i64 [ %1, %ehcleanup ], [ %4, %lpad15 ]
-  %8 = inttoptr i64 %actual_other.sroa.0.0 to %C*
+  %8 = inttoptr i64 %actual_other.sroa.0.0 to ptr
   br i1 %c1, label %_ZN4CGAL6HandleD2Ev.exit, label %land.lhs.true.i
 
 land.lhs.true.i:                                  ; preds = %ehcleanup21
-  %count.i = getelementptr inbounds %C, %C* %8, i64 0, i32 1
-  %9 = load i32, i32* %count.i, align 8
+  %count.i = getelementptr inbounds %C, ptr %8, i64 0, i32 1
+  %9 = load i32, ptr %count.i, align 8
   unreachable
 
 _ZN4CGAL6HandleD2Ev.exit:                         ; preds = %ehcleanup21
-  resume { i8*, i32 } undef
+  resume { ptr, i32 } undef
 }
 
 ; Function Attrs: nobuiltin
-declare noalias nonnull i8* @_Znwm() local_unnamed_addr #1
+declare noalias nonnull ptr @_Znwm() local_unnamed_addr #1
 
 ; Function Attrs: sanitize_memory uwtable
 declare void @scale() local_unnamed_addr #2 align 2
index 303fb714ef42afb318202843170b37e5390f7582..f640c87c5376d7ae41993e979bb873156294a201 100644 (file)
@@ -1,91 +1,91 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s  -passes=instcombine -S | FileCheck %s
 
-define void @matching_phi(i64 %a, float* %b, i1 %cond) {
+define void @matching_phi(i64 %a, ptr %b, i1 %cond) {
 ; CHECK-LABEL: @matching_phi(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[BB2:%.*]], label [[BB1:%.*]]
 ; CHECK:       bb1:
-; CHECK-NEXT:    [[ADDB:%.*]] = getelementptr inbounds float, float* [[B:%.*]], i64 2
+; CHECK-NEXT:    [[ADDB:%.*]] = getelementptr inbounds float, ptr [[B:%.*]], i64 2
 ; CHECK-NEXT:    br label [[BB3:%.*]]
 ; CHECK:       bb2:
 ; CHECK-NEXT:    [[ADD_INT:%.*]] = add i64 [[A:%.*]], 1
-; CHECK-NEXT:    [[ADD:%.*]] = inttoptr i64 [[ADD_INT]] to float*
-; CHECK-NEXT:    store float 1.000000e+01, float* [[ADD]], align 4
+; CHECK-NEXT:    [[ADD:%.*]] = inttoptr i64 [[ADD_INT]] to ptr
+; CHECK-NEXT:    store float 1.000000e+01, ptr [[ADD]], align 4
 ; CHECK-NEXT:    br label [[BB3]]
 ; CHECK:       bb3:
-; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi float* [ [[ADDB]], [[BB1]] ], [ [[ADD]], [[BB2]] ]
-; CHECK-NEXT:    [[I1:%.*]] = load float, float* [[A_ADDR_03]], align 4
+; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[ADDB]], [[BB1]] ], [ [[ADD]], [[BB2]] ]
+; CHECK-NEXT:    [[I1:%.*]] = load float, ptr [[A_ADDR_03]], align 4
 ; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[I1]], 4.200000e+01
-; CHECK-NEXT:    store float [[MUL_I]], float* [[A_ADDR_03]], align 4
+; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
   %cmp1 = icmp  eq i1 %cond, 0
   %add.int = add i64 %a, 1
-  %add = inttoptr i64 %add.int to float *
+  %add = inttoptr i64 %add.int to ptr
 
-  %addb = getelementptr inbounds float, float* %b, i64 2
-  %addb.int = ptrtoint float* %addb to i64
+  %addb = getelementptr inbounds float, ptr %b, i64 2
+  %addb.int = ptrtoint ptr %addb to i64
   br i1 %cmp1, label %bb1, label %bb2
 bb1:
   br label %bb3
 bb2:
-  store float 1.0e+01, float* %add, align 4
+  store float 1.0e+01, ptr %add, align 4
   br label %bb3
 
 bb3:
-  %a.addr.03 = phi float* [ %addb, %bb1 ], [ %add, %bb2 ]
+  %a.addr.03 = phi ptr [ %addb, %bb1 ], [ %add, %bb2 ]
   %b.addr.02 = phi i64 [ %addb.int, %bb1 ], [ %add.int, %bb2 ]
-  %i0 = inttoptr i64 %b.addr.02 to float*
-  %i1 = load float, float* %i0, align 4
+  %i0 = inttoptr i64 %b.addr.02 to ptr
+  %i1 = load float, ptr %i0, align 4
   %mul.i = fmul float %i1, 4.200000e+01
-  store float %mul.i, float* %a.addr.03, align 4
+  store float %mul.i, ptr %a.addr.03, align 4
   ret void
 }
 
-define void @no_matching_phi(i64 %a, float* %b, i1 %cond) {
+define void @no_matching_phi(i64 %a, ptr %b, i1 %cond) {
 ; CHECK-LABEL: @no_matching_phi(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[ADD_INT:%.*]] = add i64 [[A:%.*]], 1
-; CHECK-NEXT:    [[ADDB:%.*]] = getelementptr inbounds float, float* [[B:%.*]], i64 2
+; CHECK-NEXT:    [[ADDB:%.*]] = getelementptr inbounds float, ptr [[B:%.*]], i64 2
 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[B:%.*]], label [[A:%.*]]
 ; CHECK:       A:
 ; CHECK-NEXT:    br label [[C:%.*]]
 ; CHECK:       B:
-; CHECK-NEXT:    [[ADDB_INT:%.*]] = ptrtoint float* [[ADDB]] to i64
-; CHECK-NEXT:    [[ADD:%.*]] = inttoptr i64 [[ADD_INT]] to float*
-; CHECK-NEXT:    store float 1.000000e+01, float* [[ADD]], align 4
+; CHECK-NEXT:    [[ADDB_INT:%.*]] = ptrtoint ptr [[ADDB]] to i64
+; CHECK-NEXT:    [[ADD:%.*]] = inttoptr i64 [[ADD_INT]] to ptr
+; CHECK-NEXT:    store float 1.000000e+01, ptr [[ADD]], align 4
 ; CHECK-NEXT:    br label [[C]]
 ; CHECK:       C:
-; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi float* [ [[ADDB]], [[A]] ], [ [[ADD]], [[B]] ]
+; CHECK-NEXT:    [[A_ADDR_03:%.*]] = phi ptr [ [[ADDB]], [[A]] ], [ [[ADD]], [[B]] ]
 ; CHECK-NEXT:    [[B_ADDR_02:%.*]] = phi i64 [ [[ADD_INT]], [[A]] ], [ [[ADDB_INT]], [[B]] ]
-; CHECK-NEXT:    [[I0:%.*]] = inttoptr i64 [[B_ADDR_02]] to float*
-; CHECK-NEXT:    [[I1:%.*]] = load float, float* [[I0]], align 4
+; CHECK-NEXT:    [[I0:%.*]] = inttoptr i64 [[B_ADDR_02]] to ptr
+; CHECK-NEXT:    [[I1:%.*]] = load float, ptr [[I0]], align 4
 ; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[I1]], 4.200000e+01
-; CHECK-NEXT:    store float [[MUL_I]], float* [[A_ADDR_03]], align 4
+; CHECK-NEXT:    store float [[MUL_I]], ptr [[A_ADDR_03]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
   %cmp1 = icmp  eq i1 %cond, 0
   %add.int = add i64 %a, 1
-  %add = inttoptr i64 %add.int to float *
+  %add = inttoptr i64 %add.int to ptr
 
-  %addb = getelementptr inbounds float, float* %b, i64 2
-  %addb.int = ptrtoint float* %addb to i64
+  %addb = getelementptr inbounds float, ptr %b, i64 2
+  %addb.int = ptrtoint ptr %addb to i64
   br i1 %cmp1, label %A, label %B
 A:
   br label %C
 B:
-  store float 1.0e+01, float* %add, align 4
+  store float 1.0e+01, ptr %add, align 4
   br label %C
 
 C:
-  %a.addr.03 = phi float* [ %addb, %A ], [ %add, %B ]
+  %a.addr.03 = phi ptr [ %addb, %A ], [ %add, %B ]
   %b.addr.02 = phi i64 [ %addb.int, %B ], [ %add.int, %A ]
-  %i0 = inttoptr i64 %b.addr.02 to float*
-  %i1 = load float, float* %i0, align 4
+  %i0 = inttoptr i64 %b.addr.02 to ptr
+  %i1 = load float, ptr %i0, align 4
   %mul.i = fmul float %i1, 4.200000e+01
-  store float %mul.i, float* %a.addr.03, align 4
+  store float %mul.i, ptr %a.addr.03, align 4
   ret void
 }
index c29c87b3518ce2ba2fbfeaa6938c9ec8be1f74db..b03620a2f5a277a77be8147d46bd5a5d41d225fb 100644 (file)
@@ -5,23 +5,23 @@
 target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-pc-windows-msvc"
 
-%struct.intrusive_ptr = type { %struct.C* }
+%struct.intrusive_ptr = type { ptr }
 %struct.C = type { %struct.intrusive_ref_counter }
 %struct.intrusive_ref_counter = type { i32 }
 
-declare dso_local %struct.C* @"?mk@@YAPEAUC@@XZ"() #3
-declare dso_local void @"?intrusive_ptr_release@@YAXPEBUintrusive_ref_counter@@@Z"(%struct.intrusive_ref_counter*) #3
+declare dso_local ptr @"?mk@@YAPEAUC@@XZ"() #3
+declare dso_local void @"?intrusive_ptr_release@@YAXPEBUintrusive_ref_counter@@@Z"(ptr) #3
 declare dso_local void @"?terminate@@YAXXZ"()
 declare dso_local i32 @__CxxFrameHandler3(...)
 
-define dso_local void @"?crash@@YAXXZ"() local_unnamed_addr #0 personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) {
+define dso_local void @"?crash@@YAXXZ"() local_unnamed_addr #0 personality ptr @__CxxFrameHandler3 {
 entry:
-  %call1 = invoke %struct.C* @"?mk@@YAPEAUC@@XZ"()
+  %call1 = invoke ptr @"?mk@@YAPEAUC@@XZ"()
           to label %invoke.cont2 unwind label %catch.dispatch
 
 invoke.cont2:                                     ; preds = %entry
-  %0 = ptrtoint %struct.C* %call1 to i64
-  %call5 = invoke %struct.C* @"?mk@@YAPEAUC@@XZ"()
+  %0 = ptrtoint ptr %call1 to i64
+  %call5 = invoke ptr @"?mk@@YAPEAUC@@XZ"()
           to label %try.cont unwind label %catch.dispatch
 
 catch.dispatch:                                   ; preds = %invoke.cont2, %entry
@@ -29,46 +29,44 @@ catch.dispatch:                                   ; preds = %invoke.cont2, %entr
   %1 = catchswitch within none [label %catch] unwind label %ehcleanup
 
 catch:                                            ; preds = %catch.dispatch
-  %2 = catchpad within %1 [i8* null, i32 64, i8* null]
+  %2 = catchpad within %1 [ptr null, i32 64, ptr null]
   catchret from %2 to label %try.cont
 
 try.cont:                                         ; preds = %invoke.cont2, %catch
   %a.sroa.0.1 = phi i64 [ %0, %invoke.cont2 ], [ %a.sroa.0.0, %catch ]
-  %3 = inttoptr i64 %a.sroa.0.1 to %struct.C*
-  %tobool.i3 = icmp eq %struct.C* %3, null
+  %3 = inttoptr i64 %a.sroa.0.1 to ptr
+  %tobool.i3 = icmp eq ptr %3, null
   br i1 %tobool.i3, label %"??1?$intrusive_ptr@UC@@@@QEAA@XZ.exit6", label %if.then.i4
 
 if.then.i4:                                       ; preds = %try.cont
-  %4 = getelementptr %struct.C, %struct.C* %3, i64 0, i32 0
-  invoke void @"?intrusive_ptr_release@@YAXPEBUintrusive_ref_counter@@@Z"(%struct.intrusive_ref_counter* %4)
+  invoke void @"?intrusive_ptr_release@@YAXPEBUintrusive_ref_counter@@@Z"(ptr %3)
           to label %"??1?$intrusive_ptr@UC@@@@QEAA@XZ.exit6" unwind label %terminate.i5
 
 terminate.i5:                                     ; preds = %if.then.i4
-  %5 = cleanuppad within none []
-  call void @"?terminate@@YAXXZ"() #4 [ "funclet"(token %5) ]
+  %4 = cleanuppad within none []
+  call void @"?terminate@@YAXXZ"() #4 [ "funclet"(token %4) ]
   unreachable
 
 "??1?$intrusive_ptr@UC@@@@QEAA@XZ.exit6":         ; preds = %try.cont, %if.then.i4
   ret void
 
 ehcleanup:                                        ; preds = %catch.dispatch
-  %6 = cleanuppad within none []
-  %7 = inttoptr i64 %a.sroa.0.0 to %struct.C*
-  %tobool.i = icmp eq %struct.C* %7, null
+  %5 = cleanuppad within none []
+  %6 = inttoptr i64 %a.sroa.0.0 to ptr
+  %tobool.i = icmp eq ptr %6, null
   br i1 %tobool.i, label %"??1?$intrusive_ptr@UC@@@@QEAA@XZ.exit", label %if.then.i
 
 if.then.i:                                        ; preds = %ehcleanup
-  %8 = getelementptr %struct.C, %struct.C* %7, i64 0, i32 0
-  invoke void @"?intrusive_ptr_release@@YAXPEBUintrusive_ref_counter@@@Z"(%struct.intrusive_ref_counter* %8) [ "funclet"(token %6) ]
+  invoke void @"?intrusive_ptr_release@@YAXPEBUintrusive_ref_counter@@@Z"(ptr %6) [ "funclet"(token %5) ]
           to label %"??1?$intrusive_ptr@UC@@@@QEAA@XZ.exit" unwind label %terminate.i
 
 terminate.i:                                      ; preds = %if.then.i
-  %9 = cleanuppad within %6 []
-  call void @"?terminate@@YAXXZ"() #4 [ "funclet"(token %9) ]
+  %7 = cleanuppad within %5 []
+  call void @"?terminate@@YAXXZ"() #4 [ "funclet"(token %7) ]
   unreachable
 
 "??1?$intrusive_ptr@UC@@@@QEAA@XZ.exit":          ; preds = %ehcleanup, %if.then.i
-  cleanupret from %6 unwind to caller
+  cleanupret from %5 unwind to caller
 }
 
 ; CHECK-LABEL: define dso_local void @"?crash@@YAXXZ"
index 8d67301c36968251b826181a7c89091a456af4b2..68c307b47eb81f0b02128a35e1e7f242f5da0c84 100644 (file)
@@ -23,29 +23,29 @@ declare double @llvm.trunc.f64(double %Val) nounwind readonly
 declare double @llvm.rint.f64(double %Val) nounwind readonly
 declare double @llvm.nearbyint.f64(double %Val) nounwind readonly
 
-define void @powi(double %V, double *%P) {
+define void @powi(double %V, ptr %P) {
 ; CHECK-LABEL: @powi(
 ; CHECK-NEXT:    [[A:%.*]] = fdiv fast double 1.000000e+00, [[V:%.*]]
-; CHECK-NEXT:    store volatile double [[A]], double* [[P:%.*]], align 8
+; CHECK-NEXT:    store volatile double [[A]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[D:%.*]] = fmul nnan double [[V]], [[V]]
-; CHECK-NEXT:    store volatile double [[D]], double* [[P]], align 8
+; CHECK-NEXT:    store volatile double [[D]], ptr [[P]], align 8
 ; CHECK-NEXT:    [[A2:%.*]] = fdiv fast double 1.000000e+00, [[V]]
-; CHECK-NEXT:    store volatile double [[A2]], double* [[P]], align 8
+; CHECK-NEXT:    store volatile double [[A2]], ptr [[P]], align 8
 ; CHECK-NEXT:    [[D2:%.*]] = fmul nnan double [[V]], [[V]]
-; CHECK-NEXT:    store volatile double [[D2]], double* [[P]], align 8
+; CHECK-NEXT:    store volatile double [[D2]], ptr [[P]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %A = tail call fast double @llvm.powi.f64.i32(double %V, i32 -1) nounwind
-  store volatile double %A, double* %P
+  store volatile double %A, ptr %P
 
   %D = tail call nnan double @llvm.powi.f64.i32(double %V, i32 2) nounwind
-  store volatile double %D, double* %P
+  store volatile double %D, ptr %P
 
   %A2 = tail call fast double @llvm.powi.f64.i16(double %V, i16 -1) nounwind
-  store volatile double %A2, double* %P
+  store volatile double %A2, ptr %P
 
   %D2 = tail call nnan double @llvm.powi.f64.i16(double %V, i16 2) nounwind
-  store volatile double %D2, double* %P
+  store volatile double %D2, ptr %P
   ret void
 }
 
@@ -403,90 +403,90 @@ define <2 x i32> @cttz_select_vec(<2 x i32> %Value) nounwind {
   ret <2 x i32> %s
 }
 
-define void @cos(double *%P) {
+define void @cos(ptr %P) {
 ; CHECK-LABEL: @cos(
-; CHECK-NEXT:    store volatile double 1.000000e+00, double* [[P:%.*]], align 8
+; CHECK-NEXT:    store volatile double 1.000000e+00, ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %B = tail call double @llvm.cos.f64(double 0.0) nounwind
-  store volatile double %B, double* %P
+  store volatile double %B, ptr %P
 
   ret void
 }
 
-define void @sin(double *%P) {
+define void @sin(ptr %P) {
 ; CHECK-LABEL: @sin(
-; CHECK-NEXT:    store volatile double 0.000000e+00, double* [[P:%.*]], align 8
+; CHECK-NEXT:    store volatile double 0.000000e+00, ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %B = tail call double @llvm.sin.f64(double 0.0) nounwind
-  store volatile double %B, double* %P
+  store volatile double %B, ptr %P
 
   ret void
 }
 
-define void @floor(double *%P) {
+define void @floor(ptr %P) {
 ; CHECK-LABEL: @floor(
-; CHECK-NEXT:    store volatile double 1.000000e+00, double* [[P:%.*]], align 8
-; CHECK-NEXT:    store volatile double -2.000000e+00, double* [[P]], align 8
+; CHECK-NEXT:    store volatile double 1.000000e+00, ptr [[P:%.*]], align 8
+; CHECK-NEXT:    store volatile double -2.000000e+00, ptr [[P]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %B = tail call double @llvm.floor.f64(double 1.5) nounwind
-  store volatile double %B, double* %P
+  store volatile double %B, ptr %P
   %C = tail call double @llvm.floor.f64(double -1.5) nounwind
-  store volatile double %C, double* %P
+  store volatile double %C, ptr %P
   ret void
 }
 
-define void @ceil(double *%P) {
+define void @ceil(ptr %P) {
 ; CHECK-LABEL: @ceil(
-; CHECK-NEXT:    store volatile double 2.000000e+00, double* [[P:%.*]], align 8
-; CHECK-NEXT:    store volatile double -1.000000e+00, double* [[P]], align 8
+; CHECK-NEXT:    store volatile double 2.000000e+00, ptr [[P:%.*]], align 8
+; CHECK-NEXT:    store volatile double -1.000000e+00, ptr [[P]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %B = tail call double @llvm.ceil.f64(double 1.5) nounwind
-  store volatile double %B, double* %P
+  store volatile double %B, ptr %P
   %C = tail call double @llvm.ceil.f64(double -1.5) nounwind
-  store volatile double %C, double* %P
+  store volatile double %C, ptr %P
   ret void
 }
 
-define void @trunc(double *%P) {
+define void @trunc(ptr %P) {
 ; CHECK-LABEL: @trunc(
-; CHECK-NEXT:    store volatile double 1.000000e+00, double* [[P:%.*]], align 8
-; CHECK-NEXT:    store volatile double -1.000000e+00, double* [[P]], align 8
+; CHECK-NEXT:    store volatile double 1.000000e+00, ptr [[P:%.*]], align 8
+; CHECK-NEXT:    store volatile double -1.000000e+00, ptr [[P]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %B = tail call double @llvm.trunc.f64(double 1.5) nounwind
-  store volatile double %B, double* %P
+  store volatile double %B, ptr %P
   %C = tail call double @llvm.trunc.f64(double -1.5) nounwind
-  store volatile double %C, double* %P
+  store volatile double %C, ptr %P
   ret void
 }
 
-define void @rint(double *%P) {
+define void @rint(ptr %P) {
 ; CHECK-LABEL: @rint(
-; CHECK-NEXT:    store volatile double 2.000000e+00, double* [[P:%.*]], align 8
-; CHECK-NEXT:    store volatile double -2.000000e+00, double* [[P]], align 8
+; CHECK-NEXT:    store volatile double 2.000000e+00, ptr [[P:%.*]], align 8
+; CHECK-NEXT:    store volatile double -2.000000e+00, ptr [[P]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %B = tail call double @llvm.rint.f64(double 1.5) nounwind
-  store volatile double %B, double* %P
+  store volatile double %B, ptr %P
   %C = tail call double @llvm.rint.f64(double -1.5) nounwind
-  store volatile double %C, double* %P
+  store volatile double %C, ptr %P
   ret void
 }
 
-define void @nearbyint(double *%P) {
+define void @nearbyint(ptr %P) {
 ; CHECK-LABEL: @nearbyint(
-; CHECK-NEXT:    store volatile double 2.000000e+00, double* [[P:%.*]], align 8
-; CHECK-NEXT:    store volatile double -2.000000e+00, double* [[P]], align 8
+; CHECK-NEXT:    store volatile double 2.000000e+00, ptr [[P:%.*]], align 8
+; CHECK-NEXT:    store volatile double -2.000000e+00, ptr [[P]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %B = tail call double @llvm.nearbyint.f64(double 1.5) nounwind
-  store volatile double %B, double* %P
+  store volatile double %B, ptr %P
   %C = tail call double @llvm.nearbyint.f64(double -1.5) nounwind
-  store volatile double %C, double* %P
+  store volatile double %C, ptr %P
   ret void
 }
 
index da3d8a72992fdceede8b050d051deb61eb0bc944..098f666b370c8ba864a0695202994c444b363842 100644 (file)
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -instcombine -early-cse -earlycse-debug-hash -S < %s | FileCheck %s
 
-define i8* @simplifyNullLaunder() {
+define ptr @simplifyNullLaunder() {
 ; CHECK-LABEL: @simplifyNullLaunder(
-; CHECK-NEXT:    ret i8* null
+; CHECK-NEXT:    ret ptr null
 ;
-  %b2 = call i8* @llvm.launder.invariant.group.p0i8(i8* null)
-  ret i8* %b2
+  %b2 = call ptr @llvm.launder.invariant.group.p0(ptr null)
+  ret ptr %b2
 }
 
-define i8* @dontSimplifyNullLaunderNoNullOpt() #0 {
+define ptr @dontSimplifyNullLaunderNoNullOpt() #0 {
 ; CHECK-LABEL: @dontSimplifyNullLaunderNoNullOpt(
-; CHECK-NEXT:    [[B2:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* null)
-; CHECK-NEXT:    ret i8* [[B2]]
+; CHECK-NEXT:    [[B2:%.*]] = call ptr @llvm.launder.invariant.group.p0(ptr null)
+; CHECK-NEXT:    ret ptr [[B2]]
 ;
-  %b2 = call i8* @llvm.launder.invariant.group.p0i8(i8* null)
-  ret i8* %b2
+  %b2 = call ptr @llvm.launder.invariant.group.p0(ptr null)
+  ret ptr %b2
 }
 
-define i8 addrspace(42)* @dontsimplifyNullLaunderForDifferentAddrspace() {
+define ptr addrspace(42) @dontsimplifyNullLaunderForDifferentAddrspace() {
 ; CHECK-LABEL: @dontsimplifyNullLaunderForDifferentAddrspace(
-; CHECK-NEXT:    [[B2:%.*]] = call i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)* null)
-; CHECK-NEXT:    ret i8 addrspace(42)* [[B2]]
+; CHECK-NEXT:    [[B2:%.*]] = call ptr addrspace(42) @llvm.launder.invariant.group.p42(ptr addrspace(42) null)
+; CHECK-NEXT:    ret ptr addrspace(42) [[B2]]
 ;
-  %b2 = call i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)* null)
-  ret i8 addrspace(42)* %b2
+  %b2 = call ptr addrspace(42) @llvm.launder.invariant.group.p42(ptr addrspace(42) null)
+  ret ptr addrspace(42) %b2
 }
 
-define i8* @simplifyUndefLaunder() {
+define ptr @simplifyUndefLaunder() {
 ; CHECK-LABEL: @simplifyUndefLaunder(
-; CHECK-NEXT:    ret i8* undef
+; CHECK-NEXT:    ret ptr undef
 ;
-  %b2 = call i8* @llvm.launder.invariant.group.p0i8(i8* undef)
-  ret i8* %b2
+  %b2 = call ptr @llvm.launder.invariant.group.p0(ptr undef)
+  ret ptr %b2
 }
 
-define i8 addrspace(42)* @simplifyUndefLaunder2() {
+define ptr addrspace(42) @simplifyUndefLaunder2() {
 ; CHECK-LABEL: @simplifyUndefLaunder2(
-; CHECK-NEXT:    ret i8 addrspace(42)* undef
+; CHECK-NEXT:    ret ptr addrspace(42) undef
 ;
-  %b2 = call i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)* undef)
-  ret i8 addrspace(42)* %b2
+  %b2 = call ptr addrspace(42) @llvm.launder.invariant.group.p42(ptr addrspace(42) undef)
+  ret ptr addrspace(42) %b2
 }
 
-define i8* @simplifyNullStrip() {
+define ptr @simplifyNullStrip() {
 ; CHECK-LABEL: @simplifyNullStrip(
-; CHECK-NEXT:    ret i8* null
+; CHECK-NEXT:    ret ptr null
 ;
-  %b2 = call i8* @llvm.strip.invariant.group.p0i8(i8* null)
-  ret i8* %b2
+  %b2 = call ptr @llvm.strip.invariant.group.p0(ptr null)
+  ret ptr %b2
 }
 
-define i8* @dontSimplifyNullStripNonNullOpt() #0 {
+define ptr @dontSimplifyNullStripNonNullOpt() #0 {
 ; CHECK-LABEL: @dontSimplifyNullStripNonNullOpt(
-; CHECK-NEXT:    [[B2:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* null)
-; CHECK-NEXT:    ret i8* [[B2]]
+; CHECK-NEXT:    [[B2:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr null)
+; CHECK-NEXT:    ret ptr [[B2]]
 ;
-  %b2 = call i8* @llvm.strip.invariant.group.p0i8(i8* null)
-  ret i8* %b2
+  %b2 = call ptr @llvm.strip.invariant.group.p0(ptr null)
+  ret ptr %b2
 }
 
-define i8 addrspace(42)* @dontsimplifyNullStripForDifferentAddrspace() {
+define ptr addrspace(42) @dontsimplifyNullStripForDifferentAddrspace() {
 ; CHECK-LABEL: @dontsimplifyNullStripForDifferentAddrspace(
-; CHECK-NEXT:    [[B2:%.*]] = call i8 addrspace(42)* @llvm.strip.invariant.group.p42i8(i8 addrspace(42)* null)
-; CHECK-NEXT:    ret i8 addrspace(42)* [[B2]]
+; CHECK-NEXT:    [[B2:%.*]] = call ptr addrspace(42) @llvm.strip.invariant.group.p42(ptr addrspace(42) null)
+; CHECK-NEXT:    ret ptr addrspace(42) [[B2]]
 ;
-  %b2 = call i8 addrspace(42)* @llvm.strip.invariant.group.p42i8(i8 addrspace(42)* null)
-  ret i8 addrspace(42)* %b2
+  %b2 = call ptr addrspace(42) @llvm.strip.invariant.group.p42(ptr addrspace(42) null)
+  ret ptr addrspace(42) %b2
 }
 
-define i8* @simplifyUndefStrip() {
+define ptr @simplifyUndefStrip() {
 ; CHECK-LABEL: @simplifyUndefStrip(
-; CHECK-NEXT:    ret i8* undef
+; CHECK-NEXT:    ret ptr undef
 ;
-  %b2 = call i8* @llvm.strip.invariant.group.p0i8(i8* undef)
-  ret i8* %b2
+  %b2 = call ptr @llvm.strip.invariant.group.p0(ptr undef)
+  ret ptr %b2
 }
 
-define i8 addrspace(42)* @simplifyUndefStrip2() {
+define ptr addrspace(42) @simplifyUndefStrip2() {
 ; CHECK-LABEL: @simplifyUndefStrip2(
-; CHECK-NEXT:    ret i8 addrspace(42)* undef
+; CHECK-NEXT:    ret ptr addrspace(42) undef
 ;
-  %b2 = call i8 addrspace(42)* @llvm.strip.invariant.group.p42i8(i8 addrspace(42)* undef)
-  ret i8 addrspace(42)* %b2
+  %b2 = call ptr addrspace(42) @llvm.strip.invariant.group.p42(ptr addrspace(42) undef)
+  ret ptr addrspace(42) %b2
 }
 
-define i8* @simplifyLaunderOfLaunder(i8* %a) {
+define ptr @simplifyLaunderOfLaunder(ptr %a) {
 ; CHECK-LABEL: @simplifyLaunderOfLaunder(
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* [[A:%.*]])
-; CHECK-NEXT:    ret i8* [[TMP1]]
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @llvm.launder.invariant.group.p0(ptr [[A:%.*]])
+; CHECK-NEXT:    ret ptr [[TMP1]]
 ;
-  %a2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a)
-  %a3 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a2)
-  ret i8* %a3
+  %a2 = call ptr @llvm.launder.invariant.group.p0(ptr %a)
+  %a3 = call ptr @llvm.launder.invariant.group.p0(ptr %a2)
+  ret ptr %a3
 }
 
-define i8* @simplifyStripOfLaunder(i8* %a) {
+define ptr @simplifyStripOfLaunder(ptr %a) {
 ; CHECK-LABEL: @simplifyStripOfLaunder(
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* [[A:%.*]])
-; CHECK-NEXT:    ret i8* [[TMP1]]
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr [[A:%.*]])
+; CHECK-NEXT:    ret ptr [[TMP1]]
 ;
-  %a2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a)
-  %a3 = call i8* @llvm.strip.invariant.group.p0i8(i8* %a2)
-  ret i8* %a3
+  %a2 = call ptr @llvm.launder.invariant.group.p0(ptr %a)
+  %a3 = call ptr @llvm.strip.invariant.group.p0(ptr %a2)
+  ret ptr %a3
 }
 
-define i1 @simplifyForCompare(i8* %a) {
+define i1 @simplifyForCompare(ptr %a) {
 ; CHECK-LABEL: @simplifyForCompare(
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* [[A:%.*]])
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr [[A:%.*]])
 ; CHECK-NEXT:    ret i1 true
 ;
-  %a2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a)
+  %a2 = call ptr @llvm.launder.invariant.group.p0(ptr %a)
 
-  %a3 = call i8* @llvm.strip.invariant.group.p0i8(i8* %a2)
-  %b2 = call i8* @llvm.strip.invariant.group.p0i8(i8* %a)
-  %c = icmp eq i8* %a3, %b2
+  %a3 = call ptr @llvm.strip.invariant.group.p0(ptr %a2)
+  %b2 = call ptr @llvm.strip.invariant.group.p0(ptr %a)
+  %c = icmp eq ptr %a3, %b2
   ret i1 %c
 }
 
-define i16* @skipWithDifferentTypes(i8* %a) {
+define ptr @skipWithDifferentTypes(ptr %a) {
 ; CHECK-LABEL: @skipWithDifferentTypes(
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* [[A:%.*]])
-; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
-; CHECK-NEXT:    ret i16* [[TMP2]]
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr [[A:%.*]])
+; CHECK-NEXT:    ret ptr [[TMP1]]
 ;
-  %a2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a)
-  %c1 = bitcast i8* %a2 to i16*
+  %a2 = call ptr @llvm.launder.invariant.group.p0(ptr %a)
 
-  %a3 = call i16* @llvm.strip.invariant.group.p0i16(i16* %c1)
-  ret i16* %a3
+  %a3 = call ptr @llvm.strip.invariant.group.p0(ptr %a2)
+  ret ptr %a3
 }
 
-define i16 addrspace(42)* @skipWithDifferentTypesAddrspace(i8 addrspace(42)* %a) {
+define ptr addrspace(42) @skipWithDifferentTypesAddrspace(ptr addrspace(42) %a) {
 ; CHECK-LABEL: @skipWithDifferentTypesAddrspace(
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8 addrspace(42)* @llvm.strip.invariant.group.p42i8(i8 addrspace(42)* [[A:%.*]])
-; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i8 addrspace(42)* [[TMP1]] to i16 addrspace(42)*
-; CHECK-NEXT:    ret i16 addrspace(42)* [[TMP2]]
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr addrspace(42) @llvm.strip.invariant.group.p42(ptr addrspace(42) [[A:%.*]])
+; CHECK-NEXT:    ret ptr addrspace(42) [[TMP1]]
 ;
-  %a2 = call i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)* %a)
-  %c1 = bitcast i8 addrspace(42)* %a2 to i16 addrspace(42)*
+  %a2 = call ptr addrspace(42) @llvm.launder.invariant.group.p42(ptr addrspace(42) %a)
 
-  %a3 = call i16 addrspace(42)* @llvm.strip.invariant.group.p42i16(i16 addrspace(42)* %c1)
-  ret i16 addrspace(42)* %a3
+  %a3 = call ptr addrspace(42) @llvm.strip.invariant.group.p42(ptr addrspace(42) %a2)
+  ret ptr addrspace(42) %a3
 }
 
-define i16 addrspace(42)* @skipWithDifferentTypesDifferentAddrspace(i8* %a) {
+define ptr addrspace(42) @skipWithDifferentTypesDifferentAddrspace(ptr %a) {
 ; CHECK-LABEL: @skipWithDifferentTypesDifferentAddrspace(
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* [[A:%.*]])
-; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i8* [[TMP1]] to i16*
-; CHECK-NEXT:    [[TMP3:%.*]] = addrspacecast i16* [[TMP2]] to i16 addrspace(42)*
-; CHECK-NEXT:    ret i16 addrspace(42)* [[TMP3]]
+; CHECK-NEXT:    [[TMP1:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr [[A:%.*]])
+; CHECK-NEXT:    [[TMP3:%.*]] = addrspacecast ptr [[TMP1]] to ptr addrspace(42)
+; CHECK-NEXT:    ret ptr addrspace(42) [[TMP3]]
 ;
-  %cast = addrspacecast i8* %a to i8 addrspace(42)*
-  %a2 = call i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)* %cast)
-  %c1 = bitcast i8 addrspace(42)* %a2 to i16 addrspace(42)*
+  %cast = addrspacecast ptr %a to ptr addrspace(42)
+  %a2 = call ptr addrspace(42) @llvm.launder.invariant.group.p42(ptr addrspace(42) %cast)
 
-  %a3 = call i16 addrspace(42)* @llvm.strip.invariant.group.p42i16(i16 addrspace(42)* %c1)
-  ret i16 addrspace(42)* %a3
+  %a3 = call ptr addrspace(42) @llvm.strip.invariant.group.p42(ptr addrspace(42) %a2)
+  ret ptr addrspace(42) %a3
 }
 
-define i1 @icmp_null_launder(i8* %a) {
+define i1 @icmp_null_launder(ptr %a) {
 ; CHECK-LABEL: @icmp_null_launder(
-; CHECK-NEXT:    [[R:%.*]] = icmp eq i8* [[A:%.*]], null
+; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr [[A:%.*]], null
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %a2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a)
-  %r = icmp eq i8* %a2, null
+  %a2 = call ptr @llvm.launder.invariant.group.p0(ptr %a)
+  %r = icmp eq ptr %a2, null
   ret i1 %r
 }
 
-define i1 @icmp_null_strip(i8* %a) {
+define i1 @icmp_null_strip(ptr %a) {
 ; CHECK-LABEL: @icmp_null_strip(
-; CHECK-NEXT:    [[R:%.*]] = icmp eq i8* [[A:%.*]], null
+; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr [[A:%.*]], null
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %a2 = call i8* @llvm.strip.invariant.group.p0i8(i8* %a)
-  %r = icmp eq i8* %a2, null
+  %a2 = call ptr @llvm.strip.invariant.group.p0(ptr %a)
+  %r = icmp eq ptr %a2, null
   ret i1 %r
 }
 
-define i1 @icmp_null_launder_valid_null(i8* %a) #0 {
+define i1 @icmp_null_launder_valid_null(ptr %a) #0 {
 ; CHECK-LABEL: @icmp_null_launder_valid_null(
-; CHECK-NEXT:    [[A2:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* [[A:%.*]])
-; CHECK-NEXT:    [[R:%.*]] = icmp eq i8* [[A2]], null
+; CHECK-NEXT:    [[A2:%.*]] = call ptr @llvm.launder.invariant.group.p0(ptr [[A:%.*]])
+; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr [[A2]], null
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %a2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a)
-  %r = icmp eq i8* %a2, null
+  %a2 = call ptr @llvm.launder.invariant.group.p0(ptr %a)
+  %r = icmp eq ptr %a2, null
   ret i1 %r
 }
 
-define i1 @icmp_null_strip_valid_null(i8* %a) #0 {
+define i1 @icmp_null_strip_valid_null(ptr %a) #0 {
 ; CHECK-LABEL: @icmp_null_strip_valid_null(
-; CHECK-NEXT:    [[A2:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* [[A:%.*]])
-; CHECK-NEXT:    [[R:%.*]] = icmp eq i8* [[A2]], null
+; CHECK-NEXT:    [[A2:%.*]] = call ptr @llvm.strip.invariant.group.p0(ptr [[A:%.*]])
+; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr [[A2]], null
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %a2 = call i8* @llvm.strip.invariant.group.p0i8(i8* %a)
-  %r = icmp eq i8* %a2, null
+  %a2 = call ptr @llvm.strip.invariant.group.p0(ptr %a)
+  %r = icmp eq ptr %a2, null
   ret i1 %r
 }
 
 ; Check that null always becomes the RHS
-define i1 @icmp_null_launder_lhs(i8* %a) {
+define i1 @icmp_null_launder_lhs(ptr %a) {
 ; CHECK-LABEL: @icmp_null_launder_lhs(
-; CHECK-NEXT:    [[R:%.*]] = icmp eq i8* [[A:%.*]], null
+; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr [[A:%.*]], null
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %a2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a)
-  %r = icmp eq i8* null, %a2
+  %a2 = call ptr @llvm.launder.invariant.group.p0(ptr %a)
+  %r = icmp eq ptr null, %a2
   ret i1 %r
 }
 
-define i1 @icmp_null_launder_bitcasts(i32* %a) {
+define i1 @icmp_null_launder_bitcasts(ptr %a) {
 ; CHECK-LABEL: @icmp_null_launder_bitcasts(
-; CHECK-NEXT:    [[R:%.*]] = icmp eq i32* [[A:%.*]], null
+; CHECK-NEXT:    [[R:%.*]] = icmp eq ptr [[A:%.*]], null
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %a2 = bitcast i32* %a to i8*
-  %a3 = call i8* @llvm.launder.invariant.group.p0i8(i8* %a2)
-  %a4 = bitcast i8* %a3 to i32*
-  %r = icmp eq i32* %a4, null
+  %a3 = call ptr @llvm.launder.invariant.group.p0(ptr %a)
+  %r = icmp eq ptr %a3, null
   ret i1 %r
 }
 
-declare i8* @llvm.launder.invariant.group.p0i8(i8*)
-declare i8 addrspace(42)* @llvm.launder.invariant.group.p42i8(i8 addrspace(42)*)
-declare i8* @llvm.strip.invariant.group.p0i8(i8*)
-declare i8 addrspace(42)* @llvm.strip.invariant.group.p42i8(i8 addrspace(42)*)
-declare i16* @llvm.strip.invariant.group.p0i16(i16* %c1)
-declare i16 addrspace(42)* @llvm.strip.invariant.group.p42i16(i16 addrspace(42)* %c1)
+declare ptr @llvm.launder.invariant.group.p0(ptr)
+declare ptr addrspace(42) @llvm.launder.invariant.group.p42(ptr addrspace(42))
+declare ptr @llvm.strip.invariant.group.p0(ptr)
+declare ptr addrspace(42) @llvm.strip.invariant.group.p42(ptr addrspace(42))
 
 attributes #0 = { null_pointer_is_valid }
index 66136073571d1fbbb4a0d1bbd06cd733a61cd5b5..eb35787644b5c8c1b5a40a7409b1669115663ecd 100644 (file)
@@ -1,28 +1,28 @@
 ; Test to make sure unused llvm.invariant.start calls are not trivially eliminated
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare void @g(i8*)
-declare void @g_addr1(i8 addrspace(1)*)
+declare void @g(ptr)
+declare void @g_addr1(ptr addrspace(1))
 
-declare {}* @llvm.invariant.start.p0i8(i64, i8* nocapture) nounwind readonly
-declare {}* @llvm.invariant.start.p1i8(i64, i8 addrspace(1)* nocapture) nounwind readonly
+declare ptr @llvm.invariant.start.p0(i64, ptr nocapture) nounwind readonly
+declare ptr @llvm.invariant.start.p1(i64, ptr addrspace(1) nocapture) nounwind readonly
 
 define i8 @f() {
-  %a = alloca i8                                  ; <i8*> [#uses=4]
-  store i8 0, i8* %a
-  %i = call {}* @llvm.invariant.start.p0i8(i64 1, i8* %a) ; <{}*> [#uses=0]
-  ; CHECK: call {}* @llvm.invariant.start.p0i8
-  call void @g(i8* %a)
-  %r = load i8, i8* %a                                ; <i8> [#uses=1]
+  %a = alloca i8                                  ; <ptr> [#uses=4]
+  store i8 0, ptr %a
+  %i = call ptr @llvm.invariant.start.p0(i64 1, ptr %a) ; <ptr> [#uses=0]
+  ; CHECK: call ptr @llvm.invariant.start.p0
+  call void @g(ptr %a)
+  %r = load i8, ptr %a                                ; <i8> [#uses=1]
   ret i8 %r
 }
 
 ; make sure llvm.invariant.call in non-default addrspace are also not eliminated.
-define i8 @f_addrspace1(i8 addrspace(1)* %a) {
-  store i8 0, i8 addrspace(1)* %a
-  %i = call {}* @llvm.invariant.start.p1i8(i64 1, i8 addrspace(1)* %a) ; <{}*> [#uses=0]
-  ; CHECK: call {}* @llvm.invariant.start.p1i8
-  call void @g_addr1(i8 addrspace(1)* %a)
-  %r = load i8, i8 addrspace(1)* %a                                ; <i8> [#uses=1]
+define i8 @f_addrspace1(ptr addrspace(1) %a) {
+  store i8 0, ptr addrspace(1) %a
+  %i = call ptr @llvm.invariant.start.p1(i64 1, ptr addrspace(1) %a) ; <ptr> [#uses=0]
+  ; CHECK: call ptr @llvm.invariant.start.p1
+  call void @g_addr1(ptr addrspace(1) %a)
+  %r = load i8, ptr addrspace(1) %a                                ; <i8> [#uses=1]
   ret i8 %r
 }
index e595615b2aedd3a33237302c278caef39dda2c3c..7e64d9ed6015712c14570d079d6123f6fa59cf05 100644 (file)
@@ -2,85 +2,85 @@
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
 
 declare i32 @__gxx_personality_v0(...)
-declare void @__cxa_call_unexpected(i8*)
-declare i64 @llvm.objectsize.i64(i8*, i1) nounwind readonly
-declare i8* @_Znwm(i64)
+declare void @__cxa_call_unexpected(ptr)
+declare i64 @llvm.objectsize.i64(ptr, i1) nounwind readonly
+declare ptr @_Znwm(i64)
 
 
 ; CHECK-LABEL: @f1(
-define i64 @f1() nounwind uwtable ssp personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define i64 @f1() nounwind uwtable ssp personality ptr @__gxx_personality_v0 {
 entry:
-; CHECK: nvoke noalias i8* undef()
-  %call = invoke noalias i8* undef()
+; CHECK: nvoke noalias ptr undef()
+  %call = invoke noalias ptr undef()
           to label %invoke.cont unwind label %lpad
 
 invoke.cont:
 ; CHECK: ret i64 0
-  %0 = tail call i64 @llvm.objectsize.i64(i8* %call, i1 false)
+  %0 = tail call i64 @llvm.objectsize.i64(ptr %call, i1 false)
   ret i64 %0
 
 lpad:
-  %1 = landingpad { i8*, i32 }
-          filter [0 x i8*] zeroinitializer
-  %2 = extractvalue { i8*, i32 } %1, 0
-  tail call void @__cxa_call_unexpected(i8* %2) noreturn nounwind
+  %1 = landingpad { ptr, i32 }
+          filter [0 x ptr] zeroinitializer
+  %2 = extractvalue { ptr, i32 } %1, 0
+  tail call void @__cxa_call_unexpected(ptr %2) noreturn nounwind
   unreachable
 }
 
 ; CHECK-LABEL: @f2(
-define i64 @f2() nounwind uwtable ssp personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define i64 @f2() nounwind uwtable ssp personality ptr @__gxx_personality_v0 {
 entry:
-; CHECK: nvoke noalias i8* null()
-  %call = invoke noalias i8* null()
+; CHECK: nvoke noalias ptr null()
+  %call = invoke noalias ptr null()
           to label %invoke.cont unwind label %lpad
 
 invoke.cont:
 ; CHECK: ret i64 0
-  %0 = tail call i64 @llvm.objectsize.i64(i8* %call, i1 false)
+  %0 = tail call i64 @llvm.objectsize.i64(ptr %call, i1 false)
   ret i64 %0
 
 lpad:
-  %1 = landingpad { i8*, i32 }
-          filter [0 x i8*] zeroinitializer
-  %2 = extractvalue { i8*, i32 } %1, 0
-  tail call void @__cxa_call_unexpected(i8* %2) noreturn nounwind
+  %1 = landingpad { ptr, i32 }
+          filter [0 x ptr] zeroinitializer
+  %2 = extractvalue { ptr, i32 } %1, 0
+  tail call void @__cxa_call_unexpected(ptr %2) noreturn nounwind
   unreachable
 }
 
 ; CHECK-LABEL: @f2_no_null_opt(
-define i64 @f2_no_null_opt() nounwind uwtable ssp #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define i64 @f2_no_null_opt() nounwind uwtable ssp #0 personality ptr @__gxx_personality_v0 {
 entry:
-; CHECK: invoke noalias i8* null()
-  %call = invoke noalias i8* null()
+; CHECK: invoke noalias ptr null()
+  %call = invoke noalias ptr null()
           to label %invoke.cont unwind label %lpad
 
 invoke.cont:
-; CHECK: call i64 @llvm.objectsize.i64.p0i8(i8* %call, i1 false, i1 false, i1 false)
-  %0 = tail call i64 @llvm.objectsize.i64(i8* %call, i1 false)
+; CHECK: call i64 @llvm.objectsize.i64.p0(ptr %call, i1 false, i1 false, i1 false)
+  %0 = tail call i64 @llvm.objectsize.i64(ptr %call, i1 false)
   ret i64 %0
 
 lpad:
-  %1 = landingpad { i8*, i32 }
-          filter [0 x i8*] zeroinitializer
-  %2 = extractvalue { i8*, i32 } %1, 0
-  tail call void @__cxa_call_unexpected(i8* %2) noreturn nounwind
+  %1 = landingpad { ptr, i32 }
+          filter [0 x ptr] zeroinitializer
+  %2 = extractvalue { ptr, i32 } %1, 0
+  tail call void @__cxa_call_unexpected(ptr %2) noreturn nounwind
   unreachable
 }
 attributes #0 = { null_pointer_is_valid }
 
 ; CHECK-LABEL: @f3(
-define void @f3() nounwind uwtable ssp personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define void @f3() nounwind uwtable ssp personality ptr @__gxx_personality_v0 {
 ; CHECK: invoke void @llvm.donothing()
-  %call = invoke noalias i8* @_Znwm(i64 13)
+  %call = invoke noalias ptr @_Znwm(i64 13)
           to label %invoke.cont unwind label %lpad
 
 invoke.cont:
   ret void
 
 lpad:
-  %1 = landingpad { i8*, i32 }
-          filter [0 x i8*] zeroinitializer
-  %2 = extractvalue { i8*, i32 } %1, 0
-  tail call void @__cxa_call_unexpected(i8* %2) noreturn nounwind
+  %1 = landingpad { ptr, i32 }
+          filter [0 x ptr] zeroinitializer
+  %2 = extractvalue { ptr, i32 } %1, 0
+  tail call void @__cxa_call_unexpected(ptr %2) noreturn nounwind
   unreachable
 }
index 6f928b4a07c8639cca041dfd0a9f8c2788d13fcc..225477fd5dbd475aabfee42e400fc433a0afe8e6 100644 (file)
@@ -93,7 +93,7 @@ exit:
 }
 
 ; Test that exposed a bug in the PHI handling after D60846. No folding should happen here!
-define void @D60846_miscompile(i1* %p) {
+define void @D60846_miscompile(ptr %p) {
 ; CHECK-LABEL: @D60846_miscompile(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[LOOP:%.*]]
@@ -103,7 +103,7 @@ define void @D60846_miscompile(i1* %p) {
 ; CHECK-NEXT:    br i1 [[IS_ZERO]], label [[COMMON]], label [[NON_ZERO:%.*]]
 ; CHECK:       non_zero:
 ; CHECK-NEXT:    [[IS_ONE:%.*]] = icmp eq i16 [[I]], 1
-; CHECK-NEXT:    store i1 [[IS_ONE]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[IS_ONE]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    br label [[COMMON]]
 ; CHECK:       common:
 ; CHECK-NEXT:    [[I_INC]] = add i16 [[I]], 1
@@ -122,7 +122,7 @@ loop:                                             ; preds = %common, %entry
 
 non_zero:                                         ; preds = %loop
   %is_one = icmp eq i16 %i, 1
-  store i1 %is_one, i1* %p
+  store i1 %is_one, ptr %p
   br label %common
 
 common:                                           ; preds = %non_zero, %loop
index cea545983485b9bd513cd0c11bcfd21762a0b55a..d9cbfc82820b6e753c58139cafebea2ea1e798b1 100644 (file)
@@ -2,26 +2,26 @@
 ; END.
 
        %struct.p = type <{ i8, i32 }>
-@t = global %struct.p <{ i8 1, i32 10 }>               ; <%struct.p*> [#uses=1]
-@u = weak global %struct.p zeroinitializer             ; <%struct.p*> [#uses=1]
+@t = global %struct.p <{ i8 1, i32 10 }>               ; <ptr> [#uses=1]
+@u = weak global %struct.p zeroinitializer             ; <ptr> [#uses=1]
 
 define i32 @main() {
 entry:
-       %retval = alloca i32, align 4           ; <i32*> [#uses=2]
-       %tmp = alloca i32, align 4              ; <i32*> [#uses=2]
-       %tmp1 = alloca i32, align 4             ; <i32*> [#uses=3]
+       %retval = alloca i32, align 4           ; <ptr> [#uses=2]
+       %tmp = alloca i32, align 4              ; <ptr> [#uses=2]
+       %tmp1 = alloca i32, align 4             ; <ptr> [#uses=3]
        %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-       %tmp3 = load i32, i32* getelementptr (%struct.p, %struct.p* @t, i32 0, i32 1), align 1          ; <i32> [#uses=1]
-       store i32 %tmp3, i32* %tmp1, align 4
-       %tmp5 = load i32, i32* %tmp1, align 4           ; <i32> [#uses=1]
-       store i32 %tmp5, i32* getelementptr (%struct.p, %struct.p* @u, i32 0, i32 1), align 1
-       %tmp6 = load i32, i32* %tmp1, align 4           ; <i32> [#uses=1]
-       store i32 %tmp6, i32* %tmp, align 4
-       %tmp7 = load i32, i32* %tmp, align 4            ; <i32> [#uses=1]
-       store i32 %tmp7, i32* %retval, align 4
+       %tmp3 = load i32, ptr getelementptr (%struct.p, ptr @t, i32 0, i32 1), align 1          ; <i32> [#uses=1]
+       store i32 %tmp3, ptr %tmp1, align 4
+       %tmp5 = load i32, ptr %tmp1, align 4            ; <i32> [#uses=1]
+       store i32 %tmp5, ptr getelementptr (%struct.p, ptr @u, i32 0, i32 1), align 1
+       %tmp6 = load i32, ptr %tmp1, align 4            ; <i32> [#uses=1]
+       store i32 %tmp6, ptr %tmp, align 4
+       %tmp7 = load i32, ptr %tmp, align 4             ; <i32> [#uses=1]
+       store i32 %tmp7, ptr %retval, align 4
        br label %return
 
 return:                ; preds = %entry
-       %retval8 = load i32, i32* %retval               ; <i32> [#uses=1]
+       %retval8 = load i32, ptr %retval                ; <i32> [#uses=1]
        ret i32 %retval8
 }
index bf08c5e79d253bdc84d772272c932d123d62028c..e379b32b457341183ee6ec50397f0fb0d8aa05bc 100644 (file)
@@ -1,20 +1,20 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
-declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)
-declare void @foo(i8* nocapture)
+declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
+declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
+declare void @foo(ptr nocapture)
 
 define void @asan() sanitize_address {
 entry:
   ; CHECK-LABEL: @asan(
   %text = alloca i8, align 1
 
-  call void @llvm.lifetime.start.p0i8(i64 1, i8* %text)
-  call void @llvm.lifetime.end.p0i8(i64 1, i8* %text)
+  call void @llvm.lifetime.start.p0(i64 1, ptr %text)
+  call void @llvm.lifetime.end.p0(i64 1, ptr %text)
   ; CHECK: call void @llvm.lifetime.start
   ; CHECK-NEXT: call void @llvm.lifetime.end
 
-  call void @foo(i8* %text) ; Keep alloca alive
+  call void @foo(ptr %text) ; Keep alloca alive
 
   ret void
 }
@@ -24,12 +24,12 @@ entry:
   ; CHECK-LABEL: @hwasan(
   %text = alloca i8, align 1
 
-  call void @llvm.lifetime.start.p0i8(i64 1, i8* %text)
-  call void @llvm.lifetime.end.p0i8(i64 1, i8* %text)
+  call void @llvm.lifetime.start.p0(i64 1, ptr %text)
+  call void @llvm.lifetime.end.p0(i64 1, ptr %text)
   ; CHECK: call void @llvm.lifetime.start
   ; CHECK-NEXT: call void @llvm.lifetime.end
 
-  call void @foo(i8* %text) ; Keep alloca alive
+  call void @foo(ptr %text) ; Keep alloca alive
 
   ret void
 }
@@ -39,12 +39,12 @@ entry:
   ; CHECK-LABEL: @msan(
   %text = alloca i8, align 1
 
-  call void @llvm.lifetime.start.p0i8(i64 1, i8* %text)
-  call void @llvm.lifetime.end.p0i8(i64 1, i8* %text)
+  call void @llvm.lifetime.start.p0(i64 1, ptr %text)
+  call void @llvm.lifetime.end.p0(i64 1, ptr %text)
   ; CHECK: call void @llvm.lifetime.start
   ; CHECK-NEXT: call void @llvm.lifetime.end
 
-  call void @foo(i8* %text) ; Keep alloca alive
+  call void @foo(ptr %text) ; Keep alloca alive
 
   ret void
 }
@@ -54,11 +54,11 @@ entry:
   ; CHECK-LABEL: @no_asan(
   %text = alloca i8, align 1
 
-  call void @llvm.lifetime.start.p0i8(i64 1, i8* %text)
-  call void @llvm.lifetime.end.p0i8(i64 1, i8* %text)
+  call void @llvm.lifetime.start.p0(i64 1, ptr %text)
+  call void @llvm.lifetime.end.p0(i64 1, ptr %text)
   ; CHECK-NO: call void @llvm.lifetime
 
-  call void @foo(i8* %text) ; Keep alloca alive
+  call void @foo(ptr %text) ; Keep alloca alive
 
   ret void
 }
index 7f79972a529ec8b49d4f2f6f1a5201677d0b28fb..29d96c3b443ec2ee017a0f5fe443e896930bc48b 100644 (file)
@@ -2,9 +2,9 @@
 ; RUN: opt < %s -instcombine -instcombine-infinite-loop-threshold=2 -S | FileCheck %s
 
 declare void @llvm.dbg.declare(metadata, metadata, metadata)
-declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
-declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)
-declare void @foo(i8* nocapture, i8* nocapture)
+declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
+declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
+declare void @foo(ptr nocapture, ptr nocapture)
 
 define void @bar(i1 %flag) !dbg !4 {
 ; CHECK-LABEL: @bar(
@@ -17,16 +17,14 @@ define void @bar(i1 %flag) !dbg !4 {
 ; CHECK:       bb2:
 ; CHECK-NEXT:    br label [[BB3:%.*]]
 ; CHECK:       bb3:
-; CHECK-NEXT:    call void @llvm.dbg.declare(metadata [1 x i8]* [[TEXT]], metadata [[META16:![0-9]+]], metadata !DIExpression()), !dbg [[DBG24:![0-9]+]]
+; CHECK-NEXT:    call void @llvm.dbg.declare(metadata ptr [[TEXT]], metadata [[META16:![0-9]+]], metadata !DIExpression()), !dbg [[DBG24:![0-9]+]]
 ; CHECK-NEXT:    br label [[FIN:%.*]]
 ; CHECK:       else:
-; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds [1 x i8], [1 x i8]* [[TEXT]], i64 0, i64 0
-; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [1 x i8], [1 x i8]* [[BUFF]], i64 0, i64 0
-; CHECK-NEXT:    call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull [[TMP0]])
-; CHECK-NEXT:    call void @llvm.lifetime.start.p0i8(i64 1, i8* nonnull [[TMP1]])
-; CHECK-NEXT:    call void @foo(i8* nonnull [[TMP1]], i8* nonnull [[TMP0]])
-; CHECK-NEXT:    call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP1]])
-; CHECK-NEXT:    call void @llvm.lifetime.end.p0i8(i64 1, i8* nonnull [[TMP0]])
+; CHECK-NEXT:    call void @llvm.lifetime.start.p0(i64 1, ptr nonnull [[TEXT]])
+; CHECK-NEXT:    call void @llvm.lifetime.start.p0(i64 1, ptr nonnull [[BUFF]])
+; CHECK-NEXT:    call void @foo(ptr nonnull [[BUFF]], ptr nonnull [[TEXT]])
+; CHECK-NEXT:    call void @llvm.lifetime.end.p0(i64 1, ptr nonnull [[BUFF]])
+; CHECK-NEXT:    call void @llvm.lifetime.end.p0(i64 1, ptr nonnull [[TEXT]])
 ; CHECK-NEXT:    br label [[FIN]]
 ; CHECK:       fin:
 ; CHECK-NEXT:    ret void
@@ -34,36 +32,34 @@ define void @bar(i1 %flag) !dbg !4 {
 entry:
   %text = alloca [1 x i8], align 1
   %buff = alloca [1 x i8], align 1
-  %0 = getelementptr inbounds [1 x i8], [1 x i8]* %text, i64 0, i64 0
-  %1 = getelementptr inbounds [1 x i8], [1 x i8]* %buff, i64 0, i64 0
   br i1 %flag, label %if, label %else
 
 if:
-  call void @llvm.lifetime.start.p0i8(i64 1, i8* %0)
-  call void @llvm.lifetime.start.p0i8(i64 1, i8* %1)
-  call void @llvm.lifetime.end.p0i8(i64 1, i8* %1)
-  call void @llvm.lifetime.end.p0i8(i64 1, i8* %0)
+  call void @llvm.lifetime.start.p0(i64 1, ptr %text)
+  call void @llvm.lifetime.start.p0(i64 1, ptr %buff)
+  call void @llvm.lifetime.end.p0(i64 1, ptr %buff)
+  call void @llvm.lifetime.end.p0(i64 1, ptr %text)
   br label %bb2
 
 bb2:
-  call void @llvm.lifetime.start.p0i8(i64 1, i8* %0)
-  call void @llvm.lifetime.start.p0i8(i64 1, i8* %1)
-  call void @llvm.lifetime.end.p0i8(i64 1, i8* %0)
-  call void @llvm.lifetime.end.p0i8(i64 1, i8* %1)
+  call void @llvm.lifetime.start.p0(i64 1, ptr %text)
+  call void @llvm.lifetime.start.p0(i64 1, ptr %buff)
+  call void @llvm.lifetime.end.p0(i64 1, ptr %text)
+  call void @llvm.lifetime.end.p0(i64 1, ptr %buff)
   br label %bb3
 
 bb3:
-  call void @llvm.lifetime.start.p0i8(i64 1, i8* %0)
-  call void @llvm.dbg.declare(metadata [1 x i8]* %text, metadata !14, metadata !25), !dbg !26
-  call void @llvm.lifetime.end.p0i8(i64 1, i8* %0)
+  call void @llvm.lifetime.start.p0(i64 1, ptr %text)
+  call void @llvm.dbg.declare(metadata ptr %text, metadata !14, metadata !25), !dbg !26
+  call void @llvm.lifetime.end.p0(i64 1, ptr %text)
   br label %fin
 
 else:
-  call void @llvm.lifetime.start.p0i8(i64 1, i8* %0)
-  call void @llvm.lifetime.start.p0i8(i64 1, i8* %1)
-  call void @foo(i8* %1, i8* %0)
-  call void @llvm.lifetime.end.p0i8(i64 1, i8* %1)
-  call void @llvm.lifetime.end.p0i8(i64 1, i8* %0)
+  call void @llvm.lifetime.start.p0(i64 1, ptr %text)
+  call void @llvm.lifetime.start.p0(i64 1, ptr %buff)
+  call void @foo(ptr %buff, ptr %text)
+  call void @llvm.lifetime.end.p0(i64 1, ptr %buff)
+  call void @llvm.lifetime.end.p0(i64 1, ptr %text)
   br  label %fin
 
 fin:
index 55912367916389a63c7c67348aa99eb841234ccd..9e4bcfcdd8380312f8999b229cccf6a9acb69ed0 100644 (file)
@@ -16,13 +16,13 @@ define void @_Z3foov() {
 ; CHECK-NEXT:    ret void
 ; CHECK:       for.body:
 ; CHECK-NEXT:    [[TMP0:%.*]] = zext i32 [[I_0]] to i64
-; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [1000 x float], [1000 x float]* @a, i64 0, i64 [[TMP0]]
-; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds [1000 x float], [1000 x float]* @b, i64 0, i64 [[TMP0]]
-; CHECK-NEXT:    [[TMP1:%.*]] = load float, float* [[ARRAYIDX]], align 4
-; CHECK-NEXT:    [[TMP2:%.*]] = load float, float* [[ARRAYIDX2]], align 4
+; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [1000 x float], ptr @a, i64 0, i64 [[TMP0]]
+; CHECK-NEXT:    [[ARRAYIDX2:%.*]] = getelementptr inbounds [1000 x float], ptr @b, i64 0, i64 [[TMP0]]
+; CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr [[ARRAYIDX]], align 4
+; CHECK-NEXT:    [[TMP2:%.*]] = load float, ptr [[ARRAYIDX2]], align 4
 ; CHECK-NEXT:    [[CMP_I:%.*]] = fcmp fast olt float [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    [[TMP3:%.*]] = select i1 [[CMP_I]], float [[TMP2]], float [[TMP1]]
-; CHECK-NEXT:    store float [[TMP3]], float* [[ARRAYIDX]], align 4
+; CHECK-NEXT:    store float [[TMP3]], ptr [[ARRAYIDX]], align 4
 ; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_0]], 1
 ; CHECK-NEXT:    br label [[FOR_COND]]
 ;
@@ -39,66 +39,56 @@ for.cond.cleanup:                                 ; preds = %for.cond
 
 for.body:                                         ; preds = %for.cond
   %0 = zext i32 %i.0 to i64
-  %arrayidx = getelementptr inbounds [1000 x float], [1000 x float]* @a, i64 0, i64 %0
-  %arrayidx2 = getelementptr inbounds [1000 x float], [1000 x float]* @b, i64 0, i64 %0
-  %1 = load float, float* %arrayidx, align 4
-  %2 = load float, float* %arrayidx2, align 4
+  %arrayidx = getelementptr inbounds [1000 x float], ptr @a, i64 0, i64 %0
+  %arrayidx2 = getelementptr inbounds [1000 x float], ptr @b, i64 0, i64 %0
+  %1 = load float, ptr %arrayidx, align 4
+  %2 = load float, ptr %arrayidx2, align 4
   %cmp.i = fcmp fast olt float %1, %2
-  %__b.__a.i = select i1 %cmp.i, float* %arrayidx2, float* %arrayidx
-  %3 = bitcast float* %__b.__a.i to i32*
-  %4 = load i32, i32* %3, align 4
-  %5 = bitcast float* %arrayidx to i32*
-  store i32 %4, i32* %5, align 4
+  %__b.__a.i = select i1 %cmp.i, ptr %arrayidx2, ptr %arrayidx
+  %3 = load i32, ptr %__b.__a.i, align 4
+  store i32 %3, ptr %arrayidx, align 4
   %inc = add nuw nsw i32 %i.0, 1
   br label %for.cond
 }
 
-define i32 @store_bitcasted_load(i1 %cond, float* dereferenceable(4) %addr1, float* dereferenceable(4) %addr2) {
+define i32 @store_bitcasted_load(i1 %cond, ptr dereferenceable(4) %addr1, ptr dereferenceable(4) %addr2) {
 ; CHECK-LABEL: @store_bitcasted_load(
-; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], float* [[ADDR1:%.*]], float* [[ADDR2:%.*]]
-; CHECK-NEXT:    [[BC1:%.*]] = bitcast float* [[SEL]] to i32*
-; CHECK-NEXT:    [[LD:%.*]] = load i32, i32* [[BC1]], align 4
+; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], ptr [[ADDR1:%.*]], ptr [[ADDR2:%.*]]
+; CHECK-NEXT:    [[LD:%.*]] = load i32, ptr [[SEL]], align 4
 ; CHECK-NEXT:    ret i32 [[LD]]
 ;
-  %sel = select i1 %cond, float* %addr1, float* %addr2
-  %bc1 = bitcast float* %sel to i32*
-  %ld = load i32, i32* %bc1
+  %sel = select i1 %cond, ptr %addr1, ptr %addr2
+  %ld = load i32, ptr %sel
   ret i32 %ld
 }
 
-define void @bitcasted_store(i1 %cond, float* %loadaddr1, float* %loadaddr2, float* %storeaddr) {
+define void @bitcasted_store(i1 %cond, ptr %loadaddr1, ptr %loadaddr2, ptr %storeaddr) {
 ; CHECK-LABEL: @bitcasted_store(
-; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], float* [[LOADADDR1:%.*]], float* [[LOADADDR2:%.*]]
-; CHECK-NEXT:    [[INT_LOAD_ADDR:%.*]] = bitcast float* [[SEL]] to i32*
-; CHECK-NEXT:    [[LD:%.*]] = load i32, i32* [[INT_LOAD_ADDR]], align 4
-; CHECK-NEXT:    [[INT_STORE_ADDR:%.*]] = bitcast float* [[STOREADDR:%.*]] to i32*
-; CHECK-NEXT:    store i32 [[LD]], i32* [[INT_STORE_ADDR]], align 4
+; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], ptr [[LOADADDR1:%.*]], ptr [[LOADADDR2:%.*]]
+; CHECK-NEXT:    [[LD:%.*]] = load i32, ptr [[SEL]], align 4
+; CHECK-NEXT:    store i32 [[LD]], ptr [[STOREADDR:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %sel = select i1 %cond, float* %loadaddr1, float* %loadaddr2
-  %int_load_addr = bitcast float* %sel to i32*
-  %ld = load i32, i32* %int_load_addr
-  %int_store_addr = bitcast float* %storeaddr to i32*
-  store i32 %ld, i32* %int_store_addr
+  %sel = select i1 %cond, ptr %loadaddr1, ptr %loadaddr2
+  %ld = load i32, ptr %sel
+  store i32 %ld, ptr %storeaddr
   ret void
 }
 
-define void @bitcasted_minmax_with_select_of_pointers(float* %loadaddr1, float* %loadaddr2, float* %storeaddr) {
+define void @bitcasted_minmax_with_select_of_pointers(ptr %loadaddr1, ptr %loadaddr2, ptr %storeaddr) {
 ; CHECK-LABEL: @bitcasted_minmax_with_select_of_pointers(
-; CHECK-NEXT:    [[LD1:%.*]] = load float, float* [[LOADADDR1:%.*]], align 4
-; CHECK-NEXT:    [[LD2:%.*]] = load float, float* [[LOADADDR2:%.*]], align 4
+; CHECK-NEXT:    [[LD1:%.*]] = load float, ptr [[LOADADDR1:%.*]], align 4
+; CHECK-NEXT:    [[LD2:%.*]] = load float, ptr [[LOADADDR2:%.*]], align 4
 ; CHECK-NEXT:    [[COND:%.*]] = fcmp ogt float [[LD1]], [[LD2]]
 ; CHECK-NEXT:    [[LD3:%.*]] = select i1 [[COND]], float [[LD1]], float [[LD2]]
-; CHECK-NEXT:    store float [[LD3]], float* [[STOREADDR:%.*]], align 4
+; CHECK-NEXT:    store float [[LD3]], ptr [[STOREADDR:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %ld1 = load float, float* %loadaddr1, align 4
-  %ld2 = load float, float* %loadaddr2, align 4
+  %ld1 = load float, ptr %loadaddr1, align 4
+  %ld2 = load float, ptr %loadaddr2, align 4
   %cond = fcmp ogt float %ld1, %ld2
-  %sel = select i1 %cond, float* %loadaddr1, float* %loadaddr2
-  %int_load_addr = bitcast float* %sel to i32*
-  %ld = load i32, i32* %int_load_addr, align 4
-  %int_store_addr = bitcast float* %storeaddr to i32*
-  store i32 %ld, i32* %int_store_addr, align 4
+  %sel = select i1 %cond, ptr %loadaddr1, ptr %loadaddr2
+  %ld = load i32, ptr %sel, align 4
+  store i32 %ld, ptr %storeaddr, align 4
   ret void
 }
index 566c38349a4a99eee9c8a76d54d54c4db0381c70..c0486c03445c493e39ed17832c96c502a3482e58 100644 (file)
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-define float @matching_scalar(<4 x float>* dereferenceable(16) %p) {
+define float @matching_scalar(ptr dereferenceable(16) %p) {
 ; CHECK-LABEL: @matching_scalar(
-; CHECK-NEXT:    [[BC:%.*]] = getelementptr inbounds <4 x float>, <4 x float>* [[P:%.*]], i64 0, i64 0
-; CHECK-NEXT:    [[R:%.*]] = load float, float* [[BC]], align 16
+; CHECK-NEXT:    [[R:%.*]] = load float, ptr [[P:%.*]], align 16
 ; CHECK-NEXT:    ret float [[R]]
 ;
-  %bc = bitcast <4 x float>* %p to float*
-  %r = load float, float* %bc, align 16
+  %r = load float, ptr %p, align 16
   ret float %r
 }
 
-define i32 @nonmatching_scalar(<4 x float>* dereferenceable(16) %p) {
+define i32 @nonmatching_scalar(ptr dereferenceable(16) %p) {
 ; CHECK-LABEL: @nonmatching_scalar(
-; CHECK-NEXT:    [[BC:%.*]] = bitcast <4 x float>* [[P:%.*]] to i32*
-; CHECK-NEXT:    [[R:%.*]] = load i32, i32* [[BC]], align 16
+; CHECK-NEXT:    [[R:%.*]] = load i32, ptr [[P:%.*]], align 16
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
-  %bc = bitcast <4 x float>* %p to i32*
-  %r = load i32, i32* %bc, align 16
+  %r = load i32, ptr %p, align 16
   ret i32 %r
 }
 
-define i64 @larger_scalar(<4 x float>* dereferenceable(16) %p) {
+define i64 @larger_scalar(ptr dereferenceable(16) %p) {
 ; CHECK-LABEL: @larger_scalar(
-; CHECK-NEXT:    [[BC:%.*]] = bitcast <4 x float>* [[P:%.*]] to i64*
-; CHECK-NEXT:    [[R:%.*]] = load i64, i64* [[BC]], align 16
+; CHECK-NEXT:    [[R:%.*]] = load i64, ptr [[P:%.*]], align 16
 ; CHECK-NEXT:    ret i64 [[R]]
 ;
-  %bc = bitcast <4 x float>* %p to i64*
-  %r = load i64, i64* %bc, align 16
+  %r = load i64, ptr %p, align 16
   ret i64 %r
 }
 
-define i8 @smaller_scalar(<4 x float>* dereferenceable(16) %p) {
+define i8 @smaller_scalar(ptr dereferenceable(16) %p) {
 ; CHECK-LABEL: @smaller_scalar(
-; CHECK-NEXT:    [[BC:%.*]] = bitcast <4 x float>* [[P:%.*]] to i8*
-; CHECK-NEXT:    [[R:%.*]] = load i8, i8* [[BC]], align 16
+; CHECK-NEXT:    [[R:%.*]] = load i8, ptr [[P:%.*]], align 16
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
-  %bc = bitcast <4 x float>* %p to i8*
-  %r = load i8, i8* %bc, align 16
+  %r = load i8, ptr %p, align 16
   ret i8 %r
 }
 
-define i8 @smaller_scalar_less_aligned(<4 x float>* dereferenceable(16) %p) {
+define i8 @smaller_scalar_less_aligned(ptr dereferenceable(16) %p) {
 ; CHECK-LABEL: @smaller_scalar_less_aligned(
-; CHECK-NEXT:    [[BC:%.*]] = bitcast <4 x float>* [[P:%.*]] to i8*
-; CHECK-NEXT:    [[R:%.*]] = load i8, i8* [[BC]], align 4
+; CHECK-NEXT:    [[R:%.*]] = load i8, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
-  %bc = bitcast <4 x float>* %p to i8*
-  %r = load i8, i8* %bc, align 4
+  %r = load i8, ptr %p, align 4
   ret i8 %r
 }
 
-define float @matching_scalar_small_deref(<4 x float>* dereferenceable(15) %p) {
+define float @matching_scalar_small_deref(ptr dereferenceable(15) %p) {
 ; CHECK-LABEL: @matching_scalar_small_deref(
-; CHECK-NEXT:    [[BC:%.*]] = getelementptr inbounds <4 x float>, <4 x float>* [[P:%.*]], i64 0, i64 0
-; CHECK-NEXT:    [[R:%.*]] = load float, float* [[BC]], align 16
+; CHECK-NEXT:    [[R:%.*]] = load float, ptr [[P:%.*]], align 16
 ; CHECK-NEXT:    ret float [[R]]
 ;
-  %bc = bitcast <4 x float>* %p to float*
-  %r = load float, float* %bc, align 16
+  %r = load float, ptr %p, align 16
   ret float %r
 }
 
-define float @matching_scalar_smallest_deref(<4 x float>* dereferenceable(1) %p) {
+define float @matching_scalar_smallest_deref(ptr dereferenceable(1) %p) {
 ; CHECK-LABEL: @matching_scalar_smallest_deref(
-; CHECK-NEXT:    [[BC:%.*]] = getelementptr inbounds <4 x float>, <4 x float>* [[P:%.*]], i64 0, i64 0
-; CHECK-NEXT:    [[R:%.*]] = load float, float* [[BC]], align 16
+; CHECK-NEXT:    [[R:%.*]] = load float, ptr [[P:%.*]], align 16
 ; CHECK-NEXT:    ret float [[R]]
 ;
-  %bc = bitcast <4 x float>* %p to float*
-  %r = load float, float* %bc, align 16
+  %r = load float, ptr %p, align 16
   ret float %r
 }
 
-define float @matching_scalar_smallest_deref_or_null(<4 x float>* dereferenceable_or_null(1) %p) {
+define float @matching_scalar_smallest_deref_or_null(ptr dereferenceable_or_null(1) %p) {
 ; CHECK-LABEL: @matching_scalar_smallest_deref_or_null(
-; CHECK-NEXT:    [[BC:%.*]] = getelementptr inbounds <4 x float>, <4 x float>* [[P:%.*]], i64 0, i64 0
-; CHECK-NEXT:    [[R:%.*]] = load float, float* [[BC]], align 16
+; CHECK-NEXT:    [[R:%.*]] = load float, ptr [[P:%.*]], align 16
 ; CHECK-NEXT:    ret float [[R]]
 ;
-  %bc = bitcast <4 x float>* %p to float*
-  %r = load float, float* %bc, align 16
+  %r = load float, ptr %p, align 16
   ret float %r
 }
 
-define float @matching_scalar_smallest_deref_addrspace(<4 x float> addrspace(4)* dereferenceable(1) %p) {
+define float @matching_scalar_smallest_deref_addrspace(ptr addrspace(4) dereferenceable(1) %p) {
 ; CHECK-LABEL: @matching_scalar_smallest_deref_addrspace(
-; CHECK-NEXT:    [[BC:%.*]] = getelementptr inbounds <4 x float>, <4 x float> addrspace(4)* [[P:%.*]], i64 0, i64 0
-; CHECK-NEXT:    [[R:%.*]] = load float, float addrspace(4)* [[BC]], align 16
+; CHECK-NEXT:    [[R:%.*]] = load float, ptr addrspace(4) [[P:%.*]], align 16
 ; CHECK-NEXT:    ret float [[R]]
 ;
-  %bc = bitcast <4 x float> addrspace(4)* %p to float addrspace(4)*
-  %r = load float, float addrspace(4)* %bc, align 16
+  %r = load float, ptr addrspace(4) %p, align 16
   ret float %r
 }
 
 ; A null pointer can't be assumed inbounds in a non-default address space.
 
-define float @matching_scalar_smallest_deref_or_null_addrspace(<4 x float> addrspace(4)* dereferenceable_or_null(1) %p) {
+define float @matching_scalar_smallest_deref_or_null_addrspace(ptr addrspace(4) dereferenceable_or_null(1) %p) {
 ; CHECK-LABEL: @matching_scalar_smallest_deref_or_null_addrspace(
-; CHECK-NEXT:    [[BC:%.*]] = getelementptr <4 x float>, <4 x float> addrspace(4)* [[P:%.*]], i64 0, i64 0
-; CHECK-NEXT:    [[R:%.*]] = load float, float addrspace(4)* [[BC]], align 16
+; CHECK-NEXT:    [[R:%.*]] = load float, ptr addrspace(4) [[P:%.*]], align 16
 ; CHECK-NEXT:    ret float [[R]]
 ;
-  %bc = bitcast <4 x float> addrspace(4)* %p to float addrspace(4)*
-  %r = load float, float addrspace(4)* %bc, align 16
+  %r = load float, ptr addrspace(4) %p, align 16
   ret float %r
 }
 
-define float @matching_scalar_volatile(<4 x float>* dereferenceable(16) %p) {
+define float @matching_scalar_volatile(ptr dereferenceable(16) %p) {
 ; CHECK-LABEL: @matching_scalar_volatile(
-; CHECK-NEXT:    [[BC:%.*]] = getelementptr inbounds <4 x float>, <4 x float>* [[P:%.*]], i64 0, i64 0
-; CHECK-NEXT:    [[R:%.*]] = load volatile float, float* [[BC]], align 16
+; CHECK-NEXT:    [[R:%.*]] = load volatile float, ptr [[P:%.*]], align 16
 ; CHECK-NEXT:    ret float [[R]]
 ;
-  %bc = bitcast <4 x float>* %p to float*
-  %r = load volatile float, float* %bc, align 16
+  %r = load volatile float, ptr %p, align 16
   ret float %r
 }
 
-define float @nonvector(double* dereferenceable(16) %p) {
+define float @nonvector(ptr dereferenceable(16) %p) {
 ; CHECK-LABEL: @nonvector(
-; CHECK-NEXT:    [[BC:%.*]] = bitcast double* [[P:%.*]] to float*
-; CHECK-NEXT:    [[R:%.*]] = load float, float* [[BC]], align 16
+; CHECK-NEXT:    [[R:%.*]] = load float, ptr [[P:%.*]], align 16
 ; CHECK-NEXT:    ret float [[R]]
 ;
-  %bc = bitcast double* %p to float*
-  %r = load float, float* %bc, align 16
+  %r = load float, ptr %p, align 16
   ret float %r
 }
index a696727ee85d1f9d7c4cadc39930524282f4474c..1bd1c86360eeb3faf6689b92208bc8bba1ae0d05 100644 (file)
 target datalayout = "p:32:32:32"
 
 
-define i64* @test1(i8* %x) {
+define ptr @test1(ptr %x) {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A:%.*]] = bitcast i8* [[X:%.*]] to i64*
-; CHECK-NEXT:    [[B:%.*]] = load i64, i64* [[A]], align 4
+; CHECK-NEXT:    [[B:%.*]] = load i64, ptr [[X:%.*]], align 4
 ; CHECK-NEXT:    [[TMP0:%.*]] = trunc i64 [[B]] to i32
-; CHECK-NEXT:    [[C:%.*]] = inttoptr i32 [[TMP0]] to i64*
-; CHECK-NEXT:    ret i64* [[C]]
+; CHECK-NEXT:    [[C:%.*]] = inttoptr i32 [[TMP0]] to ptr
+; CHECK-NEXT:    ret ptr [[C]]
 ;
 entry:
-  %a = bitcast i8* %x to i64*
-  %b = load i64, i64* %a
-  %c = inttoptr i64 %b to i64*
+  %b = load i64, ptr %x
+  %c = inttoptr i64 %b to ptr
 
-  ret i64* %c
+  ret ptr %c
 }
 
-define i32* @test2(i8* %x) {
+define ptr @test2(ptr %x) {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A:%.*]] = bitcast i8* [[X:%.*]] to i32*
-; CHECK-NEXT:    [[B:%.*]] = load i32, i32* [[A]], align 4
-; CHECK-NEXT:    [[C:%.*]] = inttoptr i32 [[B]] to i32*
-; CHECK-NEXT:    ret i32* [[C]]
+; CHECK-NEXT:    [[B:%.*]] = load i32, ptr [[X:%.*]], align 4
+; CHECK-NEXT:    [[C:%.*]] = inttoptr i32 [[B]] to ptr
+; CHECK-NEXT:    ret ptr [[C]]
 ;
 entry:
-  %a = bitcast i8* %x to i32*
-  %b = load i32, i32* %a
-  %c = inttoptr i32 %b to i32*
+  %b = load i32, ptr %x
+  %c = inttoptr i32 %b to ptr
 
-  ret i32* %c
+  ret ptr %c
 }
 
-define i64* @test3(i8* %x) {
+define ptr @test3(ptr %x) {
 ; CHECK-LABEL: @test3(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A:%.*]] = bitcast i8* [[X:%.*]] to i32*
-; CHECK-NEXT:    [[B:%.*]] = load i32, i32* [[A]], align 4
-; CHECK-NEXT:    [[C:%.*]] = inttoptr i32 [[B]] to i64*
-; CHECK-NEXT:    ret i64* [[C]]
+; CHECK-NEXT:    [[B:%.*]] = load i32, ptr [[X:%.*]], align 4
+; CHECK-NEXT:    [[C:%.*]] = inttoptr i32 [[B]] to ptr
+; CHECK-NEXT:    ret ptr [[C]]
 ;
 entry:
-  %a = bitcast i8* %x to i32*
-  %b = load i32, i32* %a
-  %c = inttoptr i32 %b to i64*
+  %b = load i32, ptr %x
+  %c = inttoptr i32 %b to ptr
 
-  ret i64* %c
+  ret ptr %c
 }
 
-define i64 @test4(i8* %x) {
+define i64 @test4(ptr %x) {
 ; CHECK-LABEL: @test4(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A:%.*]] = bitcast i8* [[X:%.*]] to i64**
-; CHECK-NEXT:    [[B:%.*]] = load i64*, i64** [[A]], align 4
-; CHECK-NEXT:    [[TMP0:%.*]] = ptrtoint i64* [[B]] to i32
+; CHECK-NEXT:    [[B:%.*]] = load ptr, ptr [[X:%.*]], align 4
+; CHECK-NEXT:    [[TMP0:%.*]] = ptrtoint ptr [[B]] to i32
 ; CHECK-NEXT:    [[C:%.*]] = zext i32 [[TMP0]] to i64
 ; CHECK-NEXT:    ret i64 [[C]]
 ;
 entry:
-  %a = bitcast i8* %x to i64**
-  %b = load i64*, i64** %a
-  %c = ptrtoint i64* %b to i64
+  %b = load ptr, ptr %x
+  %c = ptrtoint ptr %b to i64
 
   ret i64 %c
 }
 
-define i32 @test5(i8* %x) {
+define i32 @test5(ptr %x) {
 ; CHECK-LABEL: @test5(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A:%.*]] = bitcast i8* [[X:%.*]] to i32**
-; CHECK-NEXT:    [[B:%.*]] = load i32*, i32** [[A]], align 4
-; CHECK-NEXT:    [[C:%.*]] = ptrtoint i32* [[B]] to i32
+; CHECK-NEXT:    [[B:%.*]] = load ptr, ptr [[X:%.*]], align 4
+; CHECK-NEXT:    [[C:%.*]] = ptrtoint ptr [[B]] to i32
 ; CHECK-NEXT:    ret i32 [[C]]
 ;
 entry:
-  %a = bitcast i8* %x to i32**
-  %b = load i32*, i32** %a
-  %c = ptrtoint i32* %b to i32
+  %b = load ptr, ptr %x
+  %c = ptrtoint ptr %b to i32
 
   ret i32 %c
 }
 
-define i64 @test6(i8* %x) {
+define i64 @test6(ptr %x) {
 ; CHECK-LABEL: @test6(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A:%.*]] = bitcast i8* [[X:%.*]] to i32**
-; CHECK-NEXT:    [[B:%.*]] = load i32*, i32** [[A]], align 4
-; CHECK-NEXT:    [[TMP0:%.*]] = ptrtoint i32* [[B]] to i32
+; CHECK-NEXT:    [[B:%.*]] = load ptr, ptr [[X:%.*]], align 4
+; CHECK-NEXT:    [[TMP0:%.*]] = ptrtoint ptr [[B]] to i32
 ; CHECK-NEXT:    [[C:%.*]] = zext i32 [[TMP0]] to i64
 ; CHECK-NEXT:    ret i64 [[C]]
 ;
 entry:
-  %a = bitcast i8* %x to i32**
-  %b = load i32*, i32** %a
-  %c = ptrtoint i32* %b to i64
+  %b = load ptr, ptr %x
+  %c = ptrtoint ptr %b to i64
 
   ret i64 %c
 }
index b653ffcecd3d05a7208e64ce6ebec4e3db47877d..15ff8ad3382a1bcbd7050e33104bacbe37335acd 100644 (file)
 target datalayout = "p:64:64:64-i64:32:32"
 
 
-define i64* @test1(i8* %x) {
+define ptr @test1(ptr %x) {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A:%.*]] = bitcast i8* [[X:%.*]] to i64*
-; CHECK-NEXT:    [[B:%.*]] = load i64, i64* [[A]], align 4
-; CHECK-NEXT:    [[C:%.*]] = inttoptr i64 [[B]] to i64*
-; CHECK-NEXT:    ret i64* [[C]]
+; CHECK-NEXT:    [[B:%.*]] = load i64, ptr [[X:%.*]], align 4
+; CHECK-NEXT:    [[C:%.*]] = inttoptr i64 [[B]] to ptr
+; CHECK-NEXT:    ret ptr [[C]]
 ;
 entry:
-  %a = bitcast i8* %x to i64*
-  %b = load i64, i64* %a
-  %c = inttoptr i64 %b to i64*
+  %b = load i64, ptr %x
+  %c = inttoptr i64 %b to ptr
 
-  ret i64* %c
+  ret ptr %c
 }
 
-define i32* @test2(i8* %x) {
+define ptr @test2(ptr %x) {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A:%.*]] = bitcast i8* [[X:%.*]] to i32*
-; CHECK-NEXT:    [[B:%.*]] = load i32, i32* [[A]], align 4
+; CHECK-NEXT:    [[B:%.*]] = load i32, ptr [[X:%.*]], align 4
 ; CHECK-NEXT:    [[TMP0:%.*]] = zext i32 [[B]] to i64
-; CHECK-NEXT:    [[C:%.*]] = inttoptr i64 [[TMP0]] to i32*
-; CHECK-NEXT:    ret i32* [[C]]
+; CHECK-NEXT:    [[C:%.*]] = inttoptr i64 [[TMP0]] to ptr
+; CHECK-NEXT:    ret ptr [[C]]
 ;
 entry:
-  %a = bitcast i8* %x to i32*
-  %b = load i32, i32* %a
-  %c = inttoptr i32 %b to i32*
+  %b = load i32, ptr %x
+  %c = inttoptr i32 %b to ptr
 
-  ret i32* %c
+  ret ptr %c
 }
 
-define i64* @test3(i8* %x) {
+define ptr @test3(ptr %x) {
 ; CHECK-LABEL: @test3(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A:%.*]] = bitcast i8* [[X:%.*]] to i32*
-; CHECK-NEXT:    [[B:%.*]] = load i32, i32* [[A]], align 4
+; CHECK-NEXT:    [[B:%.*]] = load i32, ptr [[X:%.*]], align 4
 ; CHECK-NEXT:    [[TMP0:%.*]] = zext i32 [[B]] to i64
-; CHECK-NEXT:    [[C:%.*]] = inttoptr i64 [[TMP0]] to i64*
-; CHECK-NEXT:    ret i64* [[C]]
+; CHECK-NEXT:    [[C:%.*]] = inttoptr i64 [[TMP0]] to ptr
+; CHECK-NEXT:    ret ptr [[C]]
 ;
 entry:
-  %a = bitcast i8* %x to i32*
-  %b = load i32, i32* %a
-  %c = inttoptr i32 %b to i64*
+  %b = load i32, ptr %x
+  %c = inttoptr i32 %b to ptr
 
-  ret i64* %c
+  ret ptr %c
 }
 
-define i64 @test4(i8* %x) {
+define i64 @test4(ptr %x) {
 ; CHECK-LABEL: @test4(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A:%.*]] = bitcast i8* [[X:%.*]] to i64**
-; CHECK-NEXT:    [[B:%.*]] = load i64*, i64** [[A]], align 8
-; CHECK-NEXT:    [[C:%.*]] = ptrtoint i64* [[B]] to i64
+; CHECK-NEXT:    [[B:%.*]] = load ptr, ptr [[X:%.*]], align 8
+; CHECK-NEXT:    [[C:%.*]] = ptrtoint ptr [[B]] to i64
 ; CHECK-NEXT:    ret i64 [[C]]
 ;
 entry:
-  %a = bitcast i8* %x to i64**
-  %b = load i64*, i64** %a
-  %c = ptrtoint i64* %b to i64
+  %b = load ptr, ptr %x
+  %c = ptrtoint ptr %b to i64
 
   ret i64 %c
 }
 
-define i32 @test5(i8* %x) {
+define i32 @test5(ptr %x) {
 ; CHECK-LABEL: @test5(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A:%.*]] = bitcast i8* [[X:%.*]] to i32**
-; CHECK-NEXT:    [[B:%.*]] = load i32*, i32** [[A]], align 8
-; CHECK-NEXT:    [[TMP0:%.*]] = ptrtoint i32* [[B]] to i64
+; CHECK-NEXT:    [[B:%.*]] = load ptr, ptr [[X:%.*]], align 8
+; CHECK-NEXT:    [[TMP0:%.*]] = ptrtoint ptr [[B]] to i64
 ; CHECK-NEXT:    [[C:%.*]] = trunc i64 [[TMP0]] to i32
 ; CHECK-NEXT:    ret i32 [[C]]
 ;
 entry:
-  %a = bitcast i8* %x to i32**
-  %b = load i32*, i32** %a
-  %c = ptrtoint i32* %b to i32
+  %b = load ptr, ptr %x
+  %c = ptrtoint ptr %b to i32
 
   ret i32 %c
 }
 
-define i64 @test6(i8* %x) {
+define i64 @test6(ptr %x) {
 ; CHECK-LABEL: @test6(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A:%.*]] = bitcast i8* [[X:%.*]] to i32**
-; CHECK-NEXT:    [[B:%.*]] = load i32*, i32** [[A]], align 8
-; CHECK-NEXT:    [[C:%.*]] = ptrtoint i32* [[B]] to i64
+; CHECK-NEXT:    [[B:%.*]] = load ptr, ptr [[X:%.*]], align 8
+; CHECK-NEXT:    [[C:%.*]] = ptrtoint ptr [[B]] to i64
 ; CHECK-NEXT:    ret i64 [[C]]
 ;
 entry:
-  %a = bitcast i8* %x to i32**
-  %b = load i32*, i32** %a
-  %c = ptrtoint i32* %b to i64
+  %b = load ptr, ptr %x
+  %c = ptrtoint ptr %b to i64
 
   ret i64 %c
 }
index 757fe2e86b18fa1b426dda66576224b9d98498a7..6ef74ffa2da27856ad2af90263852a4483b5a40f 100644 (file)
@@ -25,8 +25,8 @@ define i1 @test1(i32 %X) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[X:%.*]], 9
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
-  %Q = load i16, i16* %P
+  %P = getelementptr inbounds [10 x i16], ptr @G16, i32 0, i32 %X
+  %Q = load i16, ptr %P
   %R = icmp eq i16 %Q, 0
   ret i1 %R
 }
@@ -37,8 +37,8 @@ define i1 @test1_noinbounds(i32 %X) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[TMP1]], 9
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %P = getelementptr [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
-  %Q = load i16, i16* %P
+  %P = getelementptr [10 x i16], ptr @G16, i32 0, i32 %X
+  %Q = load i16, ptr %P
   %R = icmp eq i16 %Q, 0
   ret i1 %R
 }
@@ -49,8 +49,8 @@ define i1 @test1_noinbounds_i64(i64 %X) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i64 [[TMP1]], 9
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %P = getelementptr [10 x i16], [10 x i16]* @G16, i64 0, i64 %X
-  %Q = load i16, i16* %P
+  %P = getelementptr [10 x i16], ptr @G16, i64 0, i64 %X
+  %Q = load i16, ptr %P
   %R = icmp eq i16 %Q, 0
   ret i1 %R
 }
@@ -61,8 +61,8 @@ define i1 @test1_noinbounds_as1(i32 %x) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[TMP1]], 9
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %p = getelementptr [10 x i16], [10 x i16] addrspace(1)* @G16_as1, i16 0, i32 %x
-  %q = load i16, i16 addrspace(1)* %p
+  %p = getelementptr [10 x i16], ptr addrspace(1) @G16_as1, i16 0, i32 %x
+  %q = load i16, ptr addrspace(1) %p
   %r = icmp eq i16 %q, 0
   ret i1 %r
 
@@ -73,8 +73,8 @@ define i1 @test2(i32 %X) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp ne i32 [[X:%.*]], 4
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
-  %Q = load i16, i16* %P
+  %P = getelementptr inbounds [10 x i16], ptr @G16, i32 0, i32 %X
+  %Q = load i16, ptr %P
   %R = icmp slt i16 %Q, 85
   ret i1 %R
 }
@@ -84,8 +84,8 @@ define i1 @test3(i32 %X) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[X:%.*]], 1
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %P = getelementptr inbounds [6 x double], [6 x double]* @GD, i32 0, i32 %X
-  %Q = load double, double* %P
+  %P = getelementptr inbounds [6 x double], ptr @GD, i32 0, i32 %X
+  %Q = load double, ptr %P
   %R = fcmp oeq double %Q, 1.0
   ret i1 %R
 
@@ -98,8 +98,8 @@ define i1 @test4(i32 %X) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp ne i32 [[TMP2]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
-  %Q = load i16, i16* %P
+  %P = getelementptr inbounds [10 x i16], ptr @G16, i32 0, i32 %X
+  %Q = load i16, ptr %P
   %R = icmp sle i16 %Q, 73
   ret i1 %R
 }
@@ -112,8 +112,8 @@ define i1 @test4_i16(i16 %X) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp ne i32 [[TMP3]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i16 %X
-  %Q = load i16, i16* %P
+  %P = getelementptr inbounds [10 x i16], ptr @G16, i32 0, i16 %X
+  %Q = load i16, ptr %P
   %R = icmp sle i16 %Q, 73
   ret i1 %R
 }
@@ -125,8 +125,8 @@ define i1 @test5(i32 %X) {
 ; CHECK-NEXT:    [[R:%.*]] = or i1 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
-  %Q = load i16, i16* %P
+  %P = getelementptr inbounds [10 x i16], ptr @G16, i32 0, i32 %X
+  %Q = load i16, ptr %P
   %R = icmp eq i16 %Q, 69
   ret i1 %R
 }
@@ -137,8 +137,8 @@ define i1 @test6(i32 %X) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp ult i32 [[TMP1]], 3
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %P = getelementptr inbounds [6 x double], [6 x double]* @GD, i32 0, i32 %X
-  %Q = load double, double* %P
+  %P = getelementptr inbounds [6 x double], ptr @GD, i32 0, i32 %X
+  %Q = load double, ptr %P
   %R = fcmp ogt double %Q, 0.0
   ret i1 %R
 }
@@ -149,8 +149,8 @@ define i1 @test7(i32 %X) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp ult i32 [[TMP1]], -3
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %P = getelementptr inbounds [6 x double], [6 x double]* @GD, i32 0, i32 %X
-  %Q = load double, double* %P
+  %P = getelementptr inbounds [6 x double], ptr @GD, i32 0, i32 %X
+  %Q = load double, ptr %P
   %R = fcmp olt double %Q, 0.0
   ret i1 %R
 }
@@ -161,8 +161,8 @@ define i1 @test8(i32 %X) {
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP1]], 8
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
-  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
-  %Q = load i16, i16* %P
+  %P = getelementptr inbounds [10 x i16], ptr @G16, i32 0, i32 %X
+  %Q = load i16, ptr %P
   %R = and i16 %Q, 3
   %S = icmp eq i16 %R, 0
   ret i1 %S
@@ -181,8 +181,8 @@ define i1 @test9(i32 %X) {
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ult i32 [[TMP1]], 2
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
-  %P = getelementptr inbounds [4 x { i32, i32 } ], [4 x { i32, i32 } ]* @GA, i32 0, i32 %X, i32 1
-  %Q = load i32, i32* %P
+  %P = getelementptr inbounds [4 x { i32, i32 } ], ptr @GA, i32 0, i32 %X, i32 1
+  %Q = load i32, ptr %P
   %R = icmp eq i32 %Q, 1
   ret i1 %R
 }
@@ -191,21 +191,21 @@ define i1 @test10_struct(i32 %x) {
 ; CHECK-LABEL: @test10_struct(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %p = getelementptr inbounds %Foo, %Foo* @GS, i32 %x, i32 0
-  %q = load i32, i32* %p
+  %p = getelementptr inbounds %Foo, ptr @GS, i32 %x, i32 0
+  %q = load i32, ptr %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
 }
 
 define i1 @test10_struct_noinbounds(i32 %x) {
 ; CHECK-LABEL: @test10_struct_noinbounds(
-; CHECK-NEXT:    [[P:%.*]] = getelementptr [[FOO:%.*]], %Foo* @GS, i32 [[X:%.*]], i32 0
-; CHECK-NEXT:    [[Q:%.*]] = load i32, i32* [[P]], align 8
+; CHECK-NEXT:    [[P:%.*]] = getelementptr [[FOO:%.*]], ptr @GS, i32 [[X:%.*]], i32 0
+; CHECK-NEXT:    [[Q:%.*]] = load i32, ptr [[P]], align 8
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[Q]], 9
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %p = getelementptr %Foo, %Foo* @GS, i32 %x, i32 0
-  %q = load i32, i32* %p
+  %p = getelementptr %Foo, ptr @GS, i32 %x, i32 0
+  %q = load i32, ptr %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
 }
@@ -216,8 +216,8 @@ define i1 @test10_struct_i16(i16 %x){
 ; CHECK-LABEL: @test10_struct_i16(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %p = getelementptr inbounds %Foo, %Foo* @GS, i16 %x, i32 0
-  %q = load i32, i32* %p
+  %p = getelementptr inbounds %Foo, ptr @GS, i16 %x, i32 0
+  %q = load i32, ptr %p
   %r = icmp eq i32 %q, 0
   ret i1 %r
 }
@@ -228,8 +228,8 @@ define i1 @test10_struct_i64(i64 %x){
 ; CHECK-LABEL: @test10_struct_i64(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %p = getelementptr inbounds %Foo, %Foo* @GS, i64 %x, i32 0
-  %q = load i32, i32* %p
+  %p = getelementptr inbounds %Foo, ptr @GS, i64 %x, i32 0
+  %q = load i32, ptr %p
   %r = icmp eq i32 %q, 0
   ret i1 %r
 }
@@ -237,13 +237,13 @@ define i1 @test10_struct_i64(i64 %x){
 define i1 @test10_struct_noinbounds_i16(i16 %x) {
 ; CHECK-LABEL: @test10_struct_noinbounds_i16(
 ; CHECK-NEXT:    [[TMP1:%.*]] = sext i16 [[X:%.*]] to i32
-; CHECK-NEXT:    [[P:%.*]] = getelementptr [[FOO:%.*]], %Foo* @GS, i32 [[TMP1]], i32 0
-; CHECK-NEXT:    [[Q:%.*]] = load i32, i32* [[P]], align 8
+; CHECK-NEXT:    [[P:%.*]] = getelementptr [[FOO:%.*]], ptr @GS, i32 [[TMP1]], i32 0
+; CHECK-NEXT:    [[Q:%.*]] = load i32, ptr [[P]], align 8
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[Q]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %p = getelementptr %Foo, %Foo* @GS, i16 %x, i32 0
-  %q = load i32, i32* %p
+  %p = getelementptr %Foo, ptr @GS, i16 %x, i32 0
+  %q = load i32, ptr %p
   %r = icmp eq i32 %q, 0
   ret i1 %r
 }
@@ -253,8 +253,8 @@ define i1 @test10_struct_arr(i32 %x) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp ne i32 [[X:%.*]], 1
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %p = getelementptr inbounds [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2
-  %q = load i32, i32* %p
+  %p = getelementptr inbounds [4 x %Foo], ptr @GStructArr, i32 0, i32 %x, i32 2
+  %q = load i32, ptr %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
 }
@@ -265,8 +265,8 @@ define i1 @test10_struct_arr_noinbounds(i32 %x) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp ne i32 [[TMP1]], 1
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2
-  %q = load i32, i32* %p
+  %p = getelementptr [4 x %Foo], ptr @GStructArr, i32 0, i32 %x, i32 2
+  %q = load i32, ptr %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
 }
@@ -276,8 +276,8 @@ define i1 @test10_struct_arr_i16(i16 %x) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp ne i16 [[X:%.*]], 1
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %p = getelementptr inbounds [4 x %Foo], [4 x %Foo]* @GStructArr, i16 0, i16 %x, i32 2
-  %q = load i32, i32* %p
+  %p = getelementptr inbounds [4 x %Foo], ptr @GStructArr, i16 0, i16 %x, i32 2
+  %q = load i32, ptr %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
 }
@@ -288,8 +288,8 @@ define i1 @test10_struct_arr_i64(i64 %x) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp ne i64 [[TMP1]], 1
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %p = getelementptr inbounds [4 x %Foo], [4 x %Foo]* @GStructArr, i64 0, i64 %x, i32 2
-  %q = load i32, i32* %p
+  %p = getelementptr inbounds [4 x %Foo], ptr @GStructArr, i64 0, i64 %x, i32 2
+  %q = load i32, ptr %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
 }
@@ -301,8 +301,8 @@ define i1 @test10_struct_arr_noinbounds_i16(i16 %x) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp ne i32 [[TMP2]], 1
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i16 %x, i32 2
-  %q = load i32, i32* %p
+  %p = getelementptr [4 x %Foo], ptr @GStructArr, i32 0, i16 %x, i32 2
+  %q = load i32, ptr %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
 }
@@ -313,8 +313,8 @@ define i1 @test10_struct_arr_noinbounds_i64(i64 %x) {
 ; CHECK-NEXT:    [[R:%.*]] = icmp ne i64 [[TMP1]], 1
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
-  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i64 %x, i32 2
-  %q = load i32, i32* %p
+  %p = getelementptr [4 x %Foo], ptr @GStructArr, i32 0, i64 %x, i32 2
+  %q = load i32, ptr %p
   %r = icmp eq i32 %q, 9
   ret i1 %r
 }
index 9f4ddc3ec0b4fbaca091e48419136680d73607fa..87204cabeb4bbeee4c8ee4e12eb9c59cb365c45d 100644 (file)
@@ -4,13 +4,13 @@ target datalayout = "e-m:e-p:64:64:64-i64:64-f80:128-n8:16:32:64-S128"
 
 ; CHECK-LABEL: @test_load_load_combine_metadata(
 ; Check that align metadata is combined
-; CHECK: load i32*, i32** %0
+; CHECK: load ptr, ptr %0
 ; CHECK-SAME: !align ![[ALIGN:[0-9]+]]
-define void @test_load_load_combine_metadata(i32**, i32**, i32**) {
-  %a = load i32*, i32** %0, !align !0
-  %b = load i32*, i32** %0, !align !1
-  store i32 0, i32* %a
-  store i32 0, i32* %b
+define void @test_load_load_combine_metadata(ptr, ptr, ptr) {
+  %a = load ptr, ptr %0, !align !0
+  %b = load ptr, ptr %0, !align !1
+  store i32 0, ptr %a
+  store i32 0, ptr %b
   ret void
 }
 
index 2312e01a280861e631acec99f0237464af980955..08912ad6b5829b088af45efee2f2ac1769a0f254 100644 (file)
@@ -4,13 +4,13 @@ target datalayout = "e-m:e-p:64:64:64-i64:64-f80:128-n8:16:32:64-S128"
 
 ; CHECK-LABEL: @test_load_load_combine_metadata(
 ; Check that dereferenceable metadata is combined
-; CHECK: load i32*, i32** %0
+; CHECK: load ptr, ptr %0
 ; CHECK-SAME: !dereferenceable ![[DEREF:[0-9]+]]
-define void @test_load_load_combine_metadata(i32**, i32**, i32**) {
-  %a = load i32*, i32** %0, !dereferenceable !0
-  %b = load i32*, i32** %0, !dereferenceable !1
-  store i32 0, i32* %a
-  store i32 0, i32* %b
+define void @test_load_load_combine_metadata(ptr, ptr, ptr) {
+  %a = load ptr, ptr %0, !dereferenceable !0
+  %b = load ptr, ptr %0, !dereferenceable !1
+  store i32 0, ptr %a
+  store i32 0, ptr %b
   ret void
 }
 
index 7d1ae3726b4379424dbf58bd86f24e8c0a0c290d..677347cc8ec635d0d20f1751e3740c6f26650852 100644 (file)
@@ -4,13 +4,13 @@ target datalayout = "e-m:e-p:64:64:64-i64:64-f80:128-n8:16:32:64-S128"
 
 ; CHECK-LABEL: @test_load_load_combine_metadata(
 ; Check that dereferenceable_or_null metadata is combined
-; CHECK: load i32*, i32** %0
+; CHECK: load ptr, ptr %0
 ; CHECK-SAME: !dereferenceable_or_null ![[DEREF:[0-9]+]]
-define void @test_load_load_combine_metadata(i32**, i32**, i32**) {
-  %a = load i32*, i32** %0, !dereferenceable_or_null !0
-  %b = load i32*, i32** %0, !dereferenceable_or_null !1
-  store i32 0, i32* %a
-  store i32 0, i32* %b
+define void @test_load_load_combine_metadata(ptr, ptr, ptr) {
+  %a = load ptr, ptr %0, !dereferenceable_or_null !0
+  %b = load ptr, ptr %0, !dereferenceable_or_null !1
+  store i32 0, ptr %a
+  store i32 0, ptr %b
   ret void
 }
 
index 7a53526416a35e708362061c483a6cd1586c9489..882d775291e591a6eba596d05bf6b93f0400908b 100644 (file)
@@ -5,35 +5,35 @@ target datalayout = "e-m:e-p:64:64:64-i64:64-f80:128-n8:16:32:64-S128"
 ; Check that nonnull metadata is propagated from dominating load.
 ; CHECK-LABEL: @combine_metadata_dominance1(
 ; CHECK-LABEL: bb1:
-; CHECK: load i32*, i32** %p, align 8, !nonnull !0
-; CHECK-NOT: load i32*, i32** %p
-define void @combine_metadata_dominance1(i32** %p) {
+; CHECK: load ptr, ptr %p, align 8, !nonnull !0
+; CHECK-NOT: load ptr, ptr %p
+define void @combine_metadata_dominance1(ptr %p) {
 entry:
-  %a = load i32*, i32** %p, !nonnull !0
+  %a = load ptr, ptr %p, !nonnull !0
   br label %bb1
 
 bb1:
-  %b = load i32*, i32** %p
-  store i32 0, i32* %a
-  store i32 0, i32* %b
+  %b = load ptr, ptr %p
+  store i32 0, ptr %a
+  store i32 0, ptr %b
   ret void
 }
 
-declare i32 @use(i32*, i32) readonly
+declare i32 @use(ptr, i32) readonly
 
 ; Check that nonnull from the dominated load does not get propagated.
 ; There are some cases where it would be safe to keep it.
 ; CHECK-LABEL: @combine_metadata_dominance2(
 ; CHECK-NOT: nonnull
-define void @combine_metadata_dominance2(i32** %p, i1 %c1) {
+define void @combine_metadata_dominance2(ptr %p, i1 %c1) {
 entry:
-  %a = load i32*, i32** %p
+  %a = load ptr, ptr %p
   br i1 %c1, label %bb1, label %bb2
 
 bb1:
-  %b = load i32*, i32** %p, !nonnull !0
-  store i32 0, i32* %a
-  store i32 0, i32* %b
+  %b = load ptr, ptr %p, !nonnull !0
+  store i32 0, ptr %a
+  store i32 0, ptr %b
   ret void
 
 bb2:
index 15c2243cf264f7a771abf26c58892067342a5e10..61c37f8e7ffe146516f982d09d3c477960b44bee 100644 (file)
@@ -4,16 +4,16 @@ target datalayout = "e-m:e-p:64:64:64-i64:64-f80:128-n8:16:32:64-S128"
 
 ; CHECK-LABEL: @test_load_load_combine_metadata(
 ; Check that range and AA metadata is combined
-; CHECK: %[[V:.*]] = load i32, i32* %0
+; CHECK: %[[V:.*]] = load i32, ptr %0
 ; CHECK-SAME: !tbaa !{{[0-9]+}}
 ; CHECK-SAME: !range ![[RANGE:[0-9]+]]
-; CHECK: store i32 %[[V]], i32* %1
-; CHECK: store i32 %[[V]], i32* %2
-define void @test_load_load_combine_metadata(i32*, i32*, i32*) {
-  %a = load i32, i32* %0, !tbaa !8, !range !0, !alias.scope !5, !noalias !6
-  %b = load i32, i32* %0, !tbaa !8, !range !1
-  store i32 %a, i32* %1
-  store i32 %b, i32* %2
+; CHECK: store i32 %[[V]], ptr %1
+; CHECK: store i32 %[[V]], ptr %2
+define void @test_load_load_combine_metadata(ptr, ptr, ptr) {
+  %a = load i32, ptr %0, !tbaa !8, !range !0, !alias.scope !5, !noalias !6
+  %b = load i32, ptr %0, !tbaa !8, !range !1
+  store i32 %a, ptr %1
+  store i32 %b, ptr %2
   ret void
 }
 
index c4e0bc002bec273caaf4101ade752ff9b48316be..7d6fbc38cb6101cee6784957cc2717640847cfe3 100644 (file)
@@ -2,17 +2,17 @@
 ; RUN: opt -tbaa -instcombine -S < %s | FileCheck %s
 
 ; Check that load to load forwarding works with non aliasing store inbetween.
-define i32 @test_load_store_load_combine(i32*, float*) {
+define i32 @test_load_store_load_combine(ptr, ptr) {
 ; CHECK-LABEL: @test_load_store_load_combine(
-; CHECK-NEXT:    [[A:%.*]] = load i32, i32* [[TMP0:%.*]], align 4, !tbaa [[TBAA0:![0-9]+]]
+; CHECK-NEXT:    [[A:%.*]] = load i32, ptr [[TMP0:%.*]], align 4, !tbaa [[TBAA0:![0-9]+]]
 ; CHECK-NEXT:    [[F:%.*]] = sitofp i32 [[A]] to float
-; CHECK-NEXT:    store float [[F]], float* [[TMP1:%.*]], align 4, !tbaa [[TBAA4:![0-9]+]]
+; CHECK-NEXT:    store float [[F]], ptr [[TMP1:%.*]], align 4, !tbaa [[TBAA4:![0-9]+]]
 ; CHECK-NEXT:    ret i32 [[A]]
 ;
-  %a = load i32, i32* %0, align 4, !tbaa !0
+  %a = load i32, ptr %0, align 4, !tbaa !0
   %f = sitofp i32 %a to float
-  store float %f, float* %1, align 4, !tbaa !4
-  %b = load i32, i32* %0, align 4, !tbaa !0
+  store float %f, ptr %1, align 4, !tbaa !4
+  %b = load i32, ptr %0, align 4, !tbaa !0
   ret i32 %b
 }
 
index 86b27d987dcb6673ac624cacfbc0eb35d8c9ffcf..eaf1375cb40a226042607d8228031ed362ab5449 100644 (file)
@@ -2,7 +2,7 @@
 
 target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:32-n32"
 
-@a = constant [2 x i32] [i32 3, i32 6]            ; <[2 x i32]*> [#uses=2]
+@a = constant [2 x i32] [i32 3, i32 6]            ; <ptr> [#uses=2]
 
 define i32 @b(i32 %y) nounwind readonly {
 ; CHECK-LABEL: @b(
@@ -10,7 +10,7 @@ define i32 @b(i32 %y) nounwind readonly {
 ; CHECK: ret i32
 entry:
   %0 = icmp eq i32 %y, 0                          ; <i1> [#uses=1]
-  %storemerge = select i1 %0, i32* getelementptr inbounds ([2 x i32], [2 x i32]* @a, i32 0, i32 1), i32* getelementptr inbounds ([2 x i32], [2 x i32]* @a, i32 0, i32 0) ; <i32*> [#uses=1]
-  %1 = load i32, i32* %storemerge, align 4             ; <i32> [#uses=1]
+  %storemerge = select i1 %0, ptr getelementptr inbounds ([2 x i32], ptr @a, i32 0, i32 1), ptr @a ; <ptr> [#uses=1]
+  %1 = load i32, ptr %storemerge, align 4             ; <i32> [#uses=1]
   ret i32 %1
 }
index 750eb51e405d16d405917d5c4d602d64e82853a2..767c370e2614a0b474b1010e9537b09a2062973a 100644 (file)
 ; RUN: opt -S -passes=instcombine < %s | FileCheck %s --check-prefixes=CHECK,LITTLE
 ; RUN: opt -S -passes=instcombine -data-layout="E" < %s | FileCheck %s --check-prefixes=CHECK,BIG
 
-define i8 @load_smaller_int(i16* %p) {
+define i8 @load_smaller_int(ptr %p) {
 ; LITTLE-LABEL: @load_smaller_int(
-; LITTLE-NEXT:    store i16 258, i16* [[P:%.*]], align 2
+; LITTLE-NEXT:    store i16 258, ptr [[P:%.*]], align 2
 ; LITTLE-NEXT:    ret i8 2
 ;
 ; BIG-LABEL: @load_smaller_int(
-; BIG-NEXT:    store i16 258, i16* [[P:%.*]], align 2
+; BIG-NEXT:    store i16 258, ptr [[P:%.*]], align 2
 ; BIG-NEXT:    ret i8 1
 ;
-  store i16 258, i16* %p
-  %p2 = bitcast i16* %p to i8*
-  %load = load i8, i8* %p2
+  store i16 258, ptr %p
+  %load = load i8, ptr %p
   ret i8 %load
 }
 
 ; This case can *not* be forwarded, as we only see part of the stored value.
-define i32 @load_larger_int(i16* %p) {
+define i32 @load_larger_int(ptr %p) {
 ; CHECK-LABEL: @load_larger_int(
-; CHECK-NEXT:    store i16 258, i16* [[P:%.*]], align 2
-; CHECK-NEXT:    [[P2:%.*]] = bitcast i16* [[P]] to i32*
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32, i32* [[P2]], align 4
+; CHECK-NEXT:    store i16 258, ptr [[P:%.*]], align 2
+; CHECK-NEXT:    [[LOAD:%.*]] = load i32, ptr [[P]], align 4
 ; CHECK-NEXT:    ret i32 [[LOAD]]
 ;
-  store i16 258, i16* %p
-  %p2 = bitcast i16* %p to i32*
-  %load = load i32, i32* %p2
+  store i16 258, ptr %p
+  %load = load i32, ptr %p
   ret i32 %load
 }
 
-define i32 @vec_store_load_first(i32* %p) {
+define i32 @vec_store_load_first(ptr %p) {
 ; CHECK-LABEL: @vec_store_load_first(
-; CHECK-NEXT:    [[P2:%.*]] = bitcast i32* [[P:%.*]] to <2 x i32>*
-; CHECK-NEXT:    store <2 x i32> <i32 1, i32 2>, <2 x i32>* [[P2]], align 8
+; CHECK-NEXT:    store <2 x i32> <i32 1, i32 2>, ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    ret i32 1
 ;
-  %p2 = bitcast i32* %p to <2 x i32>*
-  store <2 x i32> <i32 1, i32 2>, <2 x i32>* %p2
-  %load = load i32, i32* %p
+  store <2 x i32> <i32 1, i32 2>, ptr %p
+  %load = load i32, ptr %p
   ret i32 %load
 }
 
-define i17 @vec_store_load_first_odd_size(i17* %p) {
+define i17 @vec_store_load_first_odd_size(ptr %p) {
 ; CHECK-LABEL: @vec_store_load_first_odd_size(
-; CHECK-NEXT:    [[P2:%.*]] = bitcast i17* [[P:%.*]] to <2 x i17>*
-; CHECK-NEXT:    store <2 x i17> <i17 1, i17 2>, <2 x i17>* [[P2]], align 8
-; CHECK-NEXT:    [[LOAD:%.*]] = load i17, i17* [[P]], align 4
+; CHECK-NEXT:    store <2 x i17> <i17 1, i17 2>, ptr [[P:%.*]], align 8
+; CHECK-NEXT:    [[LOAD:%.*]] = load i17, ptr [[P]], align 4
 ; CHECK-NEXT:    ret i17 [[LOAD]]
 ;
-  %p2 = bitcast i17* %p to <2 x i17>*
-  store <2 x i17> <i17 1, i17 2>, <2 x i17>* %p2
-  %load = load i17, i17* %p
+  store <2 x i17> <i17 1, i17 2>, ptr %p
+  %load = load i17, ptr %p
   ret i17 %load
 }
 
-define i32 @vec_store_load_first_constexpr(i32* %p) {
+define i32 @vec_store_load_first_constexpr(ptr %p) {
 ; CHECK-LABEL: @vec_store_load_first_constexpr(
-; CHECK-NEXT:    [[P2:%.*]] = bitcast i32* [[P:%.*]] to <2 x i32>*
-; CHECK-NEXT:    store <2 x i32> bitcast (i64 ptrtoint (i32 (i32*)* @vec_store_load_first to i64) to <2 x i32>), <2 x i32>* [[P2]], align 8
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32, i32* [[P]], align 4
+; CHECK-NEXT:    store <2 x i32> bitcast (i64 ptrtoint (ptr @vec_store_load_first to i64) to <2 x i32>), ptr [[P:%.*]], align 8
+; CHECK-NEXT:    [[LOAD:%.*]] = load i32, ptr [[P]], align 4
 ; CHECK-NEXT:    ret i32 [[LOAD]]
 ;
-  %p2 = bitcast i32* %p to <2 x i32>*
-  store <2 x i32> bitcast (i64 ptrtoint (i32 (i32*)* @vec_store_load_first to i64) to <2 x i32>), <2 x i32>* %p2, align 8
-  %load = load i32, i32* %p, align 4
+  store <2 x i32> bitcast (i64 ptrtoint (ptr @vec_store_load_first to i64) to <2 x i32>), ptr %p, align 8
+  %load = load i32, ptr %p, align 4
   ret i32 %load
 }
 
-define i32 @vec_store_load_second(i32* %p) {
+define i32 @vec_store_load_second(ptr %p) {
 ; CHECK-LABEL: @vec_store_load_second(
-; CHECK-NEXT:    [[P2:%.*]] = bitcast i32* [[P:%.*]] to <2 x i32>*
-; CHECK-NEXT:    store <2 x i32> <i32 1, i32 2>, <2 x i32>* [[P2]], align 8
-; CHECK-NEXT:    [[P3:%.*]] = getelementptr i32, i32* [[P]], i64 1
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32, i32* [[P3]], align 4
+; CHECK-NEXT:    store <2 x i32> <i32 1, i32 2>, ptr [[P:%.*]], align 8
+; CHECK-NEXT:    [[P3:%.*]] = getelementptr i32, ptr [[P]], i64 1
+; CHECK-NEXT:    [[LOAD:%.*]] = load i32, ptr [[P3]], align 4
 ; CHECK-NEXT:    ret i32 [[LOAD]]
 ;
-  %p2 = bitcast i32* %p to <2 x i32>*
-  store <2 x i32> <i32 1, i32 2>, <2 x i32>* %p2
-  %p3 = getelementptr i32, i32* %p, i64 1
-  %load = load i32, i32* %p3
+  store <2 x i32> <i32 1, i32 2>, ptr %p
+  %p3 = getelementptr i32, ptr %p, i64 1
+  %load = load i32, ptr %p3
   ret i32 %load
 }
 
-define i64 @vec_store_load_whole(i32* %p) {
+define i64 @vec_store_load_whole(ptr %p) {
 ; LITTLE-LABEL: @vec_store_load_whole(
-; LITTLE-NEXT:    [[P2:%.*]] = bitcast i32* [[P:%.*]] to <2 x i32>*
-; LITTLE-NEXT:    store <2 x i32> <i32 1, i32 2>, <2 x i32>* [[P2]], align 8
+; LITTLE-NEXT:    store <2 x i32> <i32 1, i32 2>, ptr [[P:%.*]], align 8
 ; LITTLE-NEXT:    ret i64 8589934593
 ;
 ; BIG-LABEL: @vec_store_load_whole(
-; BIG-NEXT:    [[P2:%.*]] = bitcast i32* [[P:%.*]] to <2 x i32>*
-; BIG-NEXT:    store <2 x i32> <i32 1, i32 2>, <2 x i32>* [[P2]], align 8
+; BIG-NEXT:    store <2 x i32> <i32 1, i32 2>, ptr [[P:%.*]], align 8
 ; BIG-NEXT:    ret i64 4294967298
 ;
-  %p2 = bitcast i32* %p to <2 x i32>*
-  store <2 x i32> <i32 1, i32 2>, <2 x i32>* %p2
-  %p3 = bitcast i32* %p to i64*
-  %load = load i64, i64* %p3
+  store <2 x i32> <i32 1, i32 2>, ptr %p
+  %load = load i64, ptr %p
   ret i64 %load
 }
 
-define i32 @vec_store_load_overlap(i32* %p) {
+define i32 @vec_store_load_overlap(ptr %p) {
 ; CHECK-LABEL: @vec_store_load_overlap(
-; CHECK-NEXT:    [[P2:%.*]] = bitcast i32* [[P:%.*]] to <2 x i32>*
-; CHECK-NEXT:    store <2 x i32> <i32 1, i32 2>, <2 x i32>* [[P2]], align 8
-; CHECK-NEXT:    [[P3:%.*]] = bitcast i32* [[P]] to i8*
-; CHECK-NEXT:    [[P4:%.*]] = getelementptr i8, i8* [[P3]], i64 2
-; CHECK-NEXT:    [[P5:%.*]] = bitcast i8* [[P4]] to i32*
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32, i32* [[P5]], align 2
+; CHECK-NEXT:    store <2 x i32> <i32 1, i32 2>, ptr [[P:%.*]], align 8
+; CHECK-NEXT:    [[P4:%.*]] = getelementptr i8, ptr [[P]], i64 2
+; CHECK-NEXT:    [[LOAD:%.*]] = load i32, ptr [[P4]], align 2
 ; CHECK-NEXT:    ret i32 [[LOAD]]
 ;
-  %p2 = bitcast i32* %p to <2 x i32>*
-  store <2 x i32> <i32 1, i32 2>, <2 x i32>* %p2
-  %p3 = bitcast i32* %p to i8*
-  %p4 = getelementptr i8, i8* %p3, i64 2
-  %p5 = bitcast i8* %p4 to i32*
-  %load = load i32, i32* %p5, align 2
+  store <2 x i32> <i32 1, i32 2>, ptr %p
+  %p4 = getelementptr i8, ptr %p, i64 2
+  %load = load i32, ptr %p4, align 2
   ret i32 %load
 }
 
-define i32 @load_i32_store_nxv4i32(i32* %a) {
+define i32 @load_i32_store_nxv4i32(ptr %a) {
 ; CHECK-LABEL: @load_i32_store_nxv4i32(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i32* [[A:%.*]] to <vscale x 4 x i32>*
-; CHECK-NEXT:    store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x i32>* [[TMP0]], align 16
-; CHECK-NEXT:    [[TMP1:%.*]] = load i32, i32* [[A]], align 4
+; CHECK-NEXT:    store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), ptr [[A:%.*]], align 16
+; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[A]], align 4
 ; CHECK-NEXT:    ret i32 [[TMP1]]
 ;
 entry:
-  %0 = bitcast i32* %a to <vscale x 4 x i32>*
-  store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x i32>* %0, align 16
-  %1 = load i32, i32* %a, align 4
-  ret i32 %1
+  store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), ptr %a, align 16
+  %0 = load i32, ptr %a, align 4
+  ret i32 %0
 }
 
-define i64 @load_i64_store_nxv8i8(i8* %a) {
+define i64 @load_i64_store_nxv8i8(ptr %a) {
 ; CHECK-LABEL: @load_i64_store_nxv8i8(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i8* [[A:%.*]] to <vscale x 8 x i8>*
-; CHECK-NEXT:    store <vscale x 8 x i8> shufflevector (<vscale x 8 x i8> insertelement (<vscale x 8 x i8> poison, i8 1, i32 0), <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer), <vscale x 8 x i8>* [[TMP0]], align 16
-; CHECK-NEXT:    [[A2:%.*]] = bitcast i8* [[A]] to i64*
-; CHECK-NEXT:    [[LOAD:%.*]] = load i64, i64* [[A2]], align 8
+; CHECK-NEXT:    store <vscale x 8 x i8> shufflevector (<vscale x 8 x i8> insertelement (<vscale x 8 x i8> poison, i8 1, i32 0), <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer), ptr [[A:%.*]], align 16
+; CHECK-NEXT:    [[LOAD:%.*]] = load i64, ptr [[A]], align 8
 ; CHECK-NEXT:    ret i64 [[LOAD]]
 ;
 entry:
-  %0 = bitcast i8* %a to <vscale x 8 x i8>*
-  store <vscale x 8 x i8> shufflevector (<vscale x 8 x i8> insertelement (<vscale x 8 x i8> poison, i8 1, i32 0), <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer), <vscale x 8 x i8>* %0, align 16
-  %a2 = bitcast i8* %a to i64*
-  %load = load i64, i64* %a2, align 8
+  store <vscale x 8 x i8> shufflevector (<vscale x 8 x i8> insertelement (<vscale x 8 x i8> poison, i8 1, i32 0), <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer), ptr %a, align 16
+  %load = load i64, ptr %a, align 8
   ret i64 %load
 }
 
-define i64 @load_i64_store_nxv4i32(i32* %a) {
+define i64 @load_i64_store_nxv4i32(ptr %a) {
 ; CHECK-LABEL: @load_i64_store_nxv4i32(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i32* [[A:%.*]] to <vscale x 4 x i32>*
-; CHECK-NEXT:    store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x i32>* [[TMP0]], align 16
-; CHECK-NEXT:    [[A2:%.*]] = bitcast i32* [[A]] to i64*
-; CHECK-NEXT:    [[LOAD:%.*]] = load i64, i64* [[A2]], align 8
+; CHECK-NEXT:    store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), ptr [[A:%.*]], align 16
+; CHECK-NEXT:    [[LOAD:%.*]] = load i64, ptr [[A]], align 8
 ; CHECK-NEXT:    ret i64 [[LOAD]]
 ;
 entry:
-  %0 = bitcast i32* %a to <vscale x 4 x i32>*
-  store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x i32>* %0, align 16
-  %a2 = bitcast i32* %a to i64*
-  %load = load i64, i64* %a2, align 8
+  store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), ptr %a, align 16
+  %load = load i64, ptr %a, align 8
   ret i64 %load
 }
 
-define i8 @load_i8_store_nxv4i32(i32* %a) {
+define i8 @load_i8_store_nxv4i32(ptr %a) {
 ; CHECK-LABEL: @load_i8_store_nxv4i32(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i32* [[A:%.*]] to <vscale x 4 x i32>*
-; CHECK-NEXT:    store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x i32>* [[TMP0]], align 16
-; CHECK-NEXT:    [[A2:%.*]] = bitcast i32* [[A]] to i8*
-; CHECK-NEXT:    [[LOAD:%.*]] = load i8, i8* [[A2]], align 1
+; CHECK-NEXT:    store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), ptr [[A:%.*]], align 16
+; CHECK-NEXT:    [[LOAD:%.*]] = load i8, ptr [[A]], align 1
 ; CHECK-NEXT:    ret i8 [[LOAD]]
 ;
 entry:
-  %0 = bitcast i32* %a to <vscale x 4 x i32>*
-  store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x i32>* %0, align 16
-  %a2 = bitcast i32* %a to i8*
-  %load = load i8, i8* %a2, align 1
+  store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), ptr %a, align 16
+  %load = load i8, ptr %a, align 1
   ret i8 %load
 }
 
-define float @load_f32_store_nxv4f32(float* %a) {
+define float @load_f32_store_nxv4f32(ptr %a) {
 ; CHECK-LABEL: @load_f32_store_nxv4f32(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast float* [[A:%.*]] to <vscale x 4 x float>*
-; CHECK-NEXT:    store <vscale x 4 x float> shufflevector (<vscale x 4 x float> insertelement (<vscale x 4 x float> poison, float 1.000000e+00, i64 0), <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x float>* [[TMP0]], align 16
-; CHECK-NEXT:    [[TMP1:%.*]] = load float, float* [[A]], align 4
+; CHECK-NEXT:    store <vscale x 4 x float> shufflevector (<vscale x 4 x float> insertelement (<vscale x 4 x float> poison, float 1.000000e+00, i64 0), <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer), ptr [[A:%.*]], align 16
+; CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr [[A]], align 4
 ; CHECK-NEXT:    ret float [[TMP1]]
 ;
 entry:
-  %0 = bitcast float* %a to <vscale x 4 x float>*
-  store <vscale x 4 x float> shufflevector (<vscale x 4 x float> insertelement (<vscale x 4 x float> poison, float 1.0, i64 0), <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x float>* %0, align 16
-  %1 = load float, float* %a, align 4
-  ret float %1
+  store <vscale x 4 x float> shufflevector (<vscale x 4 x float> insertelement (<vscale x 4 x float> poison, float 1.0, i64 0), <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer), ptr %a, align 16
+  %0 = load float, ptr %a, align 4
+  ret float %0
 }
 
-define i32 @load_i32_store_nxv4f32(float* %a) {
+define i32 @load_i32_store_nxv4f32(ptr %a) {
 ; CHECK-LABEL: @load_i32_store_nxv4f32(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast float* [[A:%.*]] to <vscale x 4 x float>*
-; CHECK-NEXT:    store <vscale x 4 x float> shufflevector (<vscale x 4 x float> insertelement (<vscale x 4 x float> poison, float 1.000000e+00, i64 0), <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x float>* [[TMP0]], align 16
-; CHECK-NEXT:    [[A2:%.*]] = bitcast float* [[A]] to i32*
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32, i32* [[A2]], align 4
+; CHECK-NEXT:    store <vscale x 4 x float> shufflevector (<vscale x 4 x float> insertelement (<vscale x 4 x float> poison, float 1.000000e+00, i64 0), <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer), ptr [[A:%.*]], align 16
+; CHECK-NEXT:    [[LOAD:%.*]] = load i32, ptr [[A]], align 4
 ; CHECK-NEXT:    ret i32 [[LOAD]]
 ;
 entry:
-  %0 = bitcast float* %a to <vscale x 4 x float>*
-  store <vscale x 4 x float> shufflevector (<vscale x 4 x float> insertelement (<vscale x 4 x float> poison, float 1.0, i64 0), <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x float>* %0, align 16
-  %a2 = bitcast float* %a to i32*
-  %load = load i32, i32* %a2, align 4
+  store <vscale x 4 x float> shufflevector (<vscale x 4 x float> insertelement (<vscale x 4 x float> poison, float 1.0, i64 0), <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer), ptr %a, align 16
+  %load = load i32, ptr %a, align 4
   ret i32 %load
 }
 
-define <4 x i32> @load_v4i32_store_nxv4i32(i32* %a) {
+define <4 x i32> @load_v4i32_store_nxv4i32(ptr %a) {
 ; CHECK-LABEL: @load_v4i32_store_nxv4i32(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i32* [[A:%.*]] to <vscale x 4 x i32>*
-; CHECK-NEXT:    store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x i32>* [[TMP0]], align 16
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i32* [[A]] to <4 x i32>*
-; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, <4 x i32>* [[TMP1]], align 16
+; CHECK-NEXT:    store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), ptr [[A:%.*]], align 16
+; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr [[A]], align 16
 ; CHECK-NEXT:    ret <4 x i32> [[TMP2]]
 ;
 entry:
-  %0 = bitcast i32* %a to <vscale x 4 x i32>*
-  store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x i32>* %0, align 16
-  %1 = bitcast i32* %a to <4 x i32>*
-  %2 = load <4 x i32>, <4 x i32>* %1, align 16
-  ret <4 x i32> %2
+  store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), ptr %a, align 16
+  %0 = load <4 x i32>, ptr %a, align 16
+  ret <4 x i32> %0
 }
 
-define <4 x i16> @load_v4i16_store_nxv4i32(i32* %a) {
+define <4 x i16> @load_v4i16_store_nxv4i32(ptr %a) {
 ; CHECK-LABEL: @load_v4i16_store_nxv4i32(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i32* [[A:%.*]] to <vscale x 4 x i32>*
-; CHECK-NEXT:    store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x i32>* [[TMP0]], align 16
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i32* [[A]] to <4 x i16>*
-; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, <4 x i16>* [[TMP1]], align 16
+; CHECK-NEXT:    store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), ptr [[A:%.*]], align 16
+; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[A]], align 16
 ; CHECK-NEXT:    ret <4 x i16> [[TMP2]]
 ;
 entry:
-  %0 = bitcast i32* %a to <vscale x 4 x i32>*
-  store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x i32>* %0, align 16
-  %1 = bitcast i32* %a to <4 x i16>*
-  %2 = load <4 x i16>, <4 x i16>* %1, align 16
-  ret <4 x i16> %2
+  store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), ptr %a, align 16
+  %0 = load <4 x i16>, ptr %a, align 16
+  ret <4 x i16> %0
 }
 
 ; Loaded data type exceeds the known minimum size of the store.
-define i64 @load_i64_store_nxv4i8(i8* %a) {
+define i64 @load_i64_store_nxv4i8(ptr %a) {
 ; CHECK-LABEL: @load_i64_store_nxv4i8(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i8* [[A:%.*]] to <vscale x 4 x i8>*
-; CHECK-NEXT:    store <vscale x 4 x i8> shufflevector (<vscale x 4 x i8> insertelement (<vscale x 4 x i8> poison, i8 1, i32 0), <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x i8>* [[TMP0]], align 16
-; CHECK-NEXT:    [[A2:%.*]] = bitcast i8* [[A]] to i64*
-; CHECK-NEXT:    [[LOAD:%.*]] = load i64, i64* [[A2]], align 8
+; CHECK-NEXT:    store <vscale x 4 x i8> shufflevector (<vscale x 4 x i8> insertelement (<vscale x 4 x i8> poison, i8 1, i32 0), <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer), ptr [[A:%.*]], align 16
+; CHECK-NEXT:    [[LOAD:%.*]] = load i64, ptr [[A]], align 8
 ; CHECK-NEXT:    ret i64 [[LOAD]]
 ;
 entry:
-  %0 = bitcast i8* %a to <vscale x 4 x i8>*
-  store <vscale x 4 x i8> shufflevector (<vscale x 4 x i8> insertelement (<vscale x 4 x i8> poison, i8 1, i32 0), <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x i8>* %0, align 16
-  %a2 = bitcast i8* %a to i64*
-  %load = load i64, i64* %a2, align 8
+  store <vscale x 4 x i8> shufflevector (<vscale x 4 x i8> insertelement (<vscale x 4 x i8> poison, i8 1, i32 0), <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer), ptr %a, align 16
+  %load = load i64, ptr %a, align 8
   ret i64 %load
 }
 
 ; Loaded data size is unknown - we cannot guarantee it won't
 ; exceed the store size.
-define <vscale x 4 x i8> @load_nxv4i8_store_nxv4i32(i32* %a) {
+define <vscale x 4 x i8> @load_nxv4i8_store_nxv4i32(ptr %a) {
 ; CHECK-LABEL: @load_nxv4i8_store_nxv4i32(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i32* [[A:%.*]] to <vscale x 4 x i32>*
-; CHECK-NEXT:    store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x i32>* [[TMP0]], align 16
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i32* [[A]] to <vscale x 4 x i8>*
-; CHECK-NEXT:    [[TMP2:%.*]] = load <vscale x 4 x i8>, <vscale x 4 x i8>* [[TMP1]], align 16
+; CHECK-NEXT:    store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), ptr [[A:%.*]], align 16
+; CHECK-NEXT:    [[TMP2:%.*]] = load <vscale x 4 x i8>, ptr [[A]], align 16
 ; CHECK-NEXT:    ret <vscale x 4 x i8> [[TMP2]]
 ;
 entry:
-  %0 = bitcast i32* %a to <vscale x 4 x i32>*
-  store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), <vscale x 4 x i32>* %0, align 16
-  %1 = bitcast i32* %a to <vscale x 4 x i8>*
-  %2 = load <vscale x 4 x i8>, <vscale x 4 x i8>* %1, align 16
-  ret <vscale x 4 x i8> %2
+  store <vscale x 4 x i32> shufflevector (<vscale x 4 x i32> insertelement (<vscale x 4 x i32> poison, i32 1, i64 0), <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer), ptr %a, align 16
+  %0 = load <vscale x 4 x i8>, ptr %a, align 16
+  ret <vscale x 4 x i8> %0
 }
 
-define i8 @load_i8_store_i1(i1* %a) {
+define i8 @load_i8_store_i1(ptr %a) {
 ; CHECK-LABEL: @load_i8_store_i1(
-; CHECK-NEXT:    store i1 true, i1* [[A:%.*]], align 1
-; CHECK-NEXT:    [[A_I8:%.*]] = bitcast i1* [[A]] to i8*
-; CHECK-NEXT:    [[V:%.*]] = load i8, i8* [[A_I8]], align 1
+; CHECK-NEXT:    store i1 true, ptr [[A:%.*]], align 1
+; CHECK-NEXT:    [[V:%.*]] = load i8, ptr [[A]], align 1
 ; CHECK-NEXT:    ret i8 [[V]]
 ;
-  store i1 true, i1* %a
-  %a.i8 = bitcast i1* %a to i8*
-  %v = load i8, i8* %a.i8
+  store i1 true, ptr %a
+  %v = load i8, ptr %a
   ret i8 %v
 }
 
-define i1 @load_i1_store_i8(i8* %a) {
+define i1 @load_i1_store_i8(ptr %a) {
 ; CHECK-LABEL: @load_i1_store_i8(
-; CHECK-NEXT:    store i8 1, i8* [[A:%.*]], align 1
+; CHECK-NEXT:    store i8 1, ptr [[A:%.*]], align 1
 ; CHECK-NEXT:    ret i1 true
 ;
-  store i8 1, i8* %a
-  %a.i1 = bitcast i8* %a to i1*
-  %v = load i1, i1* %a.i1
+  store i8 1, ptr %a
+  %v = load i1, ptr %a
   ret i1 %v
 }
index 2a63f83177cae55e246ae10cb9072460399e17b1..b8cf7bb947a75b43c23b4201f5710ee2fade63eb 100644 (file)
@@ -4,10 +4,10 @@
 
 target datalayout = "e-m:e-p:64:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:1"
 
-@X = constant i32 42           ; <i32*> [#uses=2]
-@X2 = constant i32 47          ; <i32*> [#uses=1]
-@Y = constant [2 x { i32, float }] [ { i32, float } { i32 12, float 1.000000e+00 }, { i32, float } { i32 37, float 0x3FF3B2FEC0000000 } ]              ; <[2 x { i32, float }]*> [#uses=2]
-@Z = constant [2 x { i32, float }] zeroinitializer             ; <[2 x { i32, float }]*> [#uses=1]
+@X = constant i32 42           ; <ptr> [#uses=2]
+@X2 = constant i32 47          ; <ptr> [#uses=1]
+@Y = constant [2 x { i32, float }] [ { i32, float } { i32 12, float 1.000000e+00 }, { i32, float } { i32 37, float 0x3FF3B2FEC0000000 } ]              ; <ptr> [#uses=2]
+@Z = constant [2 x { i32, float }] zeroinitializer             ; <ptr> [#uses=1]
 
 @GLOBAL = internal constant [4 x i32] zeroinitializer
 
@@ -16,7 +16,7 @@ define i32 @test1() {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:    ret i32 42
 ;
-  %B = load i32, i32* @X               ; <i32> [#uses=1]
+  %B = load i32, ptr @X                ; <i32> [#uses=1]
   ret i32 %B
 }
 
@@ -24,8 +24,8 @@ define float @test2() {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:    ret float 0x3FF3B2FEC0000000
 ;
-  %A = getelementptr [2 x { i32, float }], [2 x { i32, float }]* @Y, i64 0, i64 1, i32 1               ; <float*> [#uses=1]
-  %B = load float, float* %A           ; <float> [#uses=1]
+  %A = getelementptr [2 x { i32, float }], ptr @Y, i64 0, i64 1, i32 1         ; <ptr> [#uses=1]
+  %B = load float, ptr %A              ; <float> [#uses=1]
   ret float %B
 }
 
@@ -33,8 +33,8 @@ define i32 @test3() {
 ; CHECK-LABEL: @test3(
 ; CHECK-NEXT:    ret i32 12
 ;
-  %A = getelementptr [2 x { i32, float }], [2 x { i32, float }]* @Y, i64 0, i64 0, i32 0               ; <i32*> [#uses=1]
-  %B = load i32, i32* %A               ; <i32> [#uses=1]
+  %A = getelementptr [2 x { i32, float }], ptr @Y, i64 0, i64 0, i32 0         ; <ptr> [#uses=1]
+  %B = load i32, ptr %A                ; <i32> [#uses=1]
   ret i32 %B
 }
 
@@ -42,8 +42,8 @@ define i32 @test4() {
 ; CHECK-LABEL: @test4(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %A = getelementptr [2 x { i32, float }], [2 x { i32, float }]* @Z, i64 0, i64 1, i32 0               ; <i32*> [#uses=1]
-  %B = load i32, i32* %A               ; <i32> [#uses=1]
+  %A = getelementptr [2 x { i32, float }], ptr @Z, i64 0, i64 1, i32 0         ; <ptr> [#uses=1]
+  %B = load i32, ptr %A                ; <i32> [#uses=1]
   ret i32 %B
 }
 
@@ -52,111 +52,110 @@ define i32 @test5(i1 %C) {
 ; CHECK-NEXT:    [[Z:%.*]] = select i1 [[C:%.*]], i32 42, i32 47
 ; CHECK-NEXT:    ret i32 [[Z]]
 ;
-  %Y = select i1 %C, i32* @X, i32* @X2         ; <i32*> [#uses=1]
-  %Z = load i32, i32* %Y               ; <i32> [#uses=1]
+  %Y = select i1 %C, ptr @X, ptr @X2           ; <ptr> [#uses=1]
+  %Z = load i32, ptr %Y                ; <i32> [#uses=1]
   ret i32 %Z
 }
 
 define i32 @load_gep_null_inbounds(i64 %X) {
 ; CHECK-LABEL: @load_gep_null_inbounds(
-; CHECK-NEXT:    store i32 poison, i32* null, align 4294967296
+; CHECK-NEXT:    store i32 poison, ptr null, align 4294967296
 ; CHECK-NEXT:    ret i32 poison
 ;
-  %V = getelementptr inbounds i32, i32* null, i64 %X
-  %R = load i32, i32* %V
+  %V = getelementptr inbounds i32, ptr null, i64 %X
+  %R = load i32, ptr %V
   ret i32 %R
 }
 
 define i32 @load_gep_null_not_inbounds(i64 %X) {
 ; CHECK-LABEL: @load_gep_null_not_inbounds(
-; CHECK-NEXT:    store i32 poison, i32* null, align 4294967296
+; CHECK-NEXT:    store i32 poison, ptr null, align 4294967296
 ; CHECK-NEXT:    ret i32 poison
 ;
-  %V = getelementptr i32, i32* null, i64 %X
-  %R = load i32, i32* %V
+  %V = getelementptr i32, ptr null, i64 %X
+  %R = load i32, ptr %V
   ret i32 %R
 }
 
 define i32 @test7_no_null_opt(i32 %X) #0 {
 ; CHECK-LABEL: @test7_no_null_opt(
 ; CHECK-NEXT:    [[TMP1:%.*]] = sext i32 [[X:%.*]] to i64
-; CHECK-NEXT:    [[V:%.*]] = getelementptr i32, i32* null, i64 [[TMP1]]
-; CHECK-NEXT:    [[R:%.*]] = load i32, i32* [[V]], align 4
+; CHECK-NEXT:    [[V:%.*]] = getelementptr i32, ptr null, i64 [[TMP1]]
+; CHECK-NEXT:    [[R:%.*]] = load i32, ptr [[V]], align 4
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
-  %V = getelementptr i32, i32* null, i32 %X               ; <i32*> [#uses=1]
-  %R = load i32, i32* %V          ; <i32> [#uses=1]
+  %V = getelementptr i32, ptr null, i32 %X               ; <ptr> [#uses=1]
+  %R = load i32, ptr %V          ; <i32> [#uses=1]
   ret i32 %R
 }
 attributes #0 = { null_pointer_is_valid }
 
-define i32 @test8(i32* %P) {
+define i32 @test8(ptr %P) {
 ; CHECK-LABEL: @test8(
-; CHECK-NEXT:    store i32 1, i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 1, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i32 1
 ;
-  store i32 1, i32* %P
-  %X = load i32, i32* %P               ; <i32> [#uses=1]
+  store i32 1, ptr %P
+  %X = load i32, ptr %P                ; <i32> [#uses=1]
   ret i32 %X
 }
 
-define i32 @test9(i32* %P) {
+define i32 @test9(ptr %P) {
 ; CHECK-LABEL: @test9(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %X = load i32, i32* %P               ; <i32> [#uses=1]
-  %Y = load i32, i32* %P               ; <i32> [#uses=1]
+  %X = load i32, ptr %P                ; <i32> [#uses=1]
+  %Y = load i32, ptr %P                ; <i32> [#uses=1]
   %Z = sub i32 %X, %Y          ; <i32> [#uses=1]
   ret i32 %Z
 }
 
-define i32 @test10(i1 %C.upgrd.1, i32* %P, i32* %Q) {
+define i32 @test10(i1 %C.upgrd.1, ptr %P, ptr %Q) {
 ; CHECK-LABEL: @test10(
 ; CHECK-NEXT:    br i1 [[C_UPGRD_1:%.*]], label [[T:%.*]], label [[F:%.*]]
 ; CHECK:       T:
-; CHECK-NEXT:    store i32 1, i32* [[Q:%.*]], align 4
+; CHECK-NEXT:    store i32 1, ptr [[Q:%.*]], align 4
 ; CHECK-NEXT:    br label [[C:%.*]]
 ; CHECK:       F:
 ; CHECK-NEXT:    br label [[C]]
 ; CHECK:       C:
-; CHECK-NEXT:    store i32 0, i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 0, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i32 0
 ;
   br i1 %C.upgrd.1, label %T, label %F
 T:             ; preds = %0
-  store i32 1, i32* %Q
-  store i32 0, i32* %P
+  store i32 1, ptr %Q
+  store i32 0, ptr %P
   br label %C
 F:             ; preds = %0
-  store i32 0, i32* %P
+  store i32 0, ptr %P
   br label %C
 C:             ; preds = %F, %T
-  %V = load i32, i32* %P               ; <i32> [#uses=1]
+  %V = load i32, ptr %P                ; <i32> [#uses=1]
   ret i32 %V
 }
 
-define double @test11(double* %p) {
+define double @test11(ptr %p) {
 ; CHECK-LABEL: @test11(
-; CHECK-NEXT:    [[T0:%.*]] = getelementptr double, double* [[P:%.*]], i64 1
-; CHECK-NEXT:    store double 2.000000e+00, double* [[T0]], align 8
+; CHECK-NEXT:    [[T0:%.*]] = getelementptr double, ptr [[P:%.*]], i64 1
+; CHECK-NEXT:    store double 2.000000e+00, ptr [[T0]], align 8
 ; CHECK-NEXT:    ret double 2.000000e+00
 ;
-  %t0 = getelementptr double, double* %p, i32 1
-  store double 2.0, double* %t0
-  %t1 = getelementptr double, double* %p, i32 1
-  %x = load double, double* %t1
+  %t0 = getelementptr double, ptr %p, i32 1
+  store double 2.0, ptr %t0
+  %t1 = getelementptr double, ptr %p, i32 1
+  %x = load double, ptr %t1
   ret double %x
 }
 
-define i32 @test12(i32* %P) {
+define i32 @test12(ptr %P) {
 ; CHECK-LABEL: @test12(
 ; CHECK-NEXT:    ret i32 123
 ;
   %A = alloca i32
-  store i32 123, i32* %A
+  store i32 123, ptr %A
   ; Cast the result of the load not the source
-  %Q = bitcast i32* %A to i32*
-  %V = load i32, i32* %Q
+  %V = load i32, ptr %A
   ret i32 %V
 }
 
@@ -164,7 +163,7 @@ define <16 x i8> @test13(<2 x i64> %x) {
 ; CHECK-LABEL: @test13(
 ; CHECK-NEXT:    ret <16 x i8> zeroinitializer
 ;
-  %tmp = load <16 x i8>, <16 x i8>* bitcast ([4 x i32]* @GLOBAL to <16 x i8>*)
+  %tmp = load <16 x i8>, ptr @GLOBAL
   ret <16 x i8> %tmp
 }
 
@@ -177,17 +176,15 @@ define <16 x i8> @test13(<2 x i64> %x) {
 define i8 @test14(i8 %x, i32 %y) {
 ; CHECK-LABEL: @test14(
 ; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    [[A_I8:%.*]] = bitcast i32* [[A]] to i8*
-; CHECK-NEXT:    store i8 [[X:%.*]], i8* [[A_I8]], align 4
-; CHECK-NEXT:    store i32 [[Y:%.*]], i32* [[A]], align 4
-; CHECK-NEXT:    [[R:%.*]] = load i8, i8* [[A_I8]], align 4
+; CHECK-NEXT:    store i8 [[X:%.*]], ptr [[A]], align 4
+; CHECK-NEXT:    store i32 [[Y:%.*]], ptr [[A]], align 4
+; CHECK-NEXT:    [[R:%.*]] = load i8, ptr [[A]], align 4
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %a = alloca i32
-  %a.i8 = bitcast i32* %a to i8*
-  store i8 %x, i8* %a.i8
-  store i32 %y, i32* %a
-  %r = load i8, i8* %a.i8
+  store i8 %x, ptr %a
+  store i32 %y, ptr %a
+  %r = load i8, ptr %a
   ret i8 %r
 }
 
@@ -197,83 +194,66 @@ define i8 @test14(i8 %x, i32 %y) {
 
 define i8 @test15(i8 %x, i32 %y) {
 ; CHECK-LABEL: @test15(
-; CHECK-NEXT:    store i8 [[X:%.*]], i8* bitcast (i32* @test15_global to i8*), align 4
-; CHECK-NEXT:    store i32 [[Y:%.*]], i32* @test15_global, align 4
-; CHECK-NEXT:    [[R:%.*]] = load i8, i8* bitcast (i32* @test15_global to i8*), align 4
+; CHECK-NEXT:    store i8 [[X:%.*]], ptr @test15_global, align 4
+; CHECK-NEXT:    store i32 [[Y:%.*]], ptr @test15_global, align 4
+; CHECK-NEXT:    [[R:%.*]] = load i8, ptr @test15_global, align 4
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
-  %g.i8 = bitcast i32* @test15_global to i8*
-  store i8 %x, i8* %g.i8
-  store i32 %y, i32* @test15_global
-  %r = load i8, i8* %g.i8
+  store i8 %x, ptr @test15_global
+  store i32 %y, ptr @test15_global
+  %r = load i8, ptr @test15_global
   ret i8 %r
 }
 
 ; Check that we canonicalize loads which are only stored to use integer types
 ; when there is a valid integer type.
 
-define void @test16(i8* %x, i8* %a, i8* %b, i8* %c) {
+define void @test16(ptr %x, ptr %a, ptr %b, ptr %c) {
 ; CHECK-LABEL: @test16(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[X_CAST:%.*]] = bitcast i8* [[X:%.*]] to float*
-; CHECK-NEXT:    [[A_CAST:%.*]] = bitcast i8* [[A:%.*]] to float*
-; CHECK-NEXT:    [[B_CAST:%.*]] = bitcast i8* [[B:%.*]] to float*
-; CHECK-NEXT:    [[X1:%.*]] = load float, float* [[X_CAST]], align 4
-; CHECK-NEXT:    store float [[X1]], float* [[A_CAST]], align 4
-; CHECK-NEXT:    store float [[X1]], float* [[B_CAST]], align 4
-; CHECK-NEXT:    [[X2:%.*]] = load float, float* [[X_CAST]], align 4
-; CHECK-NEXT:    store float [[X2]], float* [[B_CAST]], align 4
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i8* [[C:%.*]] to float*
-; CHECK-NEXT:    store float [[X2]], float* [[TMP0]], align 4
+; CHECK-NEXT:    [[X1:%.*]] = load float, ptr [[X:%.*]], align 4
+; CHECK-NEXT:    store float [[X1]], ptr [[A:%.*]], align 4
+; CHECK-NEXT:    store float [[X1]], ptr [[B:%.*]], align 4
+; CHECK-NEXT:    [[X2:%.*]] = load float, ptr [[X:%.*]], align 4
+; CHECK-NEXT:    store float [[X2]], ptr [[B:%.*]], align 4
+; CHECK-NEXT:    store float [[X2]], ptr [[C:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %x.cast = bitcast i8* %x to float*
-  %a.cast = bitcast i8* %a to float*
-  %b.cast = bitcast i8* %b to float*
-  %c.cast = bitcast i8* %c to i32*
 
-  %x1 = load float, float* %x.cast
-  store float %x1, float* %a.cast
-  store float %x1, float* %b.cast
+  %x1 = load float, ptr %x
+  store float %x1, ptr %a
+  store float %x1, ptr %b
 
-  %x2 = load float, float* %x.cast
-  store float %x2, float* %b.cast
+  %x2 = load float, ptr %x
+  store float %x2, ptr %b
   %x2.cast = bitcast float %x2 to i32
-  store i32 %x2.cast, i32* %c.cast
+  store i32 %x2.cast, ptr %c
 
   ret void
 }
 
-define void @test16-vect(i8* %x, i8* %a, i8* %b, i8* %c) {
+define void @test16-vect(ptr %x, ptr %a, ptr %b, ptr %c) {
 ; CHECK-LABEL: @test16-vect(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[X_CAST:%.*]] = bitcast i8* [[X:%.*]] to <4 x i8>*
-; CHECK-NEXT:    [[A_CAST:%.*]] = bitcast i8* [[A:%.*]] to <4 x i8>*
-; CHECK-NEXT:    [[B_CAST:%.*]] = bitcast i8* [[B:%.*]] to <4 x i8>*
-; CHECK-NEXT:    [[X1:%.*]] = load <4 x i8>, <4 x i8>* [[X_CAST]], align 4
-; CHECK-NEXT:    store <4 x i8> [[X1]], <4 x i8>* [[A_CAST]], align 4
-; CHECK-NEXT:    store <4 x i8> [[X1]], <4 x i8>* [[B_CAST]], align 4
-; CHECK-NEXT:    [[X2:%.*]] = load <4 x i8>, <4 x i8>* [[X_CAST]], align 4
-; CHECK-NEXT:    store <4 x i8> [[X2]], <4 x i8>* [[B_CAST]], align 4
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i8* [[C:%.*]] to <4 x i8>*
-; CHECK-NEXT:    store <4 x i8> [[X2]], <4 x i8>* [[TMP0]], align 4
+; CHECK-NEXT:    [[X1:%.*]] = load <4 x i8>, ptr [[X:%.*]], align 4
+; CHECK-NEXT:    store <4 x i8> [[X1]], ptr [[A:%.*]], align 4
+; CHECK-NEXT:    store <4 x i8> [[X1]], ptr [[B:%.*]], align 4
+; CHECK-NEXT:    [[X2:%.*]] = load <4 x i8>, ptr [[X:%.*]], align 4
+; CHECK-NEXT:    store <4 x i8> [[X2]], ptr [[B:%.*]], align 4
+; CHECK-NEXT:    store <4 x i8> [[X2]], ptr [[C:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %x.cast = bitcast i8* %x to <4 x i8>*
-  %a.cast = bitcast i8* %a to <4 x i8>*
-  %b.cast = bitcast i8* %b to <4 x i8>*
-  %c.cast = bitcast i8* %c to i32*
 
-  %x1 = load <4 x i8>, <4 x i8>* %x.cast
-  store <4 x i8> %x1, <4 x i8>* %a.cast
-  store <4 x i8> %x1, <4 x i8>* %b.cast
+  %x1 = load <4 x i8>, ptr %x
+  store <4 x i8> %x1, ptr %a
+  store <4 x i8> %x1, ptr %b
 
-  %x2 = load <4 x i8>, <4 x i8>* %x.cast
-  store <4 x i8> %x2, <4 x i8>* %b.cast
+  %x2 = load <4 x i8>, ptr %x
+  store <4 x i8> %x2, ptr %b
   %x2.cast = bitcast <4 x i8> %x2 to i32
-  store i32 %x2.cast, i32* %c.cast
+  store i32 %x2.cast, ptr %c
 
   ret void
 }
@@ -283,16 +263,16 @@ entry:
 ; its only use is a store but it is used as the pointer to that store rather
 ; than the value.
 
-define void @test17(i8** %x, i8 %y) {
+define void @test17(ptr %x, i8 %y) {
 ; CHECK-LABEL: @test17(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[X_LOAD:%.*]] = load i8*, i8** [[X:%.*]], align 8
-; CHECK-NEXT:    store i8 [[Y:%.*]], i8* [[X_LOAD]], align 1
+; CHECK-NEXT:    [[X_LOAD:%.*]] = load ptr, ptr [[X:%.*]], align 8
+; CHECK-NEXT:    store i8 [[Y:%.*]], ptr [[X_LOAD]], align 1
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %x.load = load i8*, i8** %x
-  store i8 %y, i8* %x.load
+  %x.load = load ptr, ptr %x
+  store i8 %y, ptr %x.load
 
   ret void
 }
@@ -300,125 +280,116 @@ entry:
 ; Check that we don't try change the type of the load by inserting a bitcast
 ; generating invalid IR.
 %swift.error = type opaque
-declare void @useSwiftError(%swift.error** swifterror)
+declare void @useSwiftError(ptr swifterror)
 
-define void @test18(%swift.error** swifterror %err) {
+define void @test18(ptr swifterror %err) {
 ; CHECK-LABEL: @test18(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[SWIFTERROR:%.*]] = alloca swifterror %swift.error*, align 8
-; CHECK-NEXT:    store %swift.error* null, %swift.error** [[SWIFTERROR]], align 8
-; CHECK-NEXT:    call void @useSwiftError(%swift.error** nonnull swifterror [[SWIFTERROR]])
-; CHECK-NEXT:    [[ERR_RES:%.*]] = load %swift.error*, %swift.error** [[SWIFTERROR]], align 8
-; CHECK-NEXT:    store %swift.error* [[ERR_RES]], %swift.error** [[ERR:%.*]], align 8
+; CHECK-NEXT:    [[SWIFTERROR:%.*]] = alloca swifterror ptr, align 8
+; CHECK-NEXT:    store ptr null, ptr [[SWIFTERROR]], align 8
+; CHECK-NEXT:    call void @useSwiftError(ptr nonnull swifterror [[SWIFTERROR]])
+; CHECK-NEXT:    [[ERR_RES:%.*]] = load ptr, ptr [[SWIFTERROR]], align 8
+; CHECK-NEXT:    store ptr [[ERR_RES]], ptr [[ERR:%.*]], align 8
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %swifterror = alloca swifterror %swift.error*, align 8
-  store %swift.error* null, %swift.error** %swifterror, align 8
-  call void @useSwiftError(%swift.error** nonnull swifterror %swifterror)
-  %err.res = load %swift.error*, %swift.error** %swifterror, align 8
-  store %swift.error* %err.res, %swift.error** %err, align 8
+  %swifterror = alloca swifterror ptr, align 8
+  store ptr null, ptr %swifterror, align 8
+  call void @useSwiftError(ptr nonnull swifterror %swifterror)
+  %err.res = load ptr, ptr %swifterror, align 8
+  store ptr %err.res, ptr %err, align 8
   ret void
 }
 
 ; Make sure we preseve the type of the store to a swifterror pointer.
 
-declare void @initi8(i8**)
-define void @test19(%swift.error** swifterror %err) {
+declare void @initi8(ptr)
+define void @test19(ptr swifterror %err) {
 ; CHECK-LABEL: @test19(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP:%.*]] = alloca i8*, align 8
-; CHECK-NEXT:    call void @initi8(i8** nonnull [[TMP]])
-; CHECK-NEXT:    [[SWIFTERROR:%.*]] = bitcast i8** [[TMP]] to %swift.error**
-; CHECK-NEXT:    [[ERR_RES:%.*]] = load %swift.error*, %swift.error** [[SWIFTERROR]], align 8
-; CHECK-NEXT:    store %swift.error* [[ERR_RES]], %swift.error** [[ERR:%.*]], align 8
+; CHECK-NEXT:    [[TMP:%.*]] = alloca ptr, align 8
+; CHECK-NEXT:    call void @initi8(ptr nonnull [[TMP]])
+; CHECK-NEXT:    [[ERR_RES:%.*]] = load ptr, ptr [[TMP]], align 8
+; CHECK-NEXT:    store ptr [[ERR_RES]], ptr [[ERR:%.*]], align 8
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %tmp = alloca i8*, align 8
-  call void @initi8(i8** %tmp)
-  %swifterror = bitcast i8** %tmp to %swift.error**
-  %err.res = load %swift.error*, %swift.error** %swifterror, align 8
-  store %swift.error* %err.res, %swift.error** %err, align 8
+  %tmp = alloca ptr, align 8
+  call void @initi8(ptr %tmp)
+  %err.res = load ptr, ptr %tmp, align 8
+  store ptr %err.res, ptr %err, align 8
   ret void
 }
 
 ; Make sure we don't canonicalize accesses to scalable vectors.
-define void @test20(<vscale x 4 x i8>* %x, <vscale x 4 x i8>* %y) {
+define void @test20(ptr %x, ptr %y) {
 ; CHECK-LABEL: @test20(
-; CHECK-NEXT:    [[X_LOAD:%.*]] = load <vscale x 4 x i8>, <vscale x 4 x i8>* [[X:%.*]], align 1
-; CHECK-NEXT:    store <vscale x 4 x i8> [[X_LOAD]], <vscale x 4 x i8>* [[Y:%.*]], align 1
+; CHECK-NEXT:    [[X_LOAD:%.*]] = load <vscale x 4 x i8>, ptr [[X:%.*]], align 1
+; CHECK-NEXT:    store <vscale x 4 x i8> [[X_LOAD]], ptr [[Y:%.*]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  %x.load = load <vscale x 4 x i8>, <vscale x 4 x i8>* %x, align 1
-  store <vscale x 4 x i8> %x.load, <vscale x 4 x i8>* %y, align 1
+  %x.load = load <vscale x 4 x i8>, ptr %x, align 1
+  store <vscale x 4 x i8> %x.load, ptr %y, align 1
   ret void
 }
 
 
 ; Check that non-integral pointers are not coverted using inttoptr
 
-declare void @use(i8*)
-declare void @use.p1(i8 addrspace(1)*)
+declare void @use(ptr)
+declare void @use.p1(ptr addrspace(1))
 
-define i64 @test21(i64* %P) {
+define i64 @test21(ptr %P) {
 ; CHECK-LABEL: @test21(
-; CHECK-NEXT:    [[X:%.*]] = load i64, i64* [[P:%.*]], align 8
-; CHECK-NEXT:    [[Y_CAST:%.*]] = inttoptr i64 [[X]] to i8*
-; CHECK-NEXT:    call void @use(i8* [[Y_CAST]])
+; CHECK-NEXT:    [[X:%.*]] = load i64, ptr [[P:%.*]], align 8
+; CHECK-NEXT:    [[Y_CAST:%.*]] = inttoptr i64 [[X]] to ptr
+; CHECK-NEXT:    call void @use(ptr [[Y_CAST]])
 ; CHECK-NEXT:    ret i64 [[X]]
 ;
-  %P.ptr = bitcast i64* %P to i8**
-  %X = load i64, i64* %P
-  %Y = load i8*, i8** %P.ptr
-  call void @use(i8* %Y)
+  %X = load i64, ptr %P
+  %Y = load ptr, ptr %P
+  call void @use(ptr %Y)
   ret i64 %X
 }
 
-define i64 @test22(i64* %P) {
+define i64 @test22(ptr %P) {
 ; CHECK-LABEL: @test22(
-; CHECK-NEXT:    [[P_PTR:%.*]] = bitcast i64* [[P:%.*]] to i8 addrspace(1)**
-; CHECK-NEXT:    [[X:%.*]] = load i64, i64* [[P]], align 8
-; CHECK-NEXT:    [[Y:%.*]] = load i8 addrspace(1)*, i8 addrspace(1)** [[P_PTR]], align 8
-; CHECK-NEXT:    call void @use.p1(i8 addrspace(1)* [[Y]])
+; CHECK-NEXT:    [[X:%.*]] = load i64, ptr [[P]], align 8
+; CHECK-NEXT:    [[Y:%.*]] = load ptr addrspace(1), ptr [[P:%.*]], align 8
+; CHECK-NEXT:    call void @use.p1(ptr addrspace(1) [[Y]])
 ; CHECK-NEXT:    ret i64 [[X]]
 ;
-  %P.ptr = bitcast i64* %P to i8 addrspace(1)**
-  %X = load i64, i64* %P
-  %Y = load i8 addrspace(1)*, i8 addrspace(1)** %P.ptr
-  call void @use.p1(i8 addrspace(1)* %Y)
+  %X = load i64, ptr %P
+  %Y = load ptr addrspace(1), ptr %P
+  call void @use.p1(ptr addrspace(1) %Y)
   ret i64 %X
 }
 
-declare void @use.v2.p0(<2 x i8*>)
-declare void @use.v2.p1(<2 x i8 addrspace(1)*>)
+declare void @use.v2.p0(<2 x ptr>)
+declare void @use.v2.p1(<2 x ptr addrspace(1)>)
 
-define <2 x i64> @test23(<2 x i64>* %P) {
+define <2 x i64> @test23(ptr %P) {
 ; CHECK-LABEL: @test23(
-; CHECK-NEXT:    [[P_PTR:%.*]] = bitcast <2 x i64>* [[P:%.*]] to <2 x i8*>*
-; CHECK-NEXT:    [[X:%.*]] = load <2 x i64>, <2 x i64>* [[P]], align 16
-; CHECK-NEXT:    [[Y:%.*]] = load <2 x i8*>, <2 x i8*>* [[P_PTR]], align 16
-; CHECK-NEXT:    call void @use.v2.p0(<2 x i8*> [[Y]])
+; CHECK-NEXT:    [[X:%.*]] = load <2 x i64>, ptr [[P]], align 16
+; CHECK-NEXT:    [[Y:%.*]] = load <2 x ptr>, ptr [[P:%.*]], align 16
+; CHECK-NEXT:    call void @use.v2.p0(<2 x ptr> [[Y]])
 ; CHECK-NEXT:    ret <2 x i64> [[X]]
 ;
-  %P.ptr = bitcast <2 x i64>* %P to <2 x i8*>*
-  %X = load <2 x i64>, <2 x i64>* %P
-  %Y = load <2 x i8*>, <2 x i8*>* %P.ptr
-  call void @use.v2.p0(<2 x i8*> %Y)
+  %X = load <2 x i64>, ptr %P
+  %Y = load <2 x ptr>, ptr %P
+  call void @use.v2.p0(<2 x ptr> %Y)
   ret <2 x i64> %X
 }
 
-define <2 x i64> @test24(<2 x i64>* %P) {
+define <2 x i64> @test24(ptr %P) {
 ; CHECK-LABEL: @test24(
-; CHECK-NEXT:    [[P_PTR:%.*]] = bitcast <2 x i64>* [[P:%.*]] to <2 x i8 addrspace(1)*>*
-; CHECK-NEXT:    [[X:%.*]] = load <2 x i64>, <2 x i64>* [[P]], align 16
-; CHECK-NEXT:    [[Y:%.*]] = load <2 x i8 addrspace(1)*>, <2 x i8 addrspace(1)*>* [[P_PTR]], align 16
-; CHECK-NEXT:    call void @use.v2.p1(<2 x i8 addrspace(1)*> [[Y]])
+; CHECK-NEXT:    [[X:%.*]] = load <2 x i64>, ptr [[P]], align 16
+; CHECK-NEXT:    [[Y:%.*]] = load <2 x ptr addrspace(1)>, ptr [[P:%.*]], align 16
+; CHECK-NEXT:    call void @use.v2.p1(<2 x ptr addrspace(1)> [[Y]])
 ; CHECK-NEXT:    ret <2 x i64> [[X]]
 ;
-  %P.ptr = bitcast <2 x i64>* %P to <2 x i8 addrspace(1)*>*
-  %X = load <2 x i64>, <2 x i64>* %P
-  %Y = load <2 x i8 addrspace(1)*>, <2 x i8 addrspace(1)*>* %P.ptr
-  call void @use.v2.p1(<2 x i8 addrspace(1)*> %Y)
+  %X = load <2 x i64>, ptr %P
+  %Y = load <2 x ptr addrspace(1)>, ptr %P
+  call void @use.v2.p1(<2 x ptr addrspace(1)> %Y)
   ret <2 x i64> %X
 }
index a356f5426ec4db6dfb0210832173d5fdc554fc1a..a762ed838a7392952bee67d2c372f90803c63f34 100644 (file)
@@ -4,11 +4,11 @@ target triple = "i386-apple-macosx10.0.0"
 
 ; Instcombine should be able to do trivial CSE of loads.
 
-define i32 @test1(i32* %p) {
-  %t0 = getelementptr i32, i32* %p, i32 1
-  %y = load i32, i32* %t0
-  %t1 = getelementptr i32, i32* %p, i32 1
-  %x = load i32, i32* %t1
+define i32 @test1(ptr %p) {
+  %t0 = getelementptr i32, ptr %p, i32 1
+  %y = load i32, ptr %t0
+  %t1 = getelementptr i32, ptr %p, i32 1
+  %x = load i32, ptr %t1
   %a = sub i32 %y, %x
   ret i32 %a
 ; CHECK-LABEL: @test1(
@@ -19,7 +19,7 @@ define i32 @test1(i32* %p) {
 ; PR7429
 @.str = private constant [4 x i8] c"XYZ\00"
 define float @test2() {
-  %tmp = load float, float* bitcast ([4 x i8]* @.str to float*), align 1
+  %tmp = load float, ptr @.str, align 1
   ret float %tmp
   
 ; CHECK-LABEL: @test2(
@@ -37,10 +37,10 @@ align 4
 ; PR14986
 define void @test3() nounwind {
 ; This is a weird way of computing zero.
-  %l = load i32, i32* getelementptr ([36 x i32], [36 x i32]* @expect32, i32 29826161, i32 28), align 4
-  store i32 %l, i32* getelementptr ([36 x i32], [36 x i32]* @rslts32, i32 29826161, i32 28), align 4
+  %l = load i32, ptr getelementptr ([36 x i32], ptr @expect32, i32 29826161, i32 28), align 4
+  store i32 %l, ptr getelementptr ([36 x i32], ptr @rslts32, i32 29826161, i32 28), align 4
   ret void
 
 ; CHECK-LABEL: @test3(
-; CHECK: store i32 1, i32* getelementptr inbounds ([36 x i32], [36 x i32]* @rslts32, i32 0, i32 0)
+; CHECK: store i32 1, ptr @rslts32
 }
index 5b1a609e2a70d1f00eb95b905b8d19962db1a28c..a49256adf83d810a8cc0e102253258964047569d 100644 (file)
@@ -1,15 +1,15 @@
 ; RUN: opt -basic-aa -instcombine -S < %s | FileCheck %s
 
 ; CHECK-LABEL: @test_load_combine_aa(
-; CHECK: %[[V:.*]] = load i32, i32* %0
-; CHECK: store i32 0, i32* %3
-; CHECK: store i32 %[[V]], i32* %1
-; CHECK: store i32 %[[V]], i32* %2
-define void @test_load_combine_aa(i32*, i32*, i32*, i32* noalias) {
-  %a = load i32, i32* %0
-  store i32 0, i32* %3
-  %b = load i32, i32* %0
-  store i32 %a, i32* %1
-  store i32 %b, i32* %2
+; CHECK: %[[V:.*]] = load i32, ptr %0
+; CHECK: store i32 0, ptr %3
+; CHECK: store i32 %[[V]], ptr %1
+; CHECK: store i32 %[[V]], ptr %2
+define void @test_load_combine_aa(ptr, ptr, ptr, ptr noalias) {
+  %a = load i32, ptr %0
+  store i32 0, ptr %3
+  %b = load i32, ptr %0
+  store i32 %a, ptr %1
+  store i32 %b, ptr %2
   ret void
 }
index 584365f8ebbf47cdb59bcd48eacd789bcebc96e1..c71135fb996370c19154f4dd95935fbdadb5654a 100644 (file)
@@ -9,23 +9,23 @@ target datalayout = "E-p:64:64:64-p1:64:64:64-p2:32:32:32-a0:0:8-f32:32:32-f64:6
 
 define <2 x i64> @static_hem() {
 ; CHECK-LABEL: @static_hem(
-; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, <2 x i64>* getelementptr (<2 x i64>, <2 x i64>* @x, i64 7), align 16
+; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr getelementptr (<2 x i64>, ptr @x, i64 7), align 16
 ; CHECK-NEXT:    ret <2 x i64> [[TMP1]]
 ;
-  %t = getelementptr <2 x i64>, <2 x i64>* @x, i32 7
-  %tmp1 = load <2 x i64>, <2 x i64>* %t, align 1
+  %t = getelementptr <2 x i64>, ptr @x, i32 7
+  %tmp1 = load <2 x i64>, ptr %t, align 1
   ret <2 x i64> %tmp1
 }
 
 define <2 x i64> @hem(i32 %i) {
 ; CHECK-LABEL: @hem(
 ; CHECK-NEXT:    [[TMP1:%.*]] = sext i32 [[I:%.*]] to i64
-; CHECK-NEXT:    [[T:%.*]] = getelementptr <2 x i64>, <2 x i64>* @x, i64 [[TMP1]]
-; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, <2 x i64>* [[T]], align 16
+; CHECK-NEXT:    [[T:%.*]] = getelementptr <2 x i64>, ptr @x, i64 [[TMP1]]
+; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[T]], align 16
 ; CHECK-NEXT:    ret <2 x i64> [[TMP1]]
 ;
-  %t = getelementptr <2 x i64>, <2 x i64>* @x, i32 %i
-  %tmp1 = load <2 x i64>, <2 x i64>* %t, align 1
+  %t = getelementptr <2 x i64>, ptr @x, i32 %i
+  %tmp1 = load <2 x i64>, ptr %t, align 1
   ret <2 x i64> %tmp1
 }
 
@@ -33,56 +33,56 @@ define <2 x i64> @hem_2d(i32 %i, i32 %j) {
 ; CHECK-LABEL: @hem_2d(
 ; CHECK-NEXT:    [[TMP1:%.*]] = sext i32 [[I:%.*]] to i64
 ; CHECK-NEXT:    [[TMP2:%.*]] = sext i32 [[J:%.*]] to i64
-; CHECK-NEXT:    [[T:%.*]] = getelementptr [13 x <2 x i64>], [13 x <2 x i64>]* @xx, i64 [[TMP1]], i64 [[TMP2]]
-; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, <2 x i64>* [[T]], align 16
+; CHECK-NEXT:    [[T:%.*]] = getelementptr [13 x <2 x i64>], ptr @xx, i64 [[TMP1]], i64 [[TMP2]]
+; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[T]], align 16
 ; CHECK-NEXT:    ret <2 x i64> [[TMP1]]
 ;
-  %t = getelementptr [13 x <2 x i64>], [13 x <2 x i64>]* @xx, i32 %i, i32 %j
-  %tmp1 = load <2 x i64>, <2 x i64>* %t, align 1
+  %t = getelementptr [13 x <2 x i64>], ptr @xx, i32 %i, i32 %j
+  %tmp1 = load <2 x i64>, ptr %t, align 1
   ret <2 x i64> %tmp1
 }
 
 define <2 x i64> @foo() {
 ; CHECK-LABEL: @foo(
-; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, <2 x i64>* @x, align 16
+; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr @x, align 16
 ; CHECK-NEXT:    ret <2 x i64> [[TMP1]]
 ;
-  %tmp1 = load <2 x i64>, <2 x i64>* @x, align 1
+  %tmp1 = load <2 x i64>, ptr @x, align 1
   ret <2 x i64> %tmp1
 }
 
 define <2 x i64> @bar() {
 ; CHECK-LABEL: @bar(
 ; CHECK-NEXT:    [[T:%.*]] = alloca <2 x i64>, align 16
-; CHECK-NEXT:    call void @kip(<2 x i64>* nonnull [[T]])
-; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, <2 x i64>* [[T]], align 16
+; CHECK-NEXT:    call void @kip(ptr nonnull [[T]])
+; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[T]], align 16
 ; CHECK-NEXT:    ret <2 x i64> [[TMP1]]
 ;
   %t = alloca <2 x i64>
-  call void @kip(<2 x i64>* %t)
-  %tmp1 = load <2 x i64>, <2 x i64>* %t, align 1
+  call void @kip(ptr %t)
+  %tmp1 = load <2 x i64>, ptr %t, align 1
   ret <2 x i64> %tmp1
 }
 
 define void @static_hem_store(<2 x i64> %y) {
 ; CHECK-LABEL: @static_hem_store(
-; CHECK-NEXT:    store <2 x i64> [[Y:%.*]], <2 x i64>* getelementptr (<2 x i64>, <2 x i64>* @x, i64 7), align 16
+; CHECK-NEXT:    store <2 x i64> [[Y:%.*]], ptr getelementptr (<2 x i64>, ptr @x, i64 7), align 16
 ; CHECK-NEXT:    ret void
 ;
-  %t = getelementptr <2 x i64>, <2 x i64>* @x, i32 7
-  store <2 x i64> %y, <2 x i64>* %t, align 1
+  %t = getelementptr <2 x i64>, ptr @x, i32 7
+  store <2 x i64> %y, ptr %t, align 1
   ret void
 }
 
 define void @hem_store(i32 %i, <2 x i64> %y) {
 ; CHECK-LABEL: @hem_store(
 ; CHECK-NEXT:    [[TMP1:%.*]] = sext i32 [[I:%.*]] to i64
-; CHECK-NEXT:    [[T:%.*]] = getelementptr <2 x i64>, <2 x i64>* @x, i64 [[TMP1]]
-; CHECK-NEXT:    store <2 x i64> [[Y:%.*]], <2 x i64>* [[T]], align 16
+; CHECK-NEXT:    [[T:%.*]] = getelementptr <2 x i64>, ptr @x, i64 [[TMP1]]
+; CHECK-NEXT:    store <2 x i64> [[Y:%.*]], ptr [[T]], align 16
 ; CHECK-NEXT:    ret void
 ;
-  %t = getelementptr <2 x i64>, <2 x i64>* @x, i32 %i
-  store <2 x i64> %y, <2 x i64>* %t, align 1
+  %t = getelementptr <2 x i64>, ptr @x, i32 %i
+  store <2 x i64> %y, ptr %t, align 1
   ret void
 }
 
@@ -90,35 +90,35 @@ define void @hem_2d_store(i32 %i, i32 %j, <2 x i64> %y) {
 ; CHECK-LABEL: @hem_2d_store(
 ; CHECK-NEXT:    [[TMP1:%.*]] = sext i32 [[I:%.*]] to i64
 ; CHECK-NEXT:    [[TMP2:%.*]] = sext i32 [[J:%.*]] to i64
-; CHECK-NEXT:    [[T:%.*]] = getelementptr [13 x <2 x i64>], [13 x <2 x i64>]* @xx, i64 [[TMP1]], i64 [[TMP2]]
-; CHECK-NEXT:    store <2 x i64> [[Y:%.*]], <2 x i64>* [[T]], align 16
+; CHECK-NEXT:    [[T:%.*]] = getelementptr [13 x <2 x i64>], ptr @xx, i64 [[TMP1]], i64 [[TMP2]]
+; CHECK-NEXT:    store <2 x i64> [[Y:%.*]], ptr [[T]], align 16
 ; CHECK-NEXT:    ret void
 ;
-  %t = getelementptr [13 x <2 x i64>], [13 x <2 x i64>]* @xx, i32 %i, i32 %j
-  store <2 x i64> %y, <2 x i64>* %t, align 1
+  %t = getelementptr [13 x <2 x i64>], ptr @xx, i32 %i, i32 %j
+  store <2 x i64> %y, ptr %t, align 1
   ret void
 }
 
 define void @foo_store(<2 x i64> %y) {
 ; CHECK-LABEL: @foo_store(
-; CHECK-NEXT:    store <2 x i64> [[Y:%.*]], <2 x i64>* @x, align 16
+; CHECK-NEXT:    store <2 x i64> [[Y:%.*]], ptr @x, align 16
 ; CHECK-NEXT:    ret void
 ;
-  store <2 x i64> %y, <2 x i64>* @x, align 1
+  store <2 x i64> %y, ptr @x, align 1
   ret void
 }
 
 define void @bar_store(<2 x i64> %y) {
 ; CHECK-LABEL: @bar_store(
 ; CHECK-NEXT:    [[T:%.*]] = alloca <2 x i64>, align 16
-; CHECK-NEXT:    call void @kip(<2 x i64>* nonnull [[T]])
-; CHECK-NEXT:    store <2 x i64> [[Y:%.*]], <2 x i64>* [[T]], align 16
+; CHECK-NEXT:    call void @kip(ptr nonnull [[T]])
+; CHECK-NEXT:    store <2 x i64> [[Y:%.*]], ptr [[T]], align 16
 ; CHECK-NEXT:    ret void
 ;
   %t = alloca <2 x i64>
-  call void @kip(<2 x i64>* %t)
-  store <2 x i64> %y, <2 x i64>* %t, align 1
+  call void @kip(ptr %t)
+  store <2 x i64> %y, ptr %t, align 1
   ret void
 }
 
-declare void @kip(<2 x i64>* %t)
+declare void @kip(ptr %t)
index e3d833bb1f8d55bd5bee388fdffdc01fee88f2b5..d0c62b1eee02b43fd7774d5e3142c48e96c3050d 100644 (file)
 
 target datalayout = "e-m:e-p:64:64:64-i64:64-f80:128-n8:16:32:64-S128"
 
-define i32 @test_load_cast_combine_tbaa(float* %ptr) {
+define i32 @test_load_cast_combine_tbaa(ptr %ptr) {
 ; Ensure (cast (load (...))) -> (load (cast (...))) preserves TBAA.
 ; CHECK-LABEL: @test_load_cast_combine_tbaa(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast float* [[PTR:%.*]] to i32*
-; CHECK-NEXT:    [[L1:%.*]] = load i32, i32* [[TMP0]], align 4, !tbaa [[TBAA0:![0-9]+]]
+; CHECK-NEXT:    [[L1:%.*]] = load i32, ptr [[PTR:%.*]], align 4, !tbaa [[TBAA0:![0-9]+]]
 ; CHECK-NEXT:    ret i32 [[L1]]
 ;
 entry:
-  %l = load float, float* %ptr, !tbaa !0
+  %l = load float, ptr %ptr, !tbaa !0
   %c = bitcast float %l to i32
   ret i32 %c
 }
 
-define i32 @test_load_cast_combine_noalias(float* %ptr) {
+define i32 @test_load_cast_combine_noalias(ptr %ptr) {
 ; Ensure (cast (load (...))) -> (load (cast (...))) preserves no-alias metadata.
 ; CHECK-LABEL: @test_load_cast_combine_noalias(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast float* [[PTR:%.*]] to i32*
-; CHECK-NEXT:    [[L1:%.*]] = load i32, i32* [[TMP0]], align 4, !alias.scope !3, !noalias !3
+; CHECK-NEXT:    [[L1:%.*]] = load i32, ptr [[PTR:%.*]], align 4, !alias.scope !3, !noalias !3
 ; CHECK-NEXT:    ret i32 [[L1]]
 ;
 entry:
-  %l = load float, float* %ptr, !alias.scope !3, !noalias !3
+  %l = load float, ptr %ptr, !alias.scope !3, !noalias !3
   %c = bitcast float %l to i32
   ret i32 %c
 }
 
-define float @test_load_cast_combine_range(i32* %ptr) {
+define float @test_load_cast_combine_range(ptr %ptr) {
 ; Ensure (cast (load (...))) -> (load (cast (...))) drops range metadata. It
 ; would be nice to preserve or update it somehow but this is hard when moving
 ; between types.
 ; CHECK-LABEL: @test_load_cast_combine_range(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i32* [[PTR:%.*]] to float*
-; CHECK-NEXT:    [[L1:%.*]] = load float, float* [[TMP0]], align 4
+; CHECK-NEXT:    [[L1:%.*]] = load float, ptr [[PTR:%.*]], align 4
 ; CHECK-NEXT:    ret float [[L1]]
 ;
 entry:
-  %l = load i32, i32* %ptr, !range !6
+  %l = load i32, ptr %ptr, !range !6
   %c = bitcast i32 %l to float
   ret float %c
 }
 
-define i32 @test_load_cast_combine_invariant(float* %ptr) {
+define i32 @test_load_cast_combine_invariant(ptr %ptr) {
 ; Ensure (cast (load (...))) -> (load (cast (...))) preserves invariant metadata.
 ; CHECK-LABEL: @test_load_cast_combine_invariant(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast float* [[PTR:%.*]] to i32*
-; CHECK-NEXT:    [[L1:%.*]] = load i32, i32* [[TMP0]], align 4, !invariant.load !6
+; CHECK-NEXT:    [[L1:%.*]] = load i32, ptr [[PTR:%.*]], align 4, !invariant.load !6
 ; CHECK-NEXT:    ret i32 [[L1]]
 ;
 entry:
-  %l = load float, float* %ptr, !invariant.load !7
+  %l = load float, ptr %ptr, !invariant.load !7
   %c = bitcast float %l to i32
   ret i32 %c
 }
 
-define i32 @test_load_cast_combine_nontemporal(float* %ptr) {
+define i32 @test_load_cast_combine_nontemporal(ptr %ptr) {
 ; Ensure (cast (load (...))) -> (load (cast (...))) preserves nontemporal
 ; metadata.
 ; CHECK-LABEL: @test_load_cast_combine_nontemporal(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast float* [[PTR:%.*]] to i32*
-; CHECK-NEXT:    [[L1:%.*]] = load i32, i32* [[TMP0]], align 4, !nontemporal !7
+; CHECK-NEXT:    [[L1:%.*]] = load i32, ptr [[PTR:%.*]], align 4, !nontemporal !7
 ; CHECK-NEXT:    ret i32 [[L1]]
 ;
 entry:
-  %l = load float, float* %ptr, !nontemporal !8
+  %l = load float, ptr %ptr, !nontemporal !8
   %c = bitcast float %l to i32
   ret i32 %c
 }
 
-define i8* @test_load_cast_combine_align(i32** %ptr) {
+define ptr @test_load_cast_combine_align(ptr %ptr) {
 ; Ensure (cast (load (...))) -> (load (cast (...))) preserves align
 ; metadata.
 ; CHECK-LABEL: @test_load_cast_combine_align(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i32** [[PTR:%.*]] to i8**
-; CHECK-NEXT:    [[L1:%.*]] = load i8*, i8** [[TMP0]], align 8, !align !8
-; CHECK-NEXT:    ret i8* [[L1]]
+; CHECK-NEXT:    [[L1:%.*]] = load ptr, ptr [[PTR:%.*]], align 8, !align !8
+; CHECK-NEXT:    ret ptr [[L1]]
 ;
 entry:
-  %l = load i32*, i32** %ptr, !align !9
-  %c = bitcast i32* %l to i8*
-  ret i8* %c
+  %l = load ptr, ptr %ptr, !align !9
+  ret ptr %l
 }
 
-define i8* @test_load_cast_combine_deref(i32** %ptr) {
+define ptr @test_load_cast_combine_deref(ptr %ptr) {
 ; Ensure (cast (load (...))) -> (load (cast (...))) preserves dereferenceable
 ; metadata.
 ; CHECK-LABEL: @test_load_cast_combine_deref(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i32** [[PTR:%.*]] to i8**
-; CHECK-NEXT:    [[L1:%.*]] = load i8*, i8** [[TMP0]], align 8, !dereferenceable !8
-; CHECK-NEXT:    ret i8* [[L1]]
+; CHECK-NEXT:    [[L1:%.*]] = load ptr, ptr [[PTR:%.*]], align 8, !dereferenceable !8
+; CHECK-NEXT:    ret ptr [[L1]]
 ;
 entry:
-  %l = load i32*, i32** %ptr, !dereferenceable !9
-  %c = bitcast i32* %l to i8*
-  ret i8* %c
+  %l = load ptr, ptr %ptr, !dereferenceable !9
+  ret ptr %l
 }
 
-define i8* @test_load_cast_combine_deref_or_null(i32** %ptr) {
+define ptr @test_load_cast_combine_deref_or_null(ptr %ptr) {
 ; Ensure (cast (load (...))) -> (load (cast (...))) preserves
 ; dereferenceable_or_null metadata.
 ; CHECK-LABEL: @test_load_cast_combine_deref_or_null(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i32** [[PTR:%.*]] to i8**
-; CHECK-NEXT:    [[L1:%.*]] = load i8*, i8** [[TMP0]], align 8, !dereferenceable_or_null !8
-; CHECK-NEXT:    ret i8* [[L1]]
+; CHECK-NEXT:    [[L1:%.*]] = load ptr, ptr [[PTR:%.*]], align 8, !dereferenceable_or_null !8
+; CHECK-NEXT:    ret ptr [[L1]]
 ;
 entry:
-  %l = load i32*, i32** %ptr, !dereferenceable_or_null !9
-  %c = bitcast i32* %l to i8*
-  ret i8* %c
+  %l = load ptr, ptr %ptr, !dereferenceable_or_null !9
+  ret ptr %l
 }
 
-define void @test_load_cast_combine_loop(float* %src, i32* %dst, i32 %n) {
+define void @test_load_cast_combine_loop(ptr %src, ptr %dst, i32 %n) {
 ; Ensure (cast (load (...))) -> (load (cast (...))) preserves loop access
 ; metadata.
 ; CHECK-LABEL: @test_load_cast_combine_loop(
@@ -130,12 +119,11 @@ define void @test_load_cast_combine_loop(float* %src, i32* %dst, i32 %n) {
 ; CHECK:       loop:
 ; CHECK-NEXT:    [[I:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[I_NEXT:%.*]], [[LOOP]] ]
 ; CHECK-NEXT:    [[TMP0:%.*]] = sext i32 [[I]] to i64
-; CHECK-NEXT:    [[SRC_GEP:%.*]] = getelementptr inbounds float, float* [[SRC:%.*]], i64 [[TMP0]]
+; CHECK-NEXT:    [[SRC_GEP:%.*]] = getelementptr inbounds float, ptr [[SRC:%.*]], i64 [[TMP0]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = sext i32 [[I]] to i64
-; CHECK-NEXT:    [[DST_GEP:%.*]] = getelementptr inbounds i32, i32* [[DST:%.*]], i64 [[TMP1]]
-; CHECK-NEXT:    [[TMP2:%.*]] = bitcast float* [[SRC_GEP]] to i32*
-; CHECK-NEXT:    [[L1:%.*]] = load i32, i32* [[TMP2]], align 4, !llvm.access.group !9
-; CHECK-NEXT:    store i32 [[L1]], i32* [[DST_GEP]], align 4
+; CHECK-NEXT:    [[DST_GEP:%.*]] = getelementptr inbounds i32, ptr [[DST:%.*]], i64 [[TMP1]]
+; CHECK-NEXT:    [[L1:%.*]] = load i32, ptr [[SRC_GEP]], align 4, !llvm.access.group !9
+; CHECK-NEXT:    store i32 [[L1]], ptr [[DST_GEP]], align 4
 ; CHECK-NEXT:    [[I_NEXT]] = add i32 [[I]], 1
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[I_NEXT]], [[N:%.*]]
 ; CHECK-NEXT:    br i1 [[CMP]], label [[LOOP]], label [[EXIT:%.*]], !llvm.loop [[LOOP1:![0-9]+]]
@@ -147,11 +135,11 @@ entry:
 
 loop:
   %i = phi i32 [ 0, %entry ], [ %i.next, %loop ]
-  %src.gep = getelementptr inbounds float, float* %src, i32 %i
-  %dst.gep = getelementptr inbounds i32, i32* %dst, i32 %i
-  %l = load float, float* %src.gep, !llvm.access.group !10
+  %src.gep = getelementptr inbounds float, ptr %src, i32 %i
+  %dst.gep = getelementptr inbounds i32, ptr %dst, i32 %i
+  %l = load float, ptr %src.gep, !llvm.access.group !10
   %c = bitcast float %l to i32
-  store i32 %c, i32* %dst.gep
+  store i32 %c, ptr %dst.gep
   %i.next = add i32 %i, 1
   %cmp = icmp slt i32 %i.next, %n
   br i1 %cmp, label %loop, label %exit, !llvm.loop !1
@@ -160,18 +148,18 @@ exit:
   ret void
 }
 
-define void @test_load_cast_combine_nonnull(float** %ptr) {
+define void @test_load_cast_combine_nonnull(ptr %ptr) {
 ; CHECK-LABEL: @test_load_cast_combine_nonnull(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[P:%.*]] = load float*, float** [[PTR:%.*]], align 8, !nonnull !10
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr float*, float** [[PTR]], i64 42
-; CHECK-NEXT:    store float* [[P]], float** [[GEP]], align 8
+; CHECK-NEXT:    [[P:%.*]] = load ptr, ptr [[PTR:%.*]], align 8, !nonnull !10
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr ptr, ptr [[PTR]], i64 42
+; CHECK-NEXT:    store ptr [[P]], ptr [[GEP]], align 8
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %p = load float*, float** %ptr, !nonnull !6
-  %gep = getelementptr float*, float** %ptr, i32 42
-  store float* %p, float** %gep
+  %p = load ptr, ptr %ptr, !nonnull !6
+  %gep = getelementptr ptr, ptr %ptr, i32 42
+  store ptr %p, ptr %gep
   ret void
 }
 
index 5813418ac9c45a8d7878873844cc61b7d01f541d..b1f8f1c7038564c2a98e48e9e9dc78880a8c6c78 100644 (file)
@@ -45,7 +45,7 @@ define double @log_pow_not_fast(double %x, double %y) {
   ret double %log
 }
 
-define float @function_pointer(float ()* %fptr, float %p1) {
+define float @function_pointer(ptr %fptr, float %p1) {
 ; CHECK-LABEL: @function_pointer(
 ; CHECK-NEXT:    [[PTR:%.*]] = call float [[FPTR:%.*]]()
 ; CHECK-NEXT:    [[LOG:%.*]] = call float @logf(float [[PTR]])
@@ -97,7 +97,7 @@ define double @log_exp2_not_fast(double %x) {
   ret double %log
 }
 
-define double @pr43617(double %d, i32 %i, double (i32)* %f) {
+define double @pr43617(double %d, i32 %i, ptr %f) {
 entry:
   %sub = fsub double -0.000000e+00, %d
   %icall = tail call fast double %f(i32 %i)
index 854abb8b93ba4a9ec60be2b3c357641f36bafb75..2d4aa27a68efda93bb17f4b0e163d5bce71cbff6 100644 (file)
@@ -25,36 +25,34 @@ define dso_local i32 @main() !dbg !12 {
 entry:
   %retval = alloca i32, align 4
   %d1 = alloca i32, align 4
-  store i32 0, i32* %retval, align 4
-  %0 = bitcast i32* %d1 to i8*, !dbg !17
-  call void @llvm.lifetime.start.p0i8(i64 4, i8* %0) #4, !dbg !17
+  store i32 0, ptr %retval, align 4
+  call void @llvm.lifetime.start.p0(i64 4, ptr %d1) #4, !dbg !17
 ; CHECK: dbg.value(metadata i32 42, metadata [[METADATA_IDX1:![0-9]+]], metadata !DIExpression())
 ; CHECK-NEXT: store
-  call void @llvm.dbg.declare(metadata i32* %d1, metadata !16, metadata !DIExpression()), !dbg !17
-  store i32 42, i32* %d1, align 4, !dbg !17
+  call void @llvm.dbg.declare(metadata ptr %d1, metadata !16, metadata !DIExpression()), !dbg !17
+  store i32 42, ptr %d1, align 4, !dbg !17
   br label %while.cond, !dbg !22
 
 while.cond:                                       ; preds = %while.body, %entry
-; CHECK: dbg.value(metadata i32 %1, metadata [[METADATA_IDX1]], metadata !DIExpression())
+; CHECK: dbg.value(metadata i32 %0, metadata [[METADATA_IDX1]], metadata !DIExpression())
 ; CHECK-NEXT: call zeroext i1 @_ZL5emptyi
-  %1 = load i32, i32* %d1, align 4, !dbg !22
-  %call = call zeroext i1 @_ZL5emptyi(i32 %1), !dbg !22
+  %0 = load i32, ptr %d1, align 4, !dbg !22
+  %call = call zeroext i1 @_ZL5emptyi(i32 %0), !dbg !22
   %lnot = xor i1 %call, true, !dbg !22
   br i1 %lnot, label %while.body, label %while.end, !dbg !22
 
 while.body:                                       ; preds = %while.cond
-; CHECK: dbg.value(metadata i32* %d1, metadata [[METADATA_IDX1]], metadata !DIExpression(DW_OP_deref))
+; CHECK: dbg.value(metadata ptr %d1, metadata [[METADATA_IDX1]], metadata !DIExpression(DW_OP_deref))
 ; CHECK-NEXT: call void @_ZL6escapeRi
-  call void @_ZL6escapeRi(i32* dereferenceable(4) %d1), !dbg !23
+  call void @_ZL6escapeRi(ptr dereferenceable(4) %d1), !dbg !23
   br label %while.cond, !dbg !22, !llvm.loop !24
 
 while.end:                                        ; preds = %while.cond
-  %2 = bitcast i32* %d1 to i8*, !dbg !25
-  call void @llvm.lifetime.end.p0i8(i64 4, i8* %2) #4, !dbg !25
+  call void @llvm.lifetime.end.p0(i64 4, ptr %d1) #4, !dbg !25
   ret i32 0, !dbg !26
 }
 
-declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture)
+declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)
 
 declare void @llvm.dbg.declare(metadata, metadata, metadata)
 
@@ -62,11 +60,11 @@ define internal zeroext i1 @_ZL5emptyi(i32 %p1) !dbg !27 {
   ret i1 false
 }
 
-define internal void @_ZL6escapeRi(i32* dereferenceable(4) %c) #3 !dbg !34 {
+define internal void @_ZL6escapeRi(ptr dereferenceable(4) %c) #3 !dbg !34 {
   ret void
 }
 
-declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #1
+declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1
 
 !llvm.dbg.cu = !{!2}
 !llvm.module.flags = !{!8, !9, !10}
index 87539876bb49ba6bcc5c9d39a79c84c8f7e1db04..79aef3a5406cfb07c549d9d2a3dc6dfec273e88a 100644 (file)
@@ -123,56 +123,56 @@ define <4 x i1> @vec_lshr_and_negC_eq_undef3(<4 x i32> %x, <4 x i32> %y) {
 ; Extra use
 
 ; Fold happened
-define i1 @scalar_lshr_and_negC_eq_extra_use_lshr(i32 %x, i32 %y, i32 %z, i32* %p) {
+define i1 @scalar_lshr_and_negC_eq_extra_use_lshr(i32 %x, i32 %y, i32 %z, ptr %p) {
 ; CHECK-LABEL: @scalar_lshr_and_negC_eq_extra_use_lshr(
 ; CHECK-NEXT:    [[LSHR:%.*]] = lshr i32 [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[XOR:%.*]] = xor i32 [[LSHR]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[XOR]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[XOR]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp ult i32 [[LSHR]], 8
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %lshr = lshr i32 %x, %y
   %xor = xor i32 %lshr, %z  ; extra use of lshr
-  store i32 %xor, i32* %p
+  store i32 %xor, ptr %p
   %and = and i32 %lshr, 4294967288  ; ~7
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
 
 ; Not fold
-define i1 @scalar_lshr_and_negC_eq_extra_use_and(i32 %x, i32 %y, i32 %z, i32* %p) {
+define i1 @scalar_lshr_and_negC_eq_extra_use_and(i32 %x, i32 %y, i32 %z, ptr %p) {
 ; CHECK-LABEL: @scalar_lshr_and_negC_eq_extra_use_and(
 ; CHECK-NEXT:    [[LSHR:%.*]] = lshr i32 [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[LSHR]], -8
 ; CHECK-NEXT:    [[MUL:%.*]] = mul i32 [[AND]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[MUL]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[MUL]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[AND]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %lshr = lshr i32 %x, %y
   %and = and i32 %lshr, 4294967288  ; ~7
   %mul = mul i32 %and, %z  ; extra use of and
-  store i32 %mul, i32* %p
+  store i32 %mul, ptr %p
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
 
 ; Not fold
-define i1 @scalar_lshr_and_negC_eq_extra_use_lshr_and(i32 %x, i32 %y, i32 %z, i32* %p, i32* %q) {
+define i1 @scalar_lshr_and_negC_eq_extra_use_lshr_and(i32 %x, i32 %y, i32 %z, ptr %p, ptr %q) {
 ; CHECK-LABEL: @scalar_lshr_and_negC_eq_extra_use_lshr_and(
 ; CHECK-NEXT:    [[LSHR:%.*]] = lshr i32 [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[LSHR]], -8
-; CHECK-NEXT:    store i32 [[AND]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[AND]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[LSHR]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[ADD]], i32* [[Q:%.*]], align 4
+; CHECK-NEXT:    store i32 [[ADD]], ptr [[Q:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[AND]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %lshr = lshr i32 %x, %y
   %and = and i32 %lshr, 4294967288  ; ~7
-  store i32 %and, i32* %p  ; extra use of and
+  store i32 %and, ptr %p  ; extra use of and
   %add = add i32 %lshr, %z  ; extra use of lshr
-  store i32 %add, i32* %q
+  store i32 %add, ptr %q
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
index 66860981aacbce85e6a617e5cc7e0bb41f366ac6..5335a4736896d7d507989547bf66a84489ef42cf 100644 (file)
@@ -123,56 +123,56 @@ define <4 x i1> @vec_4xi32_lshr_and_signbit_eq_undef3(<4 x i32> %x, <4 x i32> %y
 ; Extra use
 
 ; Fold happened
-define i1 @scalar_lshr_and_signbit_eq_extra_use_lshr(i32 %x, i32 %y, i32 %z, i32* %p) {
+define i1 @scalar_lshr_and_signbit_eq_extra_use_lshr(i32 %x, i32 %y, i32 %z, ptr %p) {
 ; CHECK-LABEL: @scalar_lshr_and_signbit_eq_extra_use_lshr(
 ; CHECK-NEXT:    [[LSHR:%.*]] = lshr i32 [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[XOR:%.*]] = xor i32 [[LSHR]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[XOR]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[XOR]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp sgt i32 [[LSHR]], -1
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %lshr = lshr i32 %x, %y
   %xor = xor i32 %lshr, %z  ; extra use of lshr
-  store i32 %xor, i32* %p
+  store i32 %xor, ptr %p
   %and = and i32 %lshr, 2147483648
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
 
 ; Not fold
-define i1 @scalar_lshr_and_signbit_eq_extra_use_and(i32 %x, i32 %y, i32 %z, i32* %p) {
+define i1 @scalar_lshr_and_signbit_eq_extra_use_and(i32 %x, i32 %y, i32 %z, ptr %p) {
 ; CHECK-LABEL: @scalar_lshr_and_signbit_eq_extra_use_and(
 ; CHECK-NEXT:    [[LSHR:%.*]] = lshr i32 [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[LSHR]], -2147483648
 ; CHECK-NEXT:    [[MUL:%.*]] = mul i32 [[AND]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[MUL]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[MUL]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[AND]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %lshr = lshr i32 %x, %y
   %and = and i32 %lshr, 2147483648
   %mul = mul i32 %and, %z  ; extra use of and
-  store i32 %mul, i32* %p
+  store i32 %mul, ptr %p
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
 
 ; Not fold
-define i1 @scalar_lshr_and_signbit_eq_extra_use_lshr_and(i32 %x, i32 %y, i32 %z, i32* %p, i32* %q) {
+define i1 @scalar_lshr_and_signbit_eq_extra_use_lshr_and(i32 %x, i32 %y, i32 %z, ptr %p, ptr %q) {
 ; CHECK-LABEL: @scalar_lshr_and_signbit_eq_extra_use_lshr_and(
 ; CHECK-NEXT:    [[LSHR:%.*]] = lshr i32 [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[LSHR]], -2147483648
-; CHECK-NEXT:    store i32 [[AND]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[AND]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[LSHR]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[ADD]], i32* [[Q:%.*]], align 4
+; CHECK-NEXT:    store i32 [[ADD]], ptr [[Q:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[AND]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %lshr = lshr i32 %x, %y
   %and = and i32 %lshr, 2147483648
-  store i32 %and, i32* %p  ; extra use of and
+  store i32 %and, ptr %p  ; extra use of and
   %add = add i32 %lshr, %z  ; extra use of lshr
-  store i32 %add, i32* %q
+  store i32 %add, ptr %q
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
index 7ff8a1909edfccc427ab8c6357896121edff5a9b..d1c2b1e98083ff323e3267792c8d1231c26ca1e4 100644 (file)
@@ -5,24 +5,24 @@
 ; bits in the operand which might be non-zero will be shifted
 ; off the end.
 
-define i32 @hash_string(i8* nocapture %key) nounwind readonly {
+define i32 @hash_string(ptr nocapture %key) nounwind readonly {
 ; CHECK-LABEL: @hash_string(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[T0:%.*]] = load i8, i8* [[KEY:%.*]], align 1
+; CHECK-NEXT:    [[T0:%.*]] = load i8, ptr [[KEY:%.*]], align 1
 ; CHECK-NEXT:    [[T1:%.*]] = icmp eq i8 [[T0]], 0
 ; CHECK-NEXT:    br i1 [[T1]], label [[BB2:%.*]], label [[BB:%.*]]
 ; CHECK:       bb:
 ; CHECK-NEXT:    [[INDVAR:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[T:%.*]], [[BB]] ]
 ; CHECK-NEXT:    [[K_04:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[T8:%.*]], [[BB]] ]
-; CHECK-NEXT:    [[CP_05:%.*]] = getelementptr i8, i8* [[KEY]], i64 [[INDVAR]]
+; CHECK-NEXT:    [[CP_05:%.*]] = getelementptr i8, ptr [[KEY]], i64 [[INDVAR]]
 ; CHECK-NEXT:    [[T2:%.*]] = shl nuw nsw i32 [[K_04]], 1
-; CHECK-NEXT:    [[T5:%.*]] = load i8, i8* [[CP_05]], align 1
+; CHECK-NEXT:    [[T5:%.*]] = load i8, ptr [[CP_05]], align 1
 ; CHECK-NEXT:    [[T6:%.*]] = sext i8 [[T5]] to i32
 ; CHECK-NEXT:    [[T7:%.*]] = xor i32 [[T2]], [[T6]]
 ; CHECK-NEXT:    [[T8]] = and i32 [[T7]], 16383
 ; CHECK-NEXT:    [[T]] = add i64 [[INDVAR]], 1
-; CHECK-NEXT:    [[SCEVGEP:%.*]] = getelementptr i8, i8* [[KEY]], i64 [[T]]
-; CHECK-NEXT:    [[T9:%.*]] = load i8, i8* [[SCEVGEP]], align 1
+; CHECK-NEXT:    [[SCEVGEP:%.*]] = getelementptr i8, ptr [[KEY]], i64 [[T]]
+; CHECK-NEXT:    [[T9:%.*]] = load i8, ptr [[SCEVGEP]], align 1
 ; CHECK-NEXT:    [[T10:%.*]] = icmp eq i8 [[T9]], 0
 ; CHECK-NEXT:    br i1 [[T10]], label [[BB2]], label [[BB]]
 ; CHECK:       bb2:
@@ -30,24 +30,24 @@ define i32 @hash_string(i8* nocapture %key) nounwind readonly {
 ; CHECK-NEXT:    ret i32 [[K_0_LCSSA]]
 ;
 entry:
-  %t0 = load i8, i8* %key, align 1
+  %t0 = load i8, ptr %key, align 1
   %t1 = icmp eq i8 %t0, 0
   br i1 %t1, label %bb2, label %bb
 
 bb:
   %indvar = phi i64 [ 0, %entry ], [ %t, %bb ]
   %k.04 = phi i32 [ 0, %entry ], [ %t8, %bb ]
-  %cp.05 = getelementptr i8, i8* %key, i64 %indvar
+  %cp.05 = getelementptr i8, ptr %key, i64 %indvar
   %t2 = shl i32 %k.04, 1
   %t3 = lshr i32 %k.04, 14
   %t4 = add i32 %t2, %t3
-  %t5 = load i8, i8* %cp.05, align 1
+  %t5 = load i8, ptr %cp.05, align 1
   %t6 = sext i8 %t5 to i32
   %t7 = xor i32 %t6, %t4
   %t8 = and i32 %t7, 16383
   %t = add i64 %indvar, 1
-  %scevgep = getelementptr i8, i8* %key, i64 %t
-  %t9 = load i8, i8* %scevgep, align 1
+  %scevgep = getelementptr i8, ptr %key, i64 %t
+  %t9 = load i8, ptr %scevgep, align 1
   %t10 = icmp eq i8 %t9, 0
   br i1 %t10, label %bb2, label %bb
 
index 7fa4114224c2959f67e3a899aa03e09febfff68d..820e15c484f23a66c07925acaa465a8f24524e35 100644 (file)
@@ -434,15 +434,15 @@ define <2 x i7> @negative_and_odd_vec(<2 x i7> %x) {
 
 ; Negative test - this is still worth trying to avoid srem?
 
-define i32 @negative_and_odd_uses(i32 %x, i32* %p) {
+define i32 @negative_and_odd_uses(i32 %x, ptr %p) {
 ; CHECK-LABEL: @negative_and_odd_uses(
 ; CHECK-NEXT:    [[S:%.*]] = srem i32 [[X:%.*]], 2
-; CHECK-NEXT:    store i32 [[S]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[S]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = lshr i32 [[S]], 31
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %s = srem i32 %x, 2
-  store i32 %s, i32* %p
+  store i32 %s, ptr %p
   %r = lshr i32 %s, 31
   ret i32 %r
 }
index a3c4f47fd45e783bac60c304278ef2e54dc16f01..055d9e85b2c17948c3b5650395ef67a0ff14c9ce 100644 (file)
@@ -5,16 +5,15 @@
 ; RUN: opt < %s -debugify-each -instcombine -S > %t.ll
 ; RUN: diff %t.no_dbg.ll %t.ll
 
-declare void @free(i8*)
+declare void @free(ptr)
 
-define void @test12(i32* %foo) minsize {
+define void @test12(ptr %foo) minsize {
 entry:
-  %tobool = icmp eq i32* %foo, null
+  %tobool = icmp eq ptr %foo, null
   br i1 %tobool, label %if.end, label %if.then
 
 if.then:                                          ; preds = %entry
-  %bitcast = bitcast i32* %foo to i8*
-  tail call void @free(i8* %bitcast)
+  tail call void @free(ptr %foo)
   br label %if.end
 
 if.end:                                           ; preds = %entry, %if.then
index 117f015629f39f743f6f2379cd5feba3abcdd6c9..4af68aabe5a95760cd2b65349ad7a1bb03e30617 100644 (file)
@@ -3,12 +3,12 @@
 
 define dso_local i32 @_Z6answeri(i32 %0) {
 ; CHECK-LABEL: @_Z6answeri(
-; CHECK-NEXT:    [[TMP2:%.*]] = call noalias nonnull dereferenceable(80) i8* @_Znam(i64 80) #[[ATTR2:[0-9]+]]
-; CHECK-NEXT:    call void @free(i8* [[TMP2]])
+; CHECK-NEXT:    [[TMP2:%.*]] = call noalias nonnull dereferenceable(80) ptr @_Znam(i64 80) #[[ATTR2:[0-9]+]]
+; CHECK-NEXT:    call void @free(ptr [[TMP2]])
 ; CHECK-NEXT:    ret i32 42
 ;
-  %2 = call noalias nonnull i8* @_Znam(i64 80) #0
-  call void @free(i8* %2)
+  %2 = call noalias nonnull ptr @_Znam(i64 80) #0
+  call void @free(ptr %2)
   ret i32 42
 }
 
@@ -16,15 +16,15 @@ define dso_local i32 @_Z6answeri(i32 %0) {
 ; when optimizing it.
 define void @test_alloca() {
   %1 = alloca i8
-  call void @free(i8* %1)
+  call void @free(ptr %1)
   ret void
 }
 
 ; Function Attrs: nobuiltin allocsize(0)
-declare dso_local nonnull i8* @_Znam(i64) #1
+declare dso_local nonnull ptr @_Znam(i64) #1
 
 ; Function Attrs: nounwind
-declare dso_local void @free(i8*) allockind("free") "alloc-family"="malloc"
+declare dso_local void @free(ptr) allockind("free") "alloc-family"="malloc"
 
 attributes #0 = { builtin allocsize(0) }
 attributes #1 = { nobuiltin allocsize(0) allockind("alloc,uninitialized") "alloc-family"="_Znam" }
index a3f5cb126902eb7a882d9c258da6f6f773176357..1ffd4d825950c59f08b55728896eb21edbcb9ced 100644 (file)
@@ -4,15 +4,15 @@
 
 target datalayout = "p:32:32:32"
 
-define i32 @main(i32 %argc, i8** %argv) {
+define i32 @main(i32 %argc, ptr %argv) {
 ; CHECK-LABEL: @main(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %c_19 = alloca i8*
-  %malloc_206 = tail call i8* @malloc(i32 mul (i32 ptrtoint (i8* getelementptr (i8, i8* null, i32 1) to i32), i32 10))
-  store i8* %malloc_206, i8** %c_19
-  %tmp_207 = load i8*, i8** %c_19
-  tail call void @free(i8* %tmp_207)
+  %c_19 = alloca ptr
+  %malloc_206 = tail call ptr @malloc(i32 mul (i32 ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i32), i32 10))
+  store ptr %malloc_206, ptr %c_19
+  %tmp_207 = load ptr, ptr %c_19
+  tail call void @free(ptr %tmp_207)
   ret i32 0
 }
 
@@ -20,48 +20,48 @@ define i32 @dead_aligned_alloc(i32 %size, i32 %alignment, i8 %value) {
 ; CHECK-LABEL: @dead_aligned_alloc(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %aligned_allocation = tail call i8* @aligned_alloc(i32 %alignment, i32 %size)
-  store i8 %value, i8* %aligned_allocation
-  tail call void @free(i8* %aligned_allocation)
+  %aligned_allocation = tail call ptr @aligned_alloc(i32 %alignment, i32 %size)
+  store i8 %value, ptr %aligned_allocation
+  tail call void @free(ptr %aligned_allocation)
   ret i32 0
 }
 
-declare noalias i8* @calloc(i32, i32) nounwind allockind("alloc,zeroed") allocsize(0,1) "alloc-family"="malloc"
-declare noalias i8* @malloc(i32) allockind("alloc,uninitialized") allocsize(0) "alloc-family"="malloc"
-declare noalias i8* @aligned_alloc(i32, i32) allockind("alloc,uninitialized,aligned") allocsize(1) "alloc-family"="malloc"
-declare void @free(i8*) allockind("free") "alloc-family"="malloc"
+declare noalias ptr @calloc(i32, i32) nounwind allockind("alloc,zeroed") allocsize(0,1) "alloc-family"="malloc"
+declare noalias ptr @malloc(i32) allockind("alloc,uninitialized") allocsize(0) "alloc-family"="malloc"
+declare noalias ptr @aligned_alloc(i32, i32) allockind("alloc,uninitialized,aligned") allocsize(1) "alloc-family"="malloc"
+declare void @free(ptr) allockind("free") "alloc-family"="malloc"
 
 define i1 @foo() {
 ; CHECK-LABEL: @foo(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %m = call i8* @malloc(i32 1)
-  %z = icmp eq i8* %m, null
-  call void @free(i8* %m)
+  %m = call ptr @malloc(i32 1)
+  %z = icmp eq ptr %m, null
+  call void @free(ptr %m)
   ret i1 %z
 }
 
-declare void @llvm.lifetime.start.p0i8(i64, i8*)
-declare void @llvm.lifetime.end.p0i8(i64, i8*)
-declare i64 @llvm.objectsize.i64(i8*, i1)
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i1) nounwind
-declare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i1) nounwind
-declare void @llvm.memset.p0i8.i32(i8*, i8, i32, i1) nounwind
+declare void @llvm.lifetime.start.p0(i64, ptr)
+declare void @llvm.lifetime.end.p0(i64, ptr)
+declare i64 @llvm.objectsize.i64(ptr, i1)
+declare void @llvm.memcpy.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1) nounwind
+declare void @llvm.memmove.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1) nounwind
+declare void @llvm.memset.p0.i32(ptr, i8, i32, i1) nounwind
 
-define void @test3(i8* %src) {
+define void @test3(ptr %src) {
 ; CHECK-LABEL: @test3(
 ; CHECK-NEXT:    ret void
 ;
-  %a = call noalias i8* @malloc(i32 10)
-  call void @llvm.lifetime.start.p0i8(i64 10, i8* %a)
-  call void @llvm.lifetime.end.p0i8(i64 10, i8* %a)
-  %size = call i64 @llvm.objectsize.i64(i8* %a, i1 true)
-  store i8 42, i8* %a
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %a, i8* %src, i32 32, i1 false)
-  call void @llvm.memmove.p0i8.p0i8.i32(i8* %a, i8* %src, i32 32, i1 false)
-  call void @llvm.memset.p0i8.i32(i8* %a, i8 5, i32 32, i1 false)
-  %alloc2 = call noalias i8* @calloc(i32 5, i32 7) nounwind
-  %z = icmp ne i8* %alloc2, null
+  %a = call noalias ptr @malloc(i32 10)
+  call void @llvm.lifetime.start.p0(i64 10, ptr %a)
+  call void @llvm.lifetime.end.p0(i64 10, ptr %a)
+  %size = call i64 @llvm.objectsize.i64(ptr %a, i1 true)
+  store i8 42, ptr %a
+  call void @llvm.memcpy.p0.p0.i32(ptr %a, ptr %src, i32 32, i1 false)
+  call void @llvm.memmove.p0.p0.i32(ptr %a, ptr %src, i32 32, i1 false)
+  call void @llvm.memset.p0.i32(ptr %a, i8 5, i32 32, i1 false)
+  %alloc2 = call noalias ptr @calloc(i32 5, i32 7) nounwind
+  %z = icmp ne ptr %alloc2, null
   ret void
 }
 
@@ -70,45 +70,43 @@ define void @test4() {
 ; CHECK-LABEL: @test4(
 ; CHECK-NEXT:    ret void
 ;
-  %A = call i8* @malloc(i32 16000)
-  %B = bitcast i8* %A to double*
-  %C = bitcast double* %B to i8*
-  call void @free(i8* %C)
+  %A = call ptr @malloc(i32 16000)
+  call void @free(ptr %A)
   ret void
 }
 
-define void @test5(i8* %ptr, i8** %esc) {
+define void @test5(ptr %ptr, ptr %esc) {
 ; CHECK-LABEL: @test5(
-; CHECK-NEXT:    [[A:%.*]] = call dereferenceable_or_null(700) i8* @malloc(i32 700)
-; CHECK-NEXT:    [[B:%.*]] = call dereferenceable_or_null(700) i8* @malloc(i32 700)
-; CHECK-NEXT:    [[C:%.*]] = call dereferenceable_or_null(700) i8* @malloc(i32 700)
-; CHECK-NEXT:    [[D:%.*]] = call dereferenceable_or_null(700) i8* @malloc(i32 700)
-; CHECK-NEXT:    [[E:%.*]] = call dereferenceable_or_null(700) i8* @malloc(i32 700)
-; CHECK-NEXT:    [[F:%.*]] = call dereferenceable_or_null(700) i8* @malloc(i32 700)
-; CHECK-NEXT:    [[G:%.*]] = call dereferenceable_or_null(700) i8* @malloc(i32 700)
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* noundef nonnull align 1 dereferenceable(32) [[PTR:%.*]], i8* noundef nonnull align 1 dereferenceable(32) [[A]], i32 32, i1 false)
-; CHECK-NEXT:    call void @llvm.memmove.p0i8.p0i8.i32(i8* noundef nonnull align 1 dereferenceable(32) [[PTR]], i8* noundef nonnull align 1 dereferenceable(32) [[B]], i32 32, i1 false)
-; CHECK-NEXT:    store i8* [[C]], i8** [[ESC:%.*]], align 4
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* [[D]], i8* [[PTR]], i32 32, i1 true)
-; CHECK-NEXT:    call void @llvm.memmove.p0i8.p0i8.i32(i8* [[E]], i8* [[PTR]], i32 32, i1 true)
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* [[F]], i8 5, i32 32, i1 true)
-; CHECK-NEXT:    store volatile i8 4, i8* [[G]], align 1
+; CHECK-NEXT:    [[A:%.*]] = call dereferenceable_or_null(700) ptr @malloc(i32 700)
+; CHECK-NEXT:    [[B:%.*]] = call dereferenceable_or_null(700) ptr @malloc(i32 700)
+; CHECK-NEXT:    [[C:%.*]] = call dereferenceable_or_null(700) ptr @malloc(i32 700)
+; CHECK-NEXT:    [[D:%.*]] = call dereferenceable_or_null(700) ptr @malloc(i32 700)
+; CHECK-NEXT:    [[E:%.*]] = call dereferenceable_or_null(700) ptr @malloc(i32 700)
+; CHECK-NEXT:    [[F:%.*]] = call dereferenceable_or_null(700) ptr @malloc(i32 700)
+; CHECK-NEXT:    [[G:%.*]] = call dereferenceable_or_null(700) ptr @malloc(i32 700)
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr noundef nonnull align 1 dereferenceable(32) [[PTR:%.*]], ptr noundef nonnull align 1 dereferenceable(32) [[A]], i32 32, i1 false)
+; CHECK-NEXT:    call void @llvm.memmove.p0.p0.i32(ptr noundef nonnull align 1 dereferenceable(32) [[PTR]], ptr noundef nonnull align 1 dereferenceable(32) [[B]], i32 32, i1 false)
+; CHECK-NEXT:    store ptr [[C]], ptr [[ESC:%.*]], align 4
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr [[D]], ptr [[PTR]], i32 32, i1 true)
+; CHECK-NEXT:    call void @llvm.memmove.p0.p0.i32(ptr [[E]], ptr [[PTR]], i32 32, i1 true)
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr [[F]], i8 5, i32 32, i1 true)
+; CHECK-NEXT:    store volatile i8 4, ptr [[G]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  %a = call i8* @malloc(i32 700)
-  %b = call i8* @malloc(i32 700)
-  %c = call i8* @malloc(i32 700)
-  %d = call i8* @malloc(i32 700)
-  %e = call i8* @malloc(i32 700)
-  %f = call i8* @malloc(i32 700)
-  %g = call i8* @malloc(i32 700)
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %ptr, i8* %a, i32 32, i1 false)
-  call void @llvm.memmove.p0i8.p0i8.i32(i8* %ptr, i8* %b, i32 32, i1 false)
-  store i8* %c, i8** %esc
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %d, i8* %ptr, i32 32, i1 true)
-  call void @llvm.memmove.p0i8.p0i8.i32(i8* %e, i8* %ptr, i32 32, i1 true)
-  call void @llvm.memset.p0i8.i32(i8* %f, i8 5, i32 32, i1 true)
-  store volatile i8 4, i8* %g
+  %a = call ptr @malloc(i32 700)
+  %b = call ptr @malloc(i32 700)
+  %c = call ptr @malloc(i32 700)
+  %d = call ptr @malloc(i32 700)
+  %e = call ptr @malloc(i32 700)
+  %f = call ptr @malloc(i32 700)
+  %g = call ptr @malloc(i32 700)
+  call void @llvm.memcpy.p0.p0.i32(ptr %ptr, ptr %a, i32 32, i1 false)
+  call void @llvm.memmove.p0.p0.i32(ptr %ptr, ptr %b, i32 32, i1 false)
+  store ptr %c, ptr %esc
+  call void @llvm.memcpy.p0.p0.i32(ptr %d, ptr %ptr, i32 32, i1 true)
+  call void @llvm.memmove.p0.p0.i32(ptr %e, ptr %ptr, i32 32, i1 true)
+  call void @llvm.memset.p0.i32(ptr %f, i8 5, i32 32, i1 true)
+  store volatile i8 4, ptr %g
   ret void
 }
 
@@ -118,11 +116,11 @@ define void @test5(i8* %ptr, i8** %esc) {
 ;; Using simplifycfg will remove the empty basic block and the branch operation
 ;; Then, performing a dead elimination will remove the comparison.
 ;; This is what happens with -O1 and upper.
-define void @test6(i8* %foo) minsize {
+define void @test6(ptr %foo) minsize {
 ; CHECK-LABEL: @test6(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq i8* [[FOO:%.*]], null
-; CHECK-NEXT:    tail call void @free(i8* [[FOO]])
+; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq ptr [[FOO:%.*]], null
+; CHECK-NEXT:    tail call void @free(ptr [[FOO]])
 ; CHECK-NEXT:    br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
 ; CHECK:       if.then:
 ; CHECK-NEXT:    br label [[IF_END]]
@@ -132,11 +130,11 @@ define void @test6(i8* %foo) minsize {
 ;; Call to free moved
 ;; Block is now empty and may be simplified by simplifycfg
 entry:
-  %tobool = icmp eq i8* %foo, null
+  %tobool = icmp eq ptr %foo, null
   br i1 %tobool, label %if.end, label %if.then
 
 if.then:                                          ; preds = %entry
-  tail call void @free(i8* %foo)
+  tail call void @free(ptr %foo)
   br label %if.end
 
 if.end:                                           ; preds = %entry, %if.then
@@ -145,12 +143,11 @@ if.end:                                           ; preds = %entry, %if.then
 
 ;; Check that the optimization that moves a call to free in its predecessor
 ;; block (see test6) also happens when noop casts are involved.
-define void @test12(i32* %foo) minsize {
+define void @test12(ptr %foo) minsize {
 ; CHECK-LABEL: @test12(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq i32* [[FOO:%.*]], null
-; CHECK-NEXT:    [[BITCAST:%.*]] = bitcast i32* [[FOO]] to i8*
-; CHECK-NEXT:    tail call void @free(i8* [[BITCAST]])
+; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq ptr [[FOO:%.*]], null
+; CHECK-NEXT:    tail call void @free(ptr [[FOO]])
 ; CHECK-NEXT:    br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
 ; CHECK:       if.then:
 ; CHECK-NEXT:    br label [[IF_END]]
@@ -161,12 +158,11 @@ define void @test12(i32* %foo) minsize {
 ;; Call to free moved
 ;; Block is now empty and may be simplified by simplifycfg
 entry:
-  %tobool = icmp eq i32* %foo, null
+  %tobool = icmp eq ptr %foo, null
   br i1 %tobool, label %if.end, label %if.then
 
 if.then:                                          ; preds = %entry
-  %bitcast = bitcast i32* %foo to i8*
-  tail call void @free(i8* %bitcast)
+  tail call void @free(ptr %foo)
   br label %if.end
 
 if.end:                                           ; preds = %entry, %if.then
@@ -176,11 +172,11 @@ if.end:                                           ; preds = %entry, %if.then
 ;; Test that nonnull-implying attributes on the parameter are adjusted when the
 ;; call is moved, since they may no longer be valid and result in miscompiles if
 ;; kept unchanged.
-define void @test_nonnull_free_move(i8* %foo) minsize {
+define void @test_nonnull_free_move(ptr %foo) minsize {
 ; CHECK-LABEL: @test_nonnull_free_move(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq i8* [[FOO:%.*]], null
-; CHECK-NEXT:    tail call void @free(i8* [[FOO]])
+; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq ptr [[FOO:%.*]], null
+; CHECK-NEXT:    tail call void @free(ptr [[FOO]])
 ; CHECK-NEXT:    br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
 ; CHECK:       if.then:
 ; CHECK-NEXT:    br label [[IF_END]]
@@ -188,22 +184,22 @@ define void @test_nonnull_free_move(i8* %foo) minsize {
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %tobool = icmp eq i8* %foo, null
+  %tobool = icmp eq ptr %foo, null
   br i1 %tobool, label %if.end, label %if.then
 
 if.then:                                          ; preds = %entry
-  tail call void @free(i8* nonnull %foo)
+  tail call void @free(ptr nonnull %foo)
   br label %if.end
 
 if.end:                                           ; preds = %entry, %if.then
   ret void
 }
 
-define void @test_dereferenceable_free_move(i8* %foo) minsize {
+define void @test_dereferenceable_free_move(ptr %foo) minsize {
 ; CHECK-LABEL: @test_dereferenceable_free_move(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq i8* [[FOO:%.*]], null
-; CHECK-NEXT:    tail call void @free(i8* dereferenceable_or_null(4) [[FOO]])
+; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq ptr [[FOO:%.*]], null
+; CHECK-NEXT:    tail call void @free(ptr dereferenceable_or_null(4) [[FOO]])
 ; CHECK-NEXT:    br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
 ; CHECK:       if.then:
 ; CHECK-NEXT:    br label [[IF_END]]
@@ -211,22 +207,22 @@ define void @test_dereferenceable_free_move(i8* %foo) minsize {
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %tobool = icmp eq i8* %foo, null
+  %tobool = icmp eq ptr %foo, null
   br i1 %tobool, label %if.end, label %if.then
 
 if.then:                                          ; preds = %entry
-  tail call void @free(i8* dereferenceable(4) %foo)
+  tail call void @free(ptr dereferenceable(4) %foo)
   br label %if.end
 
 if.end:                                           ; preds = %entry, %if.then
   ret void
 }
 
-define void @test_nonnull_dereferenceable_free_move(i8* %foo) minsize {
+define void @test_nonnull_dereferenceable_free_move(ptr %foo) minsize {
 ; CHECK-LABEL: @test_nonnull_dereferenceable_free_move(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq i8* [[FOO:%.*]], null
-; CHECK-NEXT:    tail call void @free(i8* dereferenceable_or_null(16) [[FOO]])
+; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq ptr [[FOO:%.*]], null
+; CHECK-NEXT:    tail call void @free(ptr dereferenceable_or_null(16) [[FOO]])
 ; CHECK-NEXT:    br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
 ; CHECK:       if.then:
 ; CHECK-NEXT:    br label [[IF_END]]
@@ -234,11 +230,11 @@ define void @test_nonnull_dereferenceable_free_move(i8* %foo) minsize {
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %tobool = icmp eq i8* %foo, null
+  %tobool = icmp eq ptr %foo, null
   br i1 %tobool, label %if.end, label %if.then
 
 if.then:                                          ; preds = %entry
-  tail call void @free(i8* nonnull dereferenceable(16) %foo)
+  tail call void @free(ptr nonnull dereferenceable(16) %foo)
   br label %if.end
 
 if.end:                                           ; preds = %entry, %if.then
@@ -250,41 +246,41 @@ if.end:                                           ; preds = %entry, %if.then
 ; been reverted once due to difficult to isolate fallout.
 
 ; TODO: Freeing a no-free pointer -> %foo must be null
-define void @test13(i8* nofree %foo) {
+define void @test13(ptr nofree %foo) {
 ; CHECK-LABEL: @test13(
-; CHECK-NEXT:    call void @free(i8* [[FOO:%.*]])
+; CHECK-NEXT:    call void @free(ptr [[FOO:%.*]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @free(i8* %foo)
+  call void @free(ptr %foo)
   ret void
 }
 
 ; TODO: Freeing a no-free pointer -> %foo must be null
-define void @test14(i8* %foo) nofree {
+define void @test14(ptr %foo) nofree {
 ; CHECK-LABEL: @test14(
-; CHECK-NEXT:    call void @free(i8* [[FOO:%.*]])
+; CHECK-NEXT:    call void @free(ptr [[FOO:%.*]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @free(i8* %foo)
+  call void @free(ptr %foo)
   ret void
 }
 
 ; TODO: free call marked no-free ->  %foo must be null
-define void @test15(i8* %foo) {
+define void @test15(ptr %foo) {
 ; CHECK-LABEL: @test15(
-; CHECK-NEXT:    call void @free(i8* [[FOO:%.*]]) #[[ATTR5:[0-9]+]]
+; CHECK-NEXT:    call void @free(ptr [[FOO:%.*]]) #[[ATTR5:[0-9]+]]
 ; CHECK-NEXT:    ret void
 ;
-  call void @free(i8* %foo) nofree
+  call void @free(ptr %foo) nofree
   ret void
 }
 
 ; TODO: freeing a nonnull nofree pointer -> full UB
-define void @test16(i8* nonnull nofree %foo) {
+define void @test16(ptr nonnull nofree %foo) {
 ; CHECK-LABEL: @test16(
-; CHECK-NEXT:    call void @free(i8* [[FOO:%.*]])
+; CHECK-NEXT:    call void @free(ptr [[FOO:%.*]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @free(i8* %foo)
+  call void @free(ptr %foo)
   ret void
 }
index aa1e42bdf276200a30bbed0746f33ebb5aca80e6..405710167827db817042d83ad52c3db56b0c7180 100644 (file)
@@ -3,9 +3,9 @@
 
 target triple = "nvptx64"
 
-declare void @user(i8*)
-declare i8* @malloc(i64) allockind("alloc,uninitialized") "alloc-family"="malloc" allocsize(0)
-declare void @free(i8*) allockind("free") "alloc-family"="malloc"
+declare void @user(ptr)
+declare ptr @malloc(i64) allockind("alloc,uninitialized") "alloc-family"="malloc" allocsize(0)
+declare void @free(ptr) allockind("free") "alloc-family"="malloc"
 
 ; Ensure the nvptx backend states malloc & free are a thing so we can recognize
 ; so we will optimize them properly. In the test below the malloc-free chain is
@@ -14,21 +14,21 @@ define void @malloc_then_free_not_needed() {
 ; CHECK-LABEL: @malloc_then_free_not_needed(
 ; CHECK-NEXT:    ret void
 ;
-  %a = call i8* @malloc(i64 4)
-  store i8 0, i8* %a
-  call void @free(i8* %a)
+  %a = call ptr @malloc(i64 4)
+  store i8 0, ptr %a
+  call void @free(ptr %a)
   ret void
 }
 
 define void @malloc_then_free_needed() {
 ; CHECK-LABEL: @malloc_then_free_needed(
-; CHECK-NEXT:    [[A:%.*]] = call dereferenceable_or_null(4) i8* @malloc(i64 4)
-; CHECK-NEXT:    call void @user(i8* [[A]])
-; CHECK-NEXT:    call void @free(i8* [[A]])
+; CHECK-NEXT:    [[A:%.*]] = call dereferenceable_or_null(4) ptr @malloc(i64 4)
+; CHECK-NEXT:    call void @user(ptr [[A]])
+; CHECK-NEXT:    call void @free(ptr [[A]])
 ; CHECK-NEXT:    ret void
 ;
-  %a = call i8* @malloc(i64 4)
-  call void @user(i8* %a)
-  call void @free(i8* %a)
+  %a = call ptr @malloc(i64 4)
+  call void @user(ptr %a)
+  call void @free(ptr %a)
   ret void
 }
index b4651537afeb074c1e16436fd7b08f14ee29aa93..6ed34aed5a2ddfd95aeaf1c3595cc615fcd482b4 100644 (file)
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-declare <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptrs, i32, <2 x i1> %mask, <2 x double> %src0)
-declare void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %val, <2 x double>* %ptrs, i32, <2 x i1> %mask)
-declare <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> %ptrs, i32, <2 x i1> %mask, <2 x double> %passthru)
-declare <4 x double> @llvm.masked.gather.v4f64.v4p0f64(<4 x double*> %ptrs, i32, <4 x i1> %mask, <4 x double> %passthru)
-declare void @llvm.masked.scatter.v2f64.v2p0f64(<2 x double> %val, <2 x double*> %ptrs, i32, <2 x i1> %mask)
+declare <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptrs, i32, <2 x i1> %mask, <2 x double> %src0)
+declare void @llvm.masked.store.v2f64.p0(<2 x double> %val, ptr %ptrs, i32, <2 x i1> %mask)
+declare <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> %ptrs, i32, <2 x i1> %mask, <2 x double> %passthru)
+declare <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr> %ptrs, i32, <4 x i1> %mask, <4 x double> %passthru)
+declare void @llvm.masked.scatter.v2f64.v2p0(<2 x double> %val, <2 x ptr> %ptrs, i32, <2 x i1> %mask)
 
-define <2 x double> @load_zeromask(<2 x double>* %ptr, <2 x double> %passthru)  {
+define <2 x double> @load_zeromask(ptr %ptr, <2 x double> %passthru)  {
 ; CHECK-LABEL: @load_zeromask(
 ; CHECK-NEXT:    ret <2 x double> [[PASSTHRU:%.*]]
 ;
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 1, <2 x i1> zeroinitializer, <2 x double> %passthru)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 1, <2 x i1> zeroinitializer, <2 x double> %passthru)
   ret <2 x double> %res
 }
 
-define <2 x double> @load_onemask(<2 x double>* %ptr, <2 x double> %passthru)  {
+define <2 x double> @load_onemask(ptr %ptr, <2 x double> %passthru)  {
 ; CHECK-LABEL: @load_onemask(
-; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, <2 x double>* [[PTR:%.*]], align 2
+; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, ptr [[PTR:%.*]], align 2
 ; CHECK-NEXT:    ret <2 x double> [[UNMASKEDLOAD]]
 ;
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 2, <2 x i1> <i1 1, i1 1>, <2 x double> %passthru)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 2, <2 x i1> <i1 1, i1 1>, <2 x double> %passthru)
   ret <2 x double> %res
 }
 
-define <2 x double> @load_undefmask(<2 x double>* %ptr, <2 x double> %passthru)  {
+define <2 x double> @load_undefmask(ptr %ptr, <2 x double> %passthru)  {
 ; CHECK-LABEL: @load_undefmask(
-; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, <2 x double>* [[PTR:%.*]], align 2
+; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, ptr [[PTR:%.*]], align 2
 ; CHECK-NEXT:    ret <2 x double> [[UNMASKEDLOAD]]
 ;
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 2, <2 x i1> <i1 1, i1 undef>, <2 x double> %passthru)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 2, <2 x i1> <i1 1, i1 undef>, <2 x double> %passthru)
   ret <2 x double> %res
 }
 
 @G = external global i8
 
-define <2 x double> @load_cemask(<2 x double>* %ptr, <2 x double> %passthru)  {
+define <2 x double> @load_cemask(ptr %ptr, <2 x double> %passthru)  {
 ; CHECK-LABEL: @load_cemask(
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* [[PTR:%.*]], i32 2, <2 x i1> <i1 true, i1 ptrtoint (i8* @G to i1)>, <2 x double> [[PASSTHRU:%.*]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0(ptr [[PTR:%.*]], i32 2, <2 x i1> <i1 true, i1 ptrtoint (ptr @G to i1)>, <2 x double> [[PASSTHRU:%.*]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 2, <2 x i1> <i1 1, i1 ptrtoint (i8* @G to i1)>, <2 x double> %passthru)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 2, <2 x i1> <i1 1, i1 ptrtoint (ptr @G to i1)>, <2 x double> %passthru)
   ret <2 x double> %res
 }
 
-define <2 x double> @load_lane0(<2 x double>* %ptr, double %pt)  {
+define <2 x double> @load_lane0(ptr %ptr, double %pt)  {
 ; CHECK-LABEL: @load_lane0(
 ; CHECK-NEXT:    [[PTV2:%.*]] = insertelement <2 x double> poison, double [[PT:%.*]], i64 1
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* [[PTR:%.*]], i32 2, <2 x i1> <i1 true, i1 false>, <2 x double> [[PTV2]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0(ptr [[PTR:%.*]], i32 2, <2 x i1> <i1 true, i1 false>, <2 x double> [[PTV2]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
   %ptv1 = insertelement <2 x double> poison, double %pt, i64 0
   %ptv2 = insertelement <2 x double> %ptv1, double %pt, i64 1
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 2, <2 x i1> <i1 true, i1 false>, <2 x double> %ptv2)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 2, <2 x i1> <i1 true, i1 false>, <2 x double> %ptv2)
   ret <2 x double> %res
 }
 
-define double @load_all(double* %base, double %pt)  {
+define double @load_all(ptr %base, double %pt)  {
 ; CHECK-LABEL: @load_all(
-; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, double* [[BASE:%.*]], <4 x i64> <i64 0, i64 poison, i64 2, i64 3>
-; CHECK-NEXT:    [[RES:%.*]] = call <4 x double> @llvm.masked.gather.v4f64.v4p0f64(<4 x double*> [[PTRS]], i32 4, <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x double> undef)
+; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, ptr [[BASE:%.*]], <4 x i64> <i64 0, i64 poison, i64 2, i64 3>
+; CHECK-NEXT:    [[RES:%.*]] = call <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr> [[PTRS]], i32 4, <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x double> undef)
 ; CHECK-NEXT:    [[ELT:%.*]] = extractelement <4 x double> [[RES]], i64 2
 ; CHECK-NEXT:    ret double [[ELT]]
 ;
-  %ptrs = getelementptr double, double* %base, <4 x i64> <i64 0, i64 1, i64 2, i64 3>
-  %res = call <4 x double> @llvm.masked.gather.v4f64.v4p0f64(<4 x double*> %ptrs, i32 4, <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x double> undef)
+  %ptrs = getelementptr double, ptr %base, <4 x i64> <i64 0, i64 1, i64 2, i64 3>
+  %res = call <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x double> undef)
   %elt = extractelement <4 x double> %res, i64 2
   ret double %elt
 }
 
-define <2 x double> @load_generic(<2 x double>* %ptr, double %pt, <2 x i1> %mask)  {
+define <2 x double> @load_generic(ptr %ptr, double %pt, <2 x i1> %mask)  {
 ; CHECK-LABEL: @load_generic(
 ; CHECK-NEXT:    [[PTV1:%.*]] = insertelement <2 x double> poison, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PTV2:%.*]] = shufflevector <2 x double> [[PTV1]], <2 x double> poison, <2 x i32> zeroinitializer
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* [[PTR:%.*]], i32 4, <2 x i1> [[MASK:%.*]], <2 x double> [[PTV2]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0(ptr [[PTR:%.*]], i32 4, <2 x i1> [[MASK:%.*]], <2 x double> [[PTV2]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
   %ptv1 = insertelement <2 x double> poison, double %pt, i64 0
   %ptv2 = insertelement <2 x double> %ptv1, double %pt, i64 1
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
   ret <2 x double> %res
 }
 
-define <2 x double> @load_speculative(<2 x double>* dereferenceable(16) align 4 %ptr, double %pt, <2 x i1> %mask) nofree nosync {
+define <2 x double> @load_speculative(ptr dereferenceable(16) align 4 %ptr, double %pt, <2 x i1> %mask) nofree nosync {
 ; CHECK-LABEL: @load_speculative(
 ; CHECK-NEXT:    [[PTV1:%.*]] = insertelement <2 x double> poison, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PTV2:%.*]] = shufflevector <2 x double> [[PTV1]], <2 x double> poison, <2 x i32> zeroinitializer
-; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, <2 x double>* [[PTR:%.*]], align 4
+; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, ptr [[PTR:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = select <2 x i1> [[MASK:%.*]], <2 x double> [[UNMASKEDLOAD]], <2 x double> [[PTV2]]
 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
 ;
   %ptv1 = insertelement <2 x double> poison, double %pt, i64 0
   %ptv2 = insertelement <2 x double> %ptv1, double %pt, i64 1
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
   ret <2 x double> %res
 }
 
-define <2 x double> @load_speculative_less_aligned(<2 x double>* dereferenceable(16) %ptr, double %pt, <2 x i1> %mask) nofree nosync {
+define <2 x double> @load_speculative_less_aligned(ptr dereferenceable(16) %ptr, double %pt, <2 x i1> %mask) nofree nosync {
 ; CHECK-LABEL: @load_speculative_less_aligned(
 ; CHECK-NEXT:    [[PTV1:%.*]] = insertelement <2 x double> poison, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PTV2:%.*]] = shufflevector <2 x double> [[PTV1]], <2 x double> poison, <2 x i32> zeroinitializer
-; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, <2 x double>* [[PTR:%.*]], align 4
+; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, ptr [[PTR:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = select <2 x i1> [[MASK:%.*]], <2 x double> [[UNMASKEDLOAD]], <2 x double> [[PTV2]]
 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
 ;
   %ptv1 = insertelement <2 x double> poison, double %pt, i64 0
   %ptv2 = insertelement <2 x double> %ptv1, double %pt, i64 1
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
   ret <2 x double> %res
 }
 
 ; Can't speculate since only half of required size is known deref
 
-define <2 x double> @load_spec_neg_size(<2 x double>* dereferenceable(8) %ptr, double %pt, <2 x i1> %mask) nofree nosync {
+define <2 x double> @load_spec_neg_size(ptr dereferenceable(8) %ptr, double %pt, <2 x i1> %mask) nofree nosync {
 ; CHECK-LABEL: @load_spec_neg_size(
 ; CHECK-NEXT:    [[PTV1:%.*]] = insertelement <2 x double> poison, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PTV2:%.*]] = shufflevector <2 x double> [[PTV1]], <2 x double> poison, <2 x i32> zeroinitializer
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* nonnull [[PTR:%.*]], i32 4, <2 x i1> [[MASK:%.*]], <2 x double> [[PTV2]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0(ptr nonnull [[PTR:%.*]], i32 4, <2 x i1> [[MASK:%.*]], <2 x double> [[PTV2]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
   %ptv1 = insertelement <2 x double> poison, double %pt, i64 0
   %ptv2 = insertelement <2 x double> %ptv1, double %pt, i64 1
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
   ret <2 x double> %res
 }
 
 ; Can only speculate one lane (but it's the only one active)
-define <2 x double> @load_spec_lan0(<2 x double>* dereferenceable(8) %ptr, double %pt, <2 x i1> %mask) nofree nosync {
+define <2 x double> @load_spec_lan0(ptr dereferenceable(8) %ptr, double %pt, <2 x i1> %mask) nofree nosync {
 ; CHECK-LABEL: @load_spec_lan0(
 ; CHECK-NEXT:    [[PTV1:%.*]] = insertelement <2 x double> poison, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PTV2:%.*]] = shufflevector <2 x double> [[PTV1]], <2 x double> poison, <2 x i32> zeroinitializer
 ; CHECK-NEXT:    [[MASK2:%.*]] = insertelement <2 x i1> [[MASK:%.*]], i1 false, i64 1
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* nonnull [[PTR:%.*]], i32 4, <2 x i1> [[MASK2]], <2 x double> [[PTV2]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0(ptr nonnull [[PTR:%.*]], i32 4, <2 x i1> [[MASK2]], <2 x double> [[PTV2]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
   %ptv1 = insertelement <2 x double> poison, double %pt, i64 0
   %ptv2 = insertelement <2 x double> %ptv1, double %pt, i64 1
   %mask2 = insertelement <2 x i1> %mask, i1 false, i64 1
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 4, <2 x i1> %mask2, <2 x double> %ptv2)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 4, <2 x i1> %mask2, <2 x double> %ptv2)
   ret <2 x double> %res
 }
 
-define void @store_zeromask(<2 x double>* %ptr, <2 x double> %val)  {
+define void @store_zeromask(ptr %ptr, <2 x double> %val)  {
 ; CHECK-LABEL: @store_zeromask(
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %val, <2 x double>* %ptr, i32 4, <2 x i1> zeroinitializer)
+  call void @llvm.masked.store.v2f64.p0(<2 x double> %val, ptr %ptr, i32 4, <2 x i1> zeroinitializer)
   ret void
 }
 
-define void @store_onemask(<2 x double>* %ptr, <2 x double> %val)  {
+define void @store_onemask(ptr %ptr, <2 x double> %val)  {
 ; CHECK-LABEL: @store_onemask(
-; CHECK-NEXT:    store <2 x double> [[VAL:%.*]], <2 x double>* [[PTR:%.*]], align 4
+; CHECK-NEXT:    store <2 x double> [[VAL:%.*]], ptr [[PTR:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %val, <2 x double>* %ptr, i32 4, <2 x i1> <i1 1, i1 1>)
+  call void @llvm.masked.store.v2f64.p0(<2 x double> %val, ptr %ptr, i32 4, <2 x i1> <i1 1, i1 1>)
   ret void
 }
 
-define void @store_demandedelts(<2 x double>* %ptr, double %val)  {
+define void @store_demandedelts(ptr %ptr, double %val)  {
 ; CHECK-LABEL: @store_demandedelts(
 ; CHECK-NEXT:    [[VALVEC1:%.*]] = insertelement <2 x double> poison, double [[VAL:%.*]], i64 0
-; CHECK-NEXT:    call void @llvm.masked.store.v2f64.p0v2f64(<2 x double> [[VALVEC1]], <2 x double>* [[PTR:%.*]], i32 4, <2 x i1> <i1 true, i1 false>)
+; CHECK-NEXT:    call void @llvm.masked.store.v2f64.p0(<2 x double> [[VALVEC1]], ptr [[PTR:%.*]], i32 4, <2 x i1> <i1 true, i1 false>)
 ; CHECK-NEXT:    ret void
 ;
   %valvec1 = insertelement <2 x double> poison, double %val, i32 0
   %valvec2 = insertelement <2 x double> %valvec1, double %val, i32 1
-  call void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %valvec2, <2 x double>* %ptr, i32 4, <2 x i1> <i1 true, i1 false>)
+  call void @llvm.masked.store.v2f64.p0(<2 x double> %valvec2, ptr %ptr, i32 4, <2 x i1> <i1 true, i1 false>)
   ret void
 }
 
-define <2 x double> @gather_generic(<2 x double*> %ptrs, <2 x i1> %mask, <2 x double> %passthru)  {
+define <2 x double> @gather_generic(<2 x ptr> %ptrs, <2 x i1> %mask, <2 x double> %passthru)  {
 ; CHECK-LABEL: @gather_generic(
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> [[PTRS:%.*]], i32 4, <2 x i1> [[MASK:%.*]], <2 x double> [[PASSTHRU:%.*]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> [[PTRS:%.*]], i32 4, <2 x i1> [[MASK:%.*]], <2 x double> [[PASSTHRU:%.*]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
-  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> %ptrs, i32 4, <2 x i1> %mask, <2 x double> %passthru)
+  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> %ptrs, i32 4, <2 x i1> %mask, <2 x double> %passthru)
   ret <2 x double> %res
 }
 
 
-define <2 x double> @gather_zeromask(<2 x double*> %ptrs, <2 x double> %passthru)  {
+define <2 x double> @gather_zeromask(<2 x ptr> %ptrs, <2 x double> %passthru)  {
 ; CHECK-LABEL: @gather_zeromask(
 ; CHECK-NEXT:    ret <2 x double> [[PASSTHRU:%.*]]
 ;
-  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> %ptrs, i32 4, <2 x i1> zeroinitializer, <2 x double> %passthru)
+  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> %ptrs, i32 4, <2 x i1> zeroinitializer, <2 x double> %passthru)
   ret <2 x double> %res
 }
 
 
-define <2 x double> @gather_onemask(<2 x double*> %ptrs, <2 x double> %passthru)  {
+define <2 x double> @gather_onemask(<2 x ptr> %ptrs, <2 x double> %passthru)  {
 ; CHECK-LABEL: @gather_onemask(
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> [[PTRS:%.*]], i32 4, <2 x i1> <i1 true, i1 true>, <2 x double> poison)
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> [[PTRS:%.*]], i32 4, <2 x i1> <i1 true, i1 true>, <2 x double> poison)
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
-  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> %ptrs, i32 4, <2 x i1> <i1 true, i1 true>, <2 x double> %passthru)
+  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> %ptrs, i32 4, <2 x i1> <i1 true, i1 true>, <2 x double> %passthru)
   ret <2 x double> %res
 }
 
-define <4 x double> @gather_lane2(double* %base, double %pt)  {
+define <4 x double> @gather_lane2(ptr %base, double %pt)  {
 ; CHECK-LABEL: @gather_lane2(
-; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, double* [[BASE:%.*]], <4 x i64> <i64 poison, i64 poison, i64 2, i64 poison>
+; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, ptr [[BASE:%.*]], <4 x i64> <i64 poison, i64 poison, i64 2, i64 poison>
 ; CHECK-NEXT:    [[PT_V1:%.*]] = insertelement <4 x double> poison, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PT_V2:%.*]] = shufflevector <4 x double> [[PT_V1]], <4 x double> poison, <4 x i32> <i32 0, i32 0, i32 undef, i32 0>
-; CHECK-NEXT:    [[RES:%.*]] = call <4 x double> @llvm.masked.gather.v4f64.v4p0f64(<4 x double*> [[PTRS]], i32 4, <4 x i1> <i1 false, i1 false, i1 true, i1 false>, <4 x double> [[PT_V2]])
+; CHECK-NEXT:    [[RES:%.*]] = call <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr> [[PTRS]], i32 4, <4 x i1> <i1 false, i1 false, i1 true, i1 false>, <4 x double> [[PT_V2]])
 ; CHECK-NEXT:    ret <4 x double> [[RES]]
 ;
-  %ptrs = getelementptr double, double *%base, <4 x i64> <i64 0, i64 1, i64 2, i64 3>
+  %ptrs = getelementptr double, ptr %base, <4 x i64> <i64 0, i64 1, i64 2, i64 3>
   %pt_v1 = insertelement <4 x double> poison, double %pt, i64 0
   %pt_v2 = shufflevector <4 x double> %pt_v1, <4 x double> poison, <4 x i32> zeroinitializer
-  %res = call <4 x double> @llvm.masked.gather.v4f64.v4p0f64(<4 x double*> %ptrs, i32 4, <4 x i1> <i1 false, i1 false, i1 true, i1 false>, <4 x double> %pt_v2)
+  %res = call <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> <i1 false, i1 false, i1 true, i1 false>, <4 x double> %pt_v2)
   ret <4 x double> %res
 }
 
-define <2 x double> @gather_lane0_maybe(double* %base, double %pt, <2 x i1> %mask)  {
+define <2 x double> @gather_lane0_maybe(ptr %base, double %pt, <2 x i1> %mask)  {
 ; CHECK-LABEL: @gather_lane0_maybe(
-; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, double* [[BASE:%.*]], <2 x i64> <i64 0, i64 1>
+; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, ptr [[BASE:%.*]], <2 x i64> <i64 0, i64 1>
 ; CHECK-NEXT:    [[PT_V1:%.*]] = insertelement <2 x double> poison, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PT_V2:%.*]] = shufflevector <2 x double> [[PT_V1]], <2 x double> poison, <2 x i32> zeroinitializer
 ; CHECK-NEXT:    [[MASK2:%.*]] = insertelement <2 x i1> [[MASK:%.*]], i1 false, i64 1
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> [[PTRS]], i32 4, <2 x i1> [[MASK2]], <2 x double> [[PT_V2]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> [[PTRS]], i32 4, <2 x i1> [[MASK2]], <2 x double> [[PT_V2]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
-  %ptrs = getelementptr double, double *%base, <2 x i64> <i64 0, i64 1>
+  %ptrs = getelementptr double, ptr %base, <2 x i64> <i64 0, i64 1>
   %pt_v1 = insertelement <2 x double> poison, double %pt, i64 0
   %pt_v2 = insertelement <2 x double> %pt_v1, double %pt, i64 1
   %mask2 = insertelement <2 x i1> %mask, i1 false, i64 1
-  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> %ptrs, i32 4, <2 x i1> %mask2, <2 x double> %pt_v2)
+  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> %ptrs, i32 4, <2 x i1> %mask2, <2 x double> %pt_v2)
   ret <2 x double> %res
 }
 
-define <2 x double> @gather_lane0_maybe_spec(double* %base, double %pt, <2 x i1> %mask)  {
+define <2 x double> @gather_lane0_maybe_spec(ptr %base, double %pt, <2 x i1> %mask)  {
 ; CHECK-LABEL: @gather_lane0_maybe_spec(
-; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, double* [[BASE:%.*]], <2 x i64> <i64 0, i64 1>
+; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, ptr [[BASE:%.*]], <2 x i64> <i64 0, i64 1>
 ; CHECK-NEXT:    [[PT_V1:%.*]] = insertelement <2 x double> poison, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PT_V2:%.*]] = shufflevector <2 x double> [[PT_V1]], <2 x double> poison, <2 x i32> zeroinitializer
 ; CHECK-NEXT:    [[MASK2:%.*]] = insertelement <2 x i1> [[MASK:%.*]], i1 false, i64 1
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> [[PTRS]], i32 4, <2 x i1> [[MASK2]], <2 x double> [[PT_V2]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> [[PTRS]], i32 4, <2 x i1> [[MASK2]], <2 x double> [[PT_V2]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
-  %ptrs = getelementptr double, double *%base, <2 x i64> <i64 0, i64 1>
+  %ptrs = getelementptr double, ptr %base, <2 x i64> <i64 0, i64 1>
   %pt_v1 = insertelement <2 x double> poison, double %pt, i64 0
   %pt_v2 = insertelement <2 x double> %pt_v1, double %pt, i64 1
   %mask2 = insertelement <2 x i1> %mask, i1 false, i64 1
-  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> %ptrs, i32 4, <2 x i1> %mask2, <2 x double> %pt_v2)
+  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> %ptrs, i32 4, <2 x i1> %mask2, <2 x double> %pt_v2)
   ret <2 x double> %res
 }
 
 
-define void @scatter_zeromask(<2 x double*> %ptrs, <2 x double> %val)  {
+define void @scatter_zeromask(<2 x ptr> %ptrs, <2 x double> %val)  {
 ; CHECK-LABEL: @scatter_zeromask(
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.masked.scatter.v2f64.v2p0f64(<2 x double> %val, <2 x double*> %ptrs, i32 8, <2 x i1> zeroinitializer)
+  call void @llvm.masked.scatter.v2f64.v2p0(<2 x double> %val, <2 x ptr> %ptrs, i32 8, <2 x i1> zeroinitializer)
   ret void
 }
 
-define void @scatter_demandedelts(double* %ptr, double %val)  {
+define void @scatter_demandedelts(ptr %ptr, double %val)  {
 ; CHECK-LABEL: @scatter_demandedelts(
-; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, double* [[PTR:%.*]], <2 x i64> <i64 0, i64 poison>
+; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, ptr [[PTR:%.*]], <2 x i64> <i64 0, i64 poison>
 ; CHECK-NEXT:    [[VALVEC1:%.*]] = insertelement <2 x double> poison, double [[VAL:%.*]], i64 0
-; CHECK-NEXT:    call void @llvm.masked.scatter.v2f64.v2p0f64(<2 x double> [[VALVEC1]], <2 x double*> [[PTRS]], i32 8, <2 x i1> <i1 true, i1 false>)
+; CHECK-NEXT:    call void @llvm.masked.scatter.v2f64.v2p0(<2 x double> [[VALVEC1]], <2 x ptr> [[PTRS]], i32 8, <2 x i1> <i1 true, i1 false>)
 ; CHECK-NEXT:    ret void
 ;
-  %ptrs = getelementptr double, double* %ptr, <2 x i64> <i64 0, i64 1>
+  %ptrs = getelementptr double, ptr %ptr, <2 x i64> <i64 0, i64 1>
   %valvec1 = insertelement <2 x double> poison, double %val, i32 0
   %valvec2 = insertelement <2 x double> %valvec1, double %val, i32 1
-  call void @llvm.masked.scatter.v2f64.v2p0f64(<2 x double> %valvec2, <2 x double*> %ptrs, i32 8, <2 x i1> <i1 true, i1 false>)
+  call void @llvm.masked.scatter.v2f64.v2p0(<2 x double> %valvec2, <2 x ptr> %ptrs, i32 8, <2 x i1> <i1 true, i1 false>)
   ret void
 }
index a0020ac31674d737cf484fe80ab05bfeb0735dbe..4d8c1f63ea77efa5b8ad6ad9393a99bed71a9d8a 100644 (file)
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-declare <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptrs, i32, <2 x i1> %mask, <2 x double> %src0)
-declare void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %val, <2 x double>* %ptrs, i32, <2 x i1> %mask)
-declare <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> %ptrs, i32, <2 x i1> %mask, <2 x double> %passthru)
-declare <4 x double> @llvm.masked.gather.v4f64.v4p0f64(<4 x double*> %ptrs, i32, <4 x i1> %mask, <4 x double> %passthru)
-declare void @llvm.masked.scatter.v2f64.v2p0f64(<2 x double> %val, <2 x double*> %ptrs, i32, <2 x i1> %mask)
+declare <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptrs, i32, <2 x i1> %mask, <2 x double> %src0)
+declare void @llvm.masked.store.v2f64.p0(<2 x double> %val, ptr %ptrs, i32, <2 x i1> %mask)
+declare <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> %ptrs, i32, <2 x i1> %mask, <2 x double> %passthru)
+declare <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr> %ptrs, i32, <4 x i1> %mask, <4 x double> %passthru)
+declare void @llvm.masked.scatter.v2f64.v2p0(<2 x double> %val, <2 x ptr> %ptrs, i32, <2 x i1> %mask)
 
-define <2 x double> @load_zeromask(<2 x double>* %ptr, <2 x double> %passthru)  {
+define <2 x double> @load_zeromask(ptr %ptr, <2 x double> %passthru)  {
 ; CHECK-LABEL: @load_zeromask(
 ; CHECK-NEXT:    ret <2 x double> [[PASSTHRU:%.*]]
 ;
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 1, <2 x i1> zeroinitializer, <2 x double> %passthru)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 1, <2 x i1> zeroinitializer, <2 x double> %passthru)
   ret <2 x double> %res
 }
 
-define <2 x double> @load_onemask(<2 x double>* %ptr, <2 x double> %passthru)  {
+define <2 x double> @load_onemask(ptr %ptr, <2 x double> %passthru)  {
 ; CHECK-LABEL: @load_onemask(
-; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, <2 x double>* [[PTR:%.*]], align 2
+; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, ptr [[PTR:%.*]], align 2
 ; CHECK-NEXT:    ret <2 x double> [[UNMASKEDLOAD]]
 ;
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 2, <2 x i1> <i1 1, i1 1>, <2 x double> %passthru)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 2, <2 x i1> <i1 1, i1 1>, <2 x double> %passthru)
   ret <2 x double> %res
 }
 
-define <2 x double> @load_undefmask(<2 x double>* %ptr, <2 x double> %passthru)  {
+define <2 x double> @load_undefmask(ptr %ptr, <2 x double> %passthru)  {
 ; CHECK-LABEL: @load_undefmask(
-; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, <2 x double>* [[PTR:%.*]], align 2
+; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, ptr [[PTR:%.*]], align 2
 ; CHECK-NEXT:    ret <2 x double> [[UNMASKEDLOAD]]
 ;
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 2, <2 x i1> <i1 1, i1 undef>, <2 x double> %passthru)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 2, <2 x i1> <i1 1, i1 undef>, <2 x double> %passthru)
   ret <2 x double> %res
 }
 
 @G = external global i8
 
-define <2 x double> @load_cemask(<2 x double>* %ptr, <2 x double> %passthru)  {
+define <2 x double> @load_cemask(ptr %ptr, <2 x double> %passthru)  {
 ; CHECK-LABEL: @load_cemask(
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* [[PTR:%.*]], i32 2, <2 x i1> <i1 true, i1 ptrtoint (i8* @G to i1)>, <2 x double> [[PASSTHRU:%.*]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0(ptr [[PTR:%.*]], i32 2, <2 x i1> <i1 true, i1 ptrtoint (ptr @G to i1)>, <2 x double> [[PASSTHRU:%.*]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 2, <2 x i1> <i1 1, i1 ptrtoint (i8* @G to i1)>, <2 x double> %passthru)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 2, <2 x i1> <i1 1, i1 ptrtoint (ptr @G to i1)>, <2 x double> %passthru)
   ret <2 x double> %res
 }
 
-define <2 x double> @load_lane0(<2 x double>* %ptr, double %pt)  {
+define <2 x double> @load_lane0(ptr %ptr, double %pt)  {
 ; CHECK-LABEL: @load_lane0(
 ; CHECK-NEXT:    [[PTV2:%.*]] = insertelement <2 x double> poison, double [[PT:%.*]], i64 1
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* [[PTR:%.*]], i32 2, <2 x i1> <i1 true, i1 false>, <2 x double> [[PTV2]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0(ptr [[PTR:%.*]], i32 2, <2 x i1> <i1 true, i1 false>, <2 x double> [[PTV2]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
   %ptv1 = insertelement <2 x double> undef, double %pt, i64 0
   %ptv2 = insertelement <2 x double> %ptv1, double %pt, i64 1
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 2, <2 x i1> <i1 true, i1 false>, <2 x double> %ptv2)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 2, <2 x i1> <i1 true, i1 false>, <2 x double> %ptv2)
   ret <2 x double> %res
 }
 
-define double @load_all(double* %base, double %pt)  {
+define double @load_all(ptr %base, double %pt)  {
 ; CHECK-LABEL: @load_all(
-; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, double* [[BASE:%.*]], <4 x i64> <i64 0, i64 poison, i64 2, i64 3>
-; CHECK-NEXT:    [[RES:%.*]] = call <4 x double> @llvm.masked.gather.v4f64.v4p0f64(<4 x double*> [[PTRS]], i32 4, <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x double> undef)
+; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, ptr [[BASE:%.*]], <4 x i64> <i64 0, i64 poison, i64 2, i64 3>
+; CHECK-NEXT:    [[RES:%.*]] = call <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr> [[PTRS]], i32 4, <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x double> undef)
 ; CHECK-NEXT:    [[ELT:%.*]] = extractelement <4 x double> [[RES]], i64 2
 ; CHECK-NEXT:    ret double [[ELT]]
 ;
-  %ptrs = getelementptr double, double* %base, <4 x i64> <i64 0, i64 1, i64 2, i64 3>
-  %res = call <4 x double> @llvm.masked.gather.v4f64.v4p0f64(<4 x double*> %ptrs, i32 4, <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x double> undef)
+  %ptrs = getelementptr double, ptr %base, <4 x i64> <i64 0, i64 1, i64 2, i64 3>
+  %res = call <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> <i1 true, i1 false, i1 true, i1 true>, <4 x double> undef)
   %elt = extractelement <4 x double> %res, i64 2
   ret double %elt
 }
 
-define <2 x double> @load_generic(<2 x double>* %ptr, double %pt, <2 x i1> %mask)  {
+define <2 x double> @load_generic(ptr %ptr, double %pt, <2 x i1> %mask)  {
 ; CHECK-LABEL: @load_generic(
 ; CHECK-NEXT:    [[PTV1:%.*]] = insertelement <2 x double> undef, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PTV2:%.*]] = shufflevector <2 x double> [[PTV1]], <2 x double> poison, <2 x i32> zeroinitializer
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* [[PTR:%.*]], i32 4, <2 x i1> [[MASK:%.*]], <2 x double> [[PTV2]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0(ptr [[PTR:%.*]], i32 4, <2 x i1> [[MASK:%.*]], <2 x double> [[PTV2]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
   %ptv1 = insertelement <2 x double> undef, double %pt, i64 0
   %ptv2 = insertelement <2 x double> %ptv1, double %pt, i64 1
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
   ret <2 x double> %res
 }
 
-define <2 x double> @load_speculative(<2 x double>* dereferenceable(16) align 4 %ptr, double %pt, <2 x i1> %mask) nofree nosync {
+define <2 x double> @load_speculative(ptr dereferenceable(16) align 4 %ptr, double %pt, <2 x i1> %mask) nofree nosync {
 ; CHECK-LABEL: @load_speculative(
 ; CHECK-NEXT:    [[PTV1:%.*]] = insertelement <2 x double> undef, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PTV2:%.*]] = shufflevector <2 x double> [[PTV1]], <2 x double> poison, <2 x i32> zeroinitializer
-; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, <2 x double>* [[PTR:%.*]], align 4
+; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, ptr [[PTR:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = select <2 x i1> [[MASK:%.*]], <2 x double> [[UNMASKEDLOAD]], <2 x double> [[PTV2]]
 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
 ;
   %ptv1 = insertelement <2 x double> undef, double %pt, i64 0
   %ptv2 = insertelement <2 x double> %ptv1, double %pt, i64 1
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
   ret <2 x double> %res
 }
 
-define <2 x double> @load_speculative_less_aligned(<2 x double>* dereferenceable(16) %ptr, double %pt, <2 x i1> %mask) nofree nosync {
+define <2 x double> @load_speculative_less_aligned(ptr dereferenceable(16) %ptr, double %pt, <2 x i1> %mask) nofree nosync {
 ; CHECK-LABEL: @load_speculative_less_aligned(
 ; CHECK-NEXT:    [[PTV1:%.*]] = insertelement <2 x double> undef, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PTV2:%.*]] = shufflevector <2 x double> [[PTV1]], <2 x double> poison, <2 x i32> zeroinitializer
-; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, <2 x double>* [[PTR:%.*]], align 4
+; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <2 x double>, ptr [[PTR:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = select <2 x i1> [[MASK:%.*]], <2 x double> [[UNMASKEDLOAD]], <2 x double> [[PTV2]]
 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
 ;
   %ptv1 = insertelement <2 x double> undef, double %pt, i64 0
   %ptv2 = insertelement <2 x double> %ptv1, double %pt, i64 1
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
   ret <2 x double> %res
 }
 
 ; Can't speculate since only half of required size is known deref
 
-define <2 x double> @load_spec_neg_size(<2 x double>* dereferenceable(8) %ptr, double %pt, <2 x i1> %mask) nofree nosync {
+define <2 x double> @load_spec_neg_size(ptr dereferenceable(8) %ptr, double %pt, <2 x i1> %mask) nofree nosync {
 ; CHECK-LABEL: @load_spec_neg_size(
 ; CHECK-NEXT:    [[PTV1:%.*]] = insertelement <2 x double> undef, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PTV2:%.*]] = shufflevector <2 x double> [[PTV1]], <2 x double> poison, <2 x i32> zeroinitializer
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* nonnull [[PTR:%.*]], i32 4, <2 x i1> [[MASK:%.*]], <2 x double> [[PTV2]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0(ptr nonnull [[PTR:%.*]], i32 4, <2 x i1> [[MASK:%.*]], <2 x double> [[PTV2]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
   %ptv1 = insertelement <2 x double> undef, double %pt, i64 0
   %ptv2 = insertelement <2 x double> %ptv1, double %pt, i64 1
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 4, <2 x i1> %mask, <2 x double> %ptv2)
   ret <2 x double> %res
 }
 
 ; Can only speculate one lane (but it's the only one active)
-define <2 x double> @load_spec_lan0(<2 x double>* dereferenceable(8) %ptr, double %pt, <2 x i1> %mask) nofree nosync {
+define <2 x double> @load_spec_lan0(ptr dereferenceable(8) %ptr, double %pt, <2 x i1> %mask) nofree nosync {
 ; CHECK-LABEL: @load_spec_lan0(
 ; CHECK-NEXT:    [[PTV1:%.*]] = insertelement <2 x double> undef, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PTV2:%.*]] = shufflevector <2 x double> [[PTV1]], <2 x double> poison, <2 x i32> zeroinitializer
 ; CHECK-NEXT:    [[MASK2:%.*]] = insertelement <2 x i1> [[MASK:%.*]], i1 false, i64 1
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* nonnull [[PTR:%.*]], i32 4, <2 x i1> [[MASK2]], <2 x double> [[PTV2]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.load.v2f64.p0(ptr nonnull [[PTR:%.*]], i32 4, <2 x i1> [[MASK2]], <2 x double> [[PTV2]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
   %ptv1 = insertelement <2 x double> undef, double %pt, i64 0
   %ptv2 = insertelement <2 x double> %ptv1, double %pt, i64 1
   %mask2 = insertelement <2 x i1> %mask, i1 false, i64 1
-  %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %ptr, i32 4, <2 x i1> %mask2, <2 x double> %ptv2)
+  %res = call <2 x double> @llvm.masked.load.v2f64.p0(ptr %ptr, i32 4, <2 x i1> %mask2, <2 x double> %ptv2)
   ret <2 x double> %res
 }
 
-define void @store_zeromask(<2 x double>* %ptr, <2 x double> %val)  {
+define void @store_zeromask(ptr %ptr, <2 x double> %val)  {
 ; CHECK-LABEL: @store_zeromask(
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %val, <2 x double>* %ptr, i32 4, <2 x i1> zeroinitializer)
+  call void @llvm.masked.store.v2f64.p0(<2 x double> %val, ptr %ptr, i32 4, <2 x i1> zeroinitializer)
   ret void
 }
 
-define void @store_onemask(<2 x double>* %ptr, <2 x double> %val)  {
+define void @store_onemask(ptr %ptr, <2 x double> %val)  {
 ; CHECK-LABEL: @store_onemask(
-; CHECK-NEXT:    store <2 x double> [[VAL:%.*]], <2 x double>* [[PTR:%.*]], align 4
+; CHECK-NEXT:    store <2 x double> [[VAL:%.*]], ptr [[PTR:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %val, <2 x double>* %ptr, i32 4, <2 x i1> <i1 1, i1 1>)
+  call void @llvm.masked.store.v2f64.p0(<2 x double> %val, ptr %ptr, i32 4, <2 x i1> <i1 1, i1 1>)
   ret void
 }
 
-define void @store_demandedelts(<2 x double>* %ptr, double %val)  {
+define void @store_demandedelts(ptr %ptr, double %val)  {
 ; CHECK-LABEL: @store_demandedelts(
 ; CHECK-NEXT:    [[VALVEC1:%.*]] = insertelement <2 x double> undef, double [[VAL:%.*]], i64 0
-; CHECK-NEXT:    call void @llvm.masked.store.v2f64.p0v2f64(<2 x double> [[VALVEC1]], <2 x double>* [[PTR:%.*]], i32 4, <2 x i1> <i1 true, i1 false>)
+; CHECK-NEXT:    call void @llvm.masked.store.v2f64.p0(<2 x double> [[VALVEC1]], ptr [[PTR:%.*]], i32 4, <2 x i1> <i1 true, i1 false>)
 ; CHECK-NEXT:    ret void
 ;
   %valvec1 = insertelement <2 x double> undef, double %val, i32 0
   %valvec2 = insertelement <2 x double> %valvec1, double %val, i32 1
-  call void @llvm.masked.store.v2f64.p0v2f64(<2 x double> %valvec2, <2 x double>* %ptr, i32 4, <2 x i1> <i1 true, i1 false>)
+  call void @llvm.masked.store.v2f64.p0(<2 x double> %valvec2, ptr %ptr, i32 4, <2 x i1> <i1 true, i1 false>)
   ret void
 }
 
-define <2 x double> @gather_generic(<2 x double*> %ptrs, <2 x i1> %mask, <2 x double> %passthru)  {
+define <2 x double> @gather_generic(<2 x ptr> %ptrs, <2 x i1> %mask, <2 x double> %passthru)  {
 ; CHECK-LABEL: @gather_generic(
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> [[PTRS:%.*]], i32 4, <2 x i1> [[MASK:%.*]], <2 x double> [[PASSTHRU:%.*]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> [[PTRS:%.*]], i32 4, <2 x i1> [[MASK:%.*]], <2 x double> [[PASSTHRU:%.*]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
-  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> %ptrs, i32 4, <2 x i1> %mask, <2 x double> %passthru)
+  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> %ptrs, i32 4, <2 x i1> %mask, <2 x double> %passthru)
   ret <2 x double> %res
 }
 
 
-define <2 x double> @gather_zeromask(<2 x double*> %ptrs, <2 x double> %passthru)  {
+define <2 x double> @gather_zeromask(<2 x ptr> %ptrs, <2 x double> %passthru)  {
 ; CHECK-LABEL: @gather_zeromask(
 ; CHECK-NEXT:    ret <2 x double> [[PASSTHRU:%.*]]
 ;
-  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> %ptrs, i32 4, <2 x i1> zeroinitializer, <2 x double> %passthru)
+  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> %ptrs, i32 4, <2 x i1> zeroinitializer, <2 x double> %passthru)
   ret <2 x double> %res
 }
 
 
-define <2 x double> @gather_onemask(<2 x double*> %ptrs, <2 x double> %passthru)  {
+define <2 x double> @gather_onemask(<2 x ptr> %ptrs, <2 x double> %passthru)  {
 ; CHECK-LABEL: @gather_onemask(
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> [[PTRS:%.*]], i32 4, <2 x i1> <i1 true, i1 true>, <2 x double> poison)
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> [[PTRS:%.*]], i32 4, <2 x i1> <i1 true, i1 true>, <2 x double> poison)
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
-  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> %ptrs, i32 4, <2 x i1> <i1 true, i1 true>, <2 x double> %passthru)
+  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> %ptrs, i32 4, <2 x i1> <i1 true, i1 true>, <2 x double> %passthru)
   ret <2 x double> %res
 }
 
-define <4 x double> @gather_lane2(double* %base, double %pt)  {
+define <4 x double> @gather_lane2(ptr %base, double %pt)  {
 ; CHECK-LABEL: @gather_lane2(
-; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, double* [[BASE:%.*]], <4 x i64> <i64 poison, i64 poison, i64 2, i64 poison>
+; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, ptr [[BASE:%.*]], <4 x i64> <i64 poison, i64 poison, i64 2, i64 poison>
 ; CHECK-NEXT:    [[PT_V1:%.*]] = insertelement <4 x double> undef, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PT_V2:%.*]] = shufflevector <4 x double> [[PT_V1]], <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 undef, i32 0>
-; CHECK-NEXT:    [[RES:%.*]] = call <4 x double> @llvm.masked.gather.v4f64.v4p0f64(<4 x double*> [[PTRS]], i32 4, <4 x i1> <i1 false, i1 false, i1 true, i1 false>, <4 x double> [[PT_V2]])
+; CHECK-NEXT:    [[RES:%.*]] = call <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr> [[PTRS]], i32 4, <4 x i1> <i1 false, i1 false, i1 true, i1 false>, <4 x double> [[PT_V2]])
 ; CHECK-NEXT:    ret <4 x double> [[RES]]
 ;
-  %ptrs = getelementptr double, double *%base, <4 x i64> <i64 0, i64 1, i64 2, i64 3>
+  %ptrs = getelementptr double, ptr %base, <4 x i64> <i64 0, i64 1, i64 2, i64 3>
   %pt_v1 = insertelement <4 x double> undef, double %pt, i64 0
   %pt_v2 = shufflevector <4 x double> %pt_v1, <4 x double> undef, <4 x i32> zeroinitializer
-  %res = call <4 x double> @llvm.masked.gather.v4f64.v4p0f64(<4 x double*> %ptrs, i32 4, <4 x i1> <i1 false, i1 false, i1 true, i1 false>, <4 x double> %pt_v2)
+  %res = call <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> <i1 false, i1 false, i1 true, i1 false>, <4 x double> %pt_v2)
   ret <4 x double> %res
 }
 
-define <2 x double> @gather_lane0_maybe(double* %base, double %pt, <2 x i1> %mask)  {
+define <2 x double> @gather_lane0_maybe(ptr %base, double %pt, <2 x i1> %mask)  {
 ; CHECK-LABEL: @gather_lane0_maybe(
-; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, double* [[BASE:%.*]], <2 x i64> <i64 0, i64 1>
+; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, ptr [[BASE:%.*]], <2 x i64> <i64 0, i64 1>
 ; CHECK-NEXT:    [[PT_V1:%.*]] = insertelement <2 x double> undef, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PT_V2:%.*]] = shufflevector <2 x double> [[PT_V1]], <2 x double> poison, <2 x i32> zeroinitializer
 ; CHECK-NEXT:    [[MASK2:%.*]] = insertelement <2 x i1> [[MASK:%.*]], i1 false, i64 1
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> [[PTRS]], i32 4, <2 x i1> [[MASK2]], <2 x double> [[PT_V2]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> [[PTRS]], i32 4, <2 x i1> [[MASK2]], <2 x double> [[PT_V2]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
-  %ptrs = getelementptr double, double *%base, <2 x i64> <i64 0, i64 1>
+  %ptrs = getelementptr double, ptr %base, <2 x i64> <i64 0, i64 1>
   %pt_v1 = insertelement <2 x double> undef, double %pt, i64 0
   %pt_v2 = insertelement <2 x double> %pt_v1, double %pt, i64 1
   %mask2 = insertelement <2 x i1> %mask, i1 false, i64 1
-  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> %ptrs, i32 4, <2 x i1> %mask2, <2 x double> %pt_v2)
+  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> %ptrs, i32 4, <2 x i1> %mask2, <2 x double> %pt_v2)
   ret <2 x double> %res
 }
 
-define <2 x double> @gather_lane0_maybe_spec(double* %base, double %pt, <2 x i1> %mask)  {
+define <2 x double> @gather_lane0_maybe_spec(ptr %base, double %pt, <2 x i1> %mask)  {
 ; CHECK-LABEL: @gather_lane0_maybe_spec(
-; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, double* [[BASE:%.*]], <2 x i64> <i64 0, i64 1>
+; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, ptr [[BASE:%.*]], <2 x i64> <i64 0, i64 1>
 ; CHECK-NEXT:    [[PT_V1:%.*]] = insertelement <2 x double> undef, double [[PT:%.*]], i64 0
 ; CHECK-NEXT:    [[PT_V2:%.*]] = shufflevector <2 x double> [[PT_V1]], <2 x double> poison, <2 x i32> zeroinitializer
 ; CHECK-NEXT:    [[MASK2:%.*]] = insertelement <2 x i1> [[MASK:%.*]], i1 false, i64 1
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> [[PTRS]], i32 4, <2 x i1> [[MASK2]], <2 x double> [[PT_V2]])
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> [[PTRS]], i32 4, <2 x i1> [[MASK2]], <2 x double> [[PT_V2]])
 ; CHECK-NEXT:    ret <2 x double> [[RES]]
 ;
-  %ptrs = getelementptr double, double *%base, <2 x i64> <i64 0, i64 1>
+  %ptrs = getelementptr double, ptr %base, <2 x i64> <i64 0, i64 1>
   %pt_v1 = insertelement <2 x double> undef, double %pt, i64 0
   %pt_v2 = insertelement <2 x double> %pt_v1, double %pt, i64 1
   %mask2 = insertelement <2 x i1> %mask, i1 false, i64 1
-  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0f64(<2 x double*> %ptrs, i32 4, <2 x i1> %mask2, <2 x double> %pt_v2)
+  %res = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> %ptrs, i32 4, <2 x i1> %mask2, <2 x double> %pt_v2)
   ret <2 x double> %res
 }
 
 
-define void @scatter_zeromask(<2 x double*> %ptrs, <2 x double> %val)  {
+define void @scatter_zeromask(<2 x ptr> %ptrs, <2 x double> %val)  {
 ; CHECK-LABEL: @scatter_zeromask(
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.masked.scatter.v2f64.v2p0f64(<2 x double> %val, <2 x double*> %ptrs, i32 8, <2 x i1> zeroinitializer)
+  call void @llvm.masked.scatter.v2f64.v2p0(<2 x double> %val, <2 x ptr> %ptrs, i32 8, <2 x i1> zeroinitializer)
   ret void
 }
 
-define void @scatter_demandedelts(double* %ptr, double %val)  {
+define void @scatter_demandedelts(ptr %ptr, double %val)  {
 ; CHECK-LABEL: @scatter_demandedelts(
-; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, double* [[PTR:%.*]], <2 x i64> <i64 0, i64 poison>
+; CHECK-NEXT:    [[PTRS:%.*]] = getelementptr double, ptr [[PTR:%.*]], <2 x i64> <i64 0, i64 poison>
 ; CHECK-NEXT:    [[VALVEC1:%.*]] = insertelement <2 x double> undef, double [[VAL:%.*]], i64 0
-; CHECK-NEXT:    call void @llvm.masked.scatter.v2f64.v2p0f64(<2 x double> [[VALVEC1]], <2 x double*> [[PTRS]], i32 8, <2 x i1> <i1 true, i1 false>)
+; CHECK-NEXT:    call void @llvm.masked.scatter.v2f64.v2p0(<2 x double> [[VALVEC1]], <2 x ptr> [[PTRS]], i32 8, <2 x i1> <i1 true, i1 false>)
 ; CHECK-NEXT:    ret void
 ;
-  %ptrs = getelementptr double, double* %ptr, <2 x i64> <i64 0, i64 1>
+  %ptrs = getelementptr double, ptr %ptr, <2 x i64> <i64 0, i64 1>
   %valvec1 = insertelement <2 x double> undef, double %val, i32 0
   %valvec2 = insertelement <2 x double> %valvec1, double %val, i32 1
-  call void @llvm.masked.scatter.v2f64.v2p0f64(<2 x double> %valvec2, <2 x double*> %ptrs, i32 8, <2 x i1> <i1 true, i1 false>)
+  call void @llvm.masked.scatter.v2f64.v2p0(<2 x double> %valvec2, <2 x ptr> %ptrs, i32 8, <2 x i1> <i1 true, i1 false>)
   ret void
 }
 
@@ -274,167 +274,167 @@ define void @scatter_demandedelts(double* %ptr, double %val)  {
 ; Test scatters that can be simplified to scalar stores.
 
 ;; Value splat (mask is not used)
-define void @scatter_v4i16_uniform_vals_uniform_ptrs_no_all_active_mask(i16* %dst, i16 %val) {
+define void @scatter_v4i16_uniform_vals_uniform_ptrs_no_all_active_mask(ptr %dst, i16 %val) {
 ; CHECK-LABEL: @scatter_v4i16_uniform_vals_uniform_ptrs_no_all_active_mask(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    store i16 [[VAL:%.*]], i16* [[DST:%.*]], align 2
+; CHECK-NEXT:    store i16 [[VAL:%.*]], ptr [[DST:%.*]], align 2
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %broadcast.splatinsert = insertelement <4 x i16*> poison, i16* %dst, i32 0
-  %broadcast.splat = shufflevector <4 x i16*> %broadcast.splatinsert, <4 x i16*> poison, <4 x i32> zeroinitializer
+  %broadcast.splatinsert = insertelement <4 x ptr> poison, ptr %dst, i32 0
+  %broadcast.splat = shufflevector <4 x ptr> %broadcast.splatinsert, <4 x ptr> poison, <4 x i32> zeroinitializer
   %broadcast.value = insertelement <4 x i16> poison, i16 %val, i32 0
   %broadcast.splatvalue = shufflevector <4 x i16> %broadcast.value, <4 x i16> poison, <4 x i32> zeroinitializer
-  call void @llvm.masked.scatter.v4i16.v4p0i16(<4 x i16> %broadcast.splatvalue, <4 x i16*> %broadcast.splat, i32 2, <4 x i1> <i1 0, i1 0, i1 1, i1 1>)
+  call void @llvm.masked.scatter.v4i16.v4p0(<4 x i16> %broadcast.splatvalue, <4 x ptr> %broadcast.splat, i32 2, <4 x i1> <i1 0, i1 0, i1 1, i1 1>)
   ret void
 }
 
-define void @scatter_nxv4i16_uniform_vals_uniform_ptrs_all_active_mask(i16* %dst, i16 %val) {
+define void @scatter_nxv4i16_uniform_vals_uniform_ptrs_all_active_mask(ptr %dst, i16 %val) {
 ; CHECK-LABEL: @scatter_nxv4i16_uniform_vals_uniform_ptrs_all_active_mask(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    store i16 [[VAL:%.*]], i16* [[DST:%.*]], align 2
+; CHECK-NEXT:    store i16 [[VAL:%.*]], ptr [[DST:%.*]], align 2
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %broadcast.splatinsert = insertelement <vscale x 4 x i16*> poison, i16* %dst, i32 0
-  %broadcast.splat = shufflevector <vscale x 4 x i16*> %broadcast.splatinsert, <vscale x 4 x i16*> poison, <vscale x 4 x i32> zeroinitializer
+  %broadcast.splatinsert = insertelement <vscale x 4 x ptr> poison, ptr %dst, i32 0
+  %broadcast.splat = shufflevector <vscale x 4 x ptr> %broadcast.splatinsert, <vscale x 4 x ptr> poison, <vscale x 4 x i32> zeroinitializer
   %broadcast.value = insertelement <vscale x 4 x i16> poison, i16 %val, i32 0
   %broadcast.splatvalue = shufflevector <vscale x 4 x i16> %broadcast.value, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
-  call void @llvm.masked.scatter.nxv4i16.nxv4p0i16(<vscale x 4 x i16> %broadcast.splatvalue, <vscale x 4 x i16*> %broadcast.splat, i32 2, <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> zeroinitializer , i1 true, i32 0), <vscale x 4 x i1> zeroinitializer, <vscale x 4 x i32> zeroinitializer))
+  call void @llvm.masked.scatter.nxv4i16.nxv4p0i16(<vscale x 4 x i16> %broadcast.splatvalue, <vscale x 4 x ptr> %broadcast.splat, i32 2, <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> zeroinitializer , i1 true, i32 0), <vscale x 4 x i1> zeroinitializer, <vscale x 4 x i32> zeroinitializer))
   ret void
 }
 
 ;; The pointer is splat and mask is all active, but value is not a splat
-define void @scatter_v4i16_no_uniform_vals_uniform_ptrs_all_active_mask(i16* %dst, <4 x i16>*  %src)  {
+define void @scatter_v4i16_no_uniform_vals_uniform_ptrs_all_active_mask(ptr %dst, ptr  %src)  {
 ; CHECK-LABEL: @scatter_v4i16_no_uniform_vals_uniform_ptrs_all_active_mask(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i16>, <4 x i16>* [[SRC:%.*]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i16>, ptr [[SRC:%.*]], align 2
 ; CHECK-NEXT:    [[TMP0:%.*]] = extractelement <4 x i16> [[WIDE_LOAD]], i64 3
-; CHECK-NEXT:    store i16 [[TMP0]], i16* [[DST:%.*]], align 2
+; CHECK-NEXT:    store i16 [[TMP0]], ptr [[DST:%.*]], align 2
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %broadcast.splatinsert = insertelement <4 x i16*> poison, i16* %dst, i32 0
-  %broadcast.splat = shufflevector <4 x i16*> %broadcast.splatinsert, <4 x i16*> poison, <4 x i32> zeroinitializer
-  %wide.load = load <4 x i16>, <4 x i16>* %src, align 2
-  call void @llvm.masked.scatter.v4i16.v4p0i16(<4 x i16> %wide.load, <4 x i16*> %broadcast.splat, i32 2, <4 x i1> <i1 1, i1 1, i1 1, i1 1>)
+  %broadcast.splatinsert = insertelement <4 x ptr> poison, ptr %dst, i32 0
+  %broadcast.splat = shufflevector <4 x ptr> %broadcast.splatinsert, <4 x ptr> poison, <4 x i32> zeroinitializer
+  %wide.load = load <4 x i16>, ptr %src, align 2
+  call void @llvm.masked.scatter.v4i16.v4p0(<4 x i16> %wide.load, <4 x ptr> %broadcast.splat, i32 2, <4 x i1> <i1 1, i1 1, i1 1, i1 1>)
   ret void
 }
 
-define void @scatter_nxv4i16_no_uniform_vals_uniform_ptrs_all_active_mask(i16* %dst, <vscale x 4 x i16>* %src) {
+define void @scatter_nxv4i16_no_uniform_vals_uniform_ptrs_all_active_mask(ptr %dst, ptr %src) {
 ; CHECK-LABEL: @scatter_nxv4i16_no_uniform_vals_uniform_ptrs_all_active_mask(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <vscale x 4 x i16>, <vscale x 4 x i16>* [[SRC:%.*]], align 2
+; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <vscale x 4 x i16>, ptr [[SRC:%.*]], align 2
 ; CHECK-NEXT:    [[TMP0:%.*]] = call i32 @llvm.vscale.i32()
 ; CHECK-NEXT:    [[TMP1:%.*]] = shl i32 [[TMP0]], 2
 ; CHECK-NEXT:    [[TMP2:%.*]] = add i32 [[TMP1]], -1
 ; CHECK-NEXT:    [[TMP3:%.*]] = extractelement <vscale x 4 x i16> [[WIDE_LOAD]], i32 [[TMP2]]
-; CHECK-NEXT:    store i16 [[TMP3]], i16* [[DST:%.*]], align 2
+; CHECK-NEXT:    store i16 [[TMP3]], ptr [[DST:%.*]], align 2
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %broadcast.splatinsert = insertelement <vscale x 4 x i16*> poison, i16* %dst, i32 0
-  %broadcast.splat = shufflevector <vscale x 4 x i16*> %broadcast.splatinsert, <vscale x 4 x i16*> poison, <vscale x 4 x i32> zeroinitializer
-  %wide.load = load <vscale x 4 x i16>, <vscale x 4 x i16>* %src, align 2
-  call void @llvm.masked.scatter.nxv4i16.nxv4p0i16(<vscale x 4 x i16> %wide.load, <vscale x 4 x i16*> %broadcast.splat, i32 2, <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i32 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
+  %broadcast.splatinsert = insertelement <vscale x 4 x ptr> poison, ptr %dst, i32 0
+  %broadcast.splat = shufflevector <vscale x 4 x ptr> %broadcast.splatinsert, <vscale x 4 x ptr> poison, <vscale x 4 x i32> zeroinitializer
+  %wide.load = load <vscale x 4 x i16>, ptr %src, align 2
+  call void @llvm.masked.scatter.nxv4i16.nxv4p0i16(<vscale x 4 x i16> %wide.load, <vscale x 4 x ptr> %broadcast.splat, i32 2, <vscale x 4 x i1> shufflevector (<vscale x 4 x i1> insertelement (<vscale x 4 x i1> poison, i1 true, i32 0), <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer))
   ret void
 }
 
 ; Negative scatter tests
 
 ;; Pointer is splat, but mask is not all active and  value is not a splat
-define void @negative_scatter_v4i16_no_uniform_vals_uniform_ptrs_all_inactive_mask(i16* %dst, <4 x i16>* %src) {
+define void @negative_scatter_v4i16_no_uniform_vals_uniform_ptrs_all_inactive_mask(ptr %dst, ptr %src) {
 ; CHECK-LABEL: @negative_scatter_v4i16_no_uniform_vals_uniform_ptrs_all_inactive_mask(
-; CHECK-NEXT:    [[INSERT_ELT:%.*]] = insertelement <4 x i16*> poison, i16* [[DST:%.*]], i64 0
-; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x i16*> [[INSERT_ELT]], <4 x i16*> poison, <4 x i32> <i32 undef, i32 undef, i32 0, i32 0>
-; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i16>, <4 x i16>* [[SRC:%.*]], align 2
-; CHECK-NEXT:    call void @llvm.masked.scatter.v4i16.v4p0i16(<4 x i16> [[WIDE_LOAD]], <4 x i16*> [[BROADCAST_SPLAT]], i32 2, <4 x i1> <i1 false, i1 false, i1 true, i1 true>)
+; CHECK-NEXT:    [[INSERT_ELT:%.*]] = insertelement <4 x ptr> poison, ptr [[DST:%.*]], i64 0
+; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <4 x ptr> [[INSERT_ELT]], <4 x ptr> poison, <4 x i32> <i32 undef, i32 undef, i32 0, i32 0>
+; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i16>, ptr [[SRC:%.*]], align 2
+; CHECK-NEXT:    call void @llvm.masked.scatter.v4i16.v4p0(<4 x i16> [[WIDE_LOAD]], <4 x ptr> [[BROADCAST_SPLAT]], i32 2, <4 x i1> <i1 false, i1 false, i1 true, i1 true>)
 ; CHECK-NEXT:    ret void
 ;
-  %insert.elt = insertelement <4 x i16*> poison, i16* %dst, i32 0
-  %broadcast.splat = shufflevector <4 x i16*> %insert.elt, <4 x i16*> poison, <4 x i32> zeroinitializer
-  %wide.load = load <4 x i16>, <4 x i16>* %src, align 2
-  call void @llvm.masked.scatter.v4i16.v4p0i16(<4 x i16> %wide.load, <4 x i16*> %broadcast.splat, i32 2, <4 x i1> <i1 0, i1 0, i1 1, i1 1>)
+  %insert.elt = insertelement <4 x ptr> poison, ptr %dst, i32 0
+  %broadcast.splat = shufflevector <4 x ptr> %insert.elt, <4 x ptr> poison, <4 x i32> zeroinitializer
+  %wide.load = load <4 x i16>, ptr %src, align 2
+  call void @llvm.masked.scatter.v4i16.v4p0(<4 x i16> %wide.load, <4 x ptr> %broadcast.splat, i32 2, <4 x i1> <i1 0, i1 0, i1 1, i1 1>)
   ret void
 }
 
 ;; The pointer in NOT a splat
-define void @negative_scatter_v4i16_no_uniform_vals_no_uniform_ptrs_all_active_mask(<4 x i16*> %inPtr, <4 x i16>* %src) {
+define void @negative_scatter_v4i16_no_uniform_vals_no_uniform_ptrs_all_active_mask(<4 x ptr> %inPtr, ptr %src) {
 ; CHECK-LABEL: @negative_scatter_v4i16_no_uniform_vals_no_uniform_ptrs_all_active_mask(
-; CHECK-NEXT:    [[BROADCAST:%.*]] = shufflevector <4 x i16*> [[INPTR:%.*]], <4 x i16*> poison, <4 x i32> zeroinitializer
-; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i16>, <4 x i16>* [[SRC:%.*]], align 2
-; CHECK-NEXT:    call void @llvm.masked.scatter.v4i16.v4p0i16(<4 x i16> [[WIDE_LOAD]], <4 x i16*> [[BROADCAST]], i32 2, <4 x i1> <i1 true, i1 true, i1 true, i1 true>)
+; CHECK-NEXT:    [[BROADCAST:%.*]] = shufflevector <4 x ptr> [[INPTR:%.*]], <4 x ptr> poison, <4 x i32> zeroinitializer
+; CHECK-NEXT:    [[WIDE_LOAD:%.*]] = load <4 x i16>, ptr [[SRC:%.*]], align 2
+; CHECK-NEXT:    call void @llvm.masked.scatter.v4i16.v4p0(<4 x i16> [[WIDE_LOAD]], <4 x ptr> [[BROADCAST]], i32 2, <4 x i1> <i1 true, i1 true, i1 true, i1 true>)
 ; CHECK-NEXT:    ret void
 ;
-  %broadcast= shufflevector <4 x i16*> %inPtr, <4 x i16*> poison, <4 x i32> zeroinitializer
-  %wide.load = load <4 x i16>, <4 x i16>* %src, align 2
-  call void @llvm.masked.scatter.v4i16.v4p0i16(<4 x i16> %wide.load, <4 x i16*> %broadcast, i32 2, <4 x i1> <i1 1, i1 1, i1 1, i1 1> )
+  %broadcast= shufflevector <4 x ptr> %inPtr, <4 x ptr> poison, <4 x i32> zeroinitializer
+  %wide.load = load <4 x i16>, ptr %src, align 2
+  call void @llvm.masked.scatter.v4i16.v4p0(<4 x i16> %wide.load, <4 x ptr> %broadcast, i32 2, <4 x i1> <i1 1, i1 1, i1 1, i1 1> )
   ret void
 }
 
 
 ; Function Attrs:
-declare void @llvm.masked.scatter.v4i16.v4p0i16(<4 x i16>, <4 x i16*>, i32 immarg, <4 x i1>)
-declare void @llvm.masked.scatter.nxv4i16.nxv4p0i16(<vscale x 4 x i16>, <vscale x 4 x i16*>, i32 immarg, <vscale x 4 x i1>)
+declare void @llvm.masked.scatter.v4i16.v4p0(<4 x i16>, <4 x ptr>, i32 immarg, <4 x i1>)
+declare void @llvm.masked.scatter.nxv4i16.nxv4p0i16(<vscale x 4 x i16>, <vscale x 4 x ptr>, i32 immarg, <vscale x 4 x i1>)
 
 ; Test gathers that can be simplified to scalar load + splat
 
 ;; Splat address and all active mask
-define <vscale x 2 x i64> @gather_nxv2i64_uniform_ptrs_all_active_mask(i64* %src) {
+define <vscale x 2 x i64> @gather_nxv2i64_uniform_ptrs_all_active_mask(ptr %src) {
 ; CHECK-LABEL: @gather_nxv2i64_uniform_ptrs_all_active_mask(
-; CHECK-NEXT:    [[LOAD_SCALAR:%.*]] = load i64, i64* [[SRC:%.*]], align 8
+; CHECK-NEXT:    [[LOAD_SCALAR:%.*]] = load i64, ptr [[SRC:%.*]], align 8
 ; CHECK-NEXT:    [[BROADCAST_SPLATINSERT1:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[LOAD_SCALAR]], i64 0
 ; CHECK-NEXT:    [[BROADCAST_SPLAT2:%.*]] = shufflevector <vscale x 2 x i64> [[BROADCAST_SPLATINSERT1]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
 ; CHECK-NEXT:    ret <vscale x 2 x i64> [[BROADCAST_SPLAT2]]
 ;
-  %broadcast.splatinsert = insertelement <vscale x 2 x i64*> poison, i64 *%src, i32 0
-  %broadcast.splat = shufflevector <vscale x 2 x i64*> %broadcast.splatinsert, <vscale x 2 x i64*> poison, <vscale x 2 x i32> zeroinitializer
-  %res = call <vscale x 2 x i64> @llvm.masked.gather.nxv2i64(<vscale x 2 x i64*> %broadcast.splat, i32 8, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i32 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer), <vscale x 2 x i64> undef)
+  %broadcast.splatinsert = insertelement <vscale x 2 x ptr> poison, ptr %src, i32 0
+  %broadcast.splat = shufflevector <vscale x 2 x ptr> %broadcast.splatinsert, <vscale x 2 x ptr> poison, <vscale x 2 x i32> zeroinitializer
+  %res = call <vscale x 2 x i64> @llvm.masked.gather.nxv2i64(<vscale x 2 x ptr> %broadcast.splat, i32 8, <vscale x 2 x i1> shufflevector (<vscale x 2 x i1> insertelement (<vscale x 2 x i1> poison, i1 true, i32 0), <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer), <vscale x 2 x i64> undef)
   ret <vscale x 2 x i64> %res
 }
 
-define <2 x i64> @gather_v2i64_uniform_ptrs_all_active_mask(i64* %src) {
+define <2 x i64> @gather_v2i64_uniform_ptrs_all_active_mask(ptr %src) {
 ; CHECK-LABEL: @gather_v2i64_uniform_ptrs_all_active_mask(
-; CHECK-NEXT:    [[LOAD_SCALAR:%.*]] = load i64, i64* [[SRC:%.*]], align 8
+; CHECK-NEXT:    [[LOAD_SCALAR:%.*]] = load i64, ptr [[SRC:%.*]], align 8
 ; CHECK-NEXT:    [[BROADCAST_SPLATINSERT1:%.*]] = insertelement <2 x i64> poison, i64 [[LOAD_SCALAR]], i64 0
 ; CHECK-NEXT:    [[BROADCAST_SPLAT2:%.*]] = shufflevector <2 x i64> [[BROADCAST_SPLATINSERT1]], <2 x i64> poison, <2 x i32> zeroinitializer
 ; CHECK-NEXT:    ret <2 x i64> [[BROADCAST_SPLAT2]]
 ;
-  %broadcast.splatinsert = insertelement <2 x i64*> poison, i64 *%src, i32 0
-  %broadcast.splat = shufflevector <2 x i64*> %broadcast.splatinsert, <2 x i64*> poison, <2 x i32> zeroinitializer
-  %res = call <2 x i64> @llvm.masked.gather.v2i64(<2 x i64*> %broadcast.splat, i32 8, <2 x i1> <i1 1, i1 1>, <2 x i64> undef)
+  %broadcast.splatinsert = insertelement <2 x ptr> poison, ptr %src, i32 0
+  %broadcast.splat = shufflevector <2 x ptr> %broadcast.splatinsert, <2 x ptr> poison, <2 x i32> zeroinitializer
+  %res = call <2 x i64> @llvm.masked.gather.v2i64(<2 x ptr> %broadcast.splat, i32 8, <2 x i1> <i1 1, i1 1>, <2 x i64> undef)
   ret <2 x i64> %res
 }
 
 ; Negative gather tests
 
 ;; Vector of pointers is not a splat.
-define <2 x i64> @negative_gather_v2i64_non_uniform_ptrs_all_active_mask(<2 x i64*> %inVal, i64* %src ) {
+define <2 x i64> @negative_gather_v2i64_non_uniform_ptrs_all_active_mask(<2 x ptr> %inVal, ptr %src ) {
 ; CHECK-LABEL: @negative_gather_v2i64_non_uniform_ptrs_all_active_mask(
-; CHECK-NEXT:    [[INSERT_VALUE:%.*]] = insertelement <2 x i64*> [[INVAL:%.*]], i64* [[SRC:%.*]], i64 1
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x i64> @llvm.masked.gather.v2i64.v2p0i64(<2 x i64*> [[INSERT_VALUE]], i32 8, <2 x i1> <i1 true, i1 true>, <2 x i64> undef)
+; CHECK-NEXT:    [[INSERT_VALUE:%.*]] = insertelement <2 x ptr> [[INVAL:%.*]], ptr [[SRC:%.*]], i64 1
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x i64> @llvm.masked.gather.v2i64.v2p0(<2 x ptr> [[INSERT_VALUE]], i32 8, <2 x i1> <i1 true, i1 true>, <2 x i64> undef)
 ; CHECK-NEXT:    ret <2 x i64> [[RES]]
 ;
-  %insert.value = insertelement <2 x i64*> %inVal, i64 *%src, i32 1
-  %res = call <2 x i64> @llvm.masked.gather.v2i64(<2 x i64*> %insert.value, i32 8, <2 x i1><i1 1, i1 1>, <2 x i64> undef)
+  %insert.value = insertelement <2 x ptr> %inVal, ptr %src, i32 1
+  %res = call <2 x i64> @llvm.masked.gather.v2i64(<2 x ptr> %insert.value, i32 8, <2 x i1><i1 1, i1 1>, <2 x i64> undef)
   ret <2 x i64> %res
 }
 
 ;; Unknown mask value
-define <2 x i64> @negative_gather_v2i64_uniform_ptrs_no_all_active_mask(i64* %src, <2 x i1> %mask) {
+define <2 x i64> @negative_gather_v2i64_uniform_ptrs_no_all_active_mask(ptr %src, <2 x i1> %mask) {
 ; CHECK-LABEL: @negative_gather_v2i64_uniform_ptrs_no_all_active_mask(
-; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <2 x i64*> poison, i64* [[SRC:%.*]], i64 0
-; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <2 x i64*> [[BROADCAST_SPLATINSERT]], <2 x i64*> poison, <2 x i32> zeroinitializer
-; CHECK-NEXT:    [[RES:%.*]] = call <2 x i64> @llvm.masked.gather.v2i64.v2p0i64(<2 x i64*> [[BROADCAST_SPLAT]], i32 8, <2 x i1> [[MASK:%.*]], <2 x i64> undef)
+; CHECK-NEXT:    [[BROADCAST_SPLATINSERT:%.*]] = insertelement <2 x ptr> poison, ptr [[SRC:%.*]], i64 0
+; CHECK-NEXT:    [[BROADCAST_SPLAT:%.*]] = shufflevector <2 x ptr> [[BROADCAST_SPLATINSERT]], <2 x ptr> poison, <2 x i32> zeroinitializer
+; CHECK-NEXT:    [[RES:%.*]] = call <2 x i64> @llvm.masked.gather.v2i64.v2p0(<2 x ptr> [[BROADCAST_SPLAT]], i32 8, <2 x i1> [[MASK:%.*]], <2 x i64> undef)
 ; CHECK-NEXT:    ret <2 x i64> [[RES]]
 ;
-  %broadcast.splatinsert = insertelement <2 x i64*> poison, i64 *%src, i32 0
-  %broadcast.splat = shufflevector <2 x i64*> %broadcast.splatinsert, <2 x i64*> poison, <2 x i32> zeroinitializer
-  %res = call <2 x i64> @llvm.masked.gather.v2i64(<2 x i64*> %broadcast.splat, i32 8, <2 x i1> %mask, <2 x i64> undef)
+  %broadcast.splatinsert = insertelement <2 x ptr> poison, ptr %src, i32 0
+  %broadcast.splat = shufflevector <2 x ptr> %broadcast.splatinsert, <2 x ptr> poison, <2 x i32> zeroinitializer
+  %res = call <2 x i64> @llvm.masked.gather.v2i64(<2 x ptr> %broadcast.splat, i32 8, <2 x i1> %mask, <2 x i64> undef)
   ret <2 x i64> %res
 }
 
 ; Function Attrs:
-declare <vscale x 2 x i64> @llvm.masked.gather.nxv2i64(<vscale x 2 x i64*>, i32, <vscale x 2 x i1>, <vscale x 2 x i64>)
-declare <2 x i64> @llvm.masked.gather.v2i64(<2 x i64*>, i32, <2 x i1>, <2 x i64>)
+declare <vscale x 2 x i64> @llvm.masked.gather.nxv2i64(<vscale x 2 x ptr>, i32, <vscale x 2 x i1>, <vscale x 2 x i64>)
+declare <2 x i64> @llvm.masked.gather.v2i64(<2 x ptr>, i32, <2 x i1>, <2 x i64>)
 
index bda401ca3e1b9412a6148d1c33c1f8780f5e741b..c5ff1ef81672ce4bc367810904aef38c79365683 100644 (file)
@@ -3,44 +3,44 @@
 
 @g0 = global <4 x i32> zeroinitializer, align 16
 
-define inreg <4 x i32> @mload1(<4 x i32>* nocapture readonly %a0) #0 {
+define inreg <4 x i32> @mload1(ptr nocapture readonly %a0) #0 {
 ; CHECK-LABEL: @mload1(
 ; CHECK-NEXT:  b0:
-; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <4 x i32>, <4 x i32>* [[A0:%.*]], align 16, !tbaa [[TBAA0:![0-9]+]]
+; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <4 x i32>, ptr [[A0:%.*]], align 16, !tbaa [[TBAA0:![0-9]+]]
 ; CHECK-NEXT:    ret <4 x i32> [[UNMASKEDLOAD]]
 ;
 b0:
-  %v0 = call <4 x i32> @llvm.masked.load.v4i1.p0v4i1(<4 x i32>* %a0, i32 16, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> undef), !tbaa !0
+  %v0 = call <4 x i32> @llvm.masked.load.v4i1.p0(ptr %a0, i32 16, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i32> undef), !tbaa !0
   ret <4 x i32> %v0
 }
 
 define inreg <4 x i32> @mload2() #0 {
 ; CHECK-LABEL: @mload2(
 ; CHECK-NEXT:  b0:
-; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <4 x i32>, <4 x i32>* @g0, align 16, !tbaa [[TBAA0]]
+; CHECK-NEXT:    [[UNMASKEDLOAD:%.*]] = load <4 x i32>, ptr @g0, align 16, !tbaa [[TBAA0]]
 ; CHECK-NEXT:    [[TMP0:%.*]] = insertelement <4 x i32> [[UNMASKEDLOAD]], i32 0, i64 0
 ; CHECK-NEXT:    ret <4 x i32> [[TMP0]]
 ;
 b0:
-  %v0 = call <4 x i32> @llvm.masked.load.v4i1.p0v4i1(<4 x i32>* @g0, i32 16, <4 x i1> <i1 false, i1 true, i1 true, i1 true>, <4 x i32> zeroinitializer), !tbaa !0
+  %v0 = call <4 x i32> @llvm.masked.load.v4i1.p0(ptr @g0, i32 16, <4 x i1> <i1 false, i1 true, i1 true, i1 true>, <4 x i32> zeroinitializer), !tbaa !0
   ret <4 x i32> %v0
 }
 
-define void @mstore(<4 x i32> %a0, <4 x i32>* nocapture readonly %a1) #0 {
+define void @mstore(<4 x i32> %a0, ptr nocapture readonly %a1) #0 {
 ; CHECK-LABEL: @mstore(
 ; CHECK-NEXT:  b0:
-; CHECK-NEXT:    store <4 x i32> [[A0:%.*]], <4 x i32>* [[A1:%.*]], align 16, !tbaa [[TBAA0]]
+; CHECK-NEXT:    store <4 x i32> [[A0:%.*]], ptr [[A1:%.*]], align 16, !tbaa [[TBAA0]]
 ; CHECK-NEXT:    ret void
 ;
 b0:
-  call void @llvm.masked.store.v4i1.p0v4i1(<4 x i32> %a0, <4 x i32>* %a1, i32 16, <4 x i1> <i1 true, i1 true, i1 true, i1 true>), !tbaa !0
+  call void @llvm.masked.store.v4i1.p0(<4 x i32> %a0, ptr %a1, i32 16, <4 x i1> <i1 true, i1 true, i1 true, i1 true>), !tbaa !0
   ret void
 }
 
 attributes #0 = { norecurse nounwind }
 
-declare <4 x i32> @llvm.masked.load.v4i1.p0v4i1(<4 x i32>*, i32, <4 x i1>, <4 x i32>)
-declare void @llvm.masked.store.v4i1.p0v4i1(<4 x i32>, <4 x i32>*, i32, <4 x i1>)
+declare <4 x i32> @llvm.masked.load.v4i1.p0(ptr, i32, <4 x i1>, <4 x i32>)
+declare void @llvm.masked.store.v4i1.p0(<4 x i32>, ptr, i32, <4 x i1>)
 
 !0 = !{!1, !1, i64 0}
 !1 = !{!"omnipotent char", !2, i64 0}
index d64c5bac520bc8bd0440b2a1631e9390758cc54a..ca6e29ec19760cdee371a15c113d65c41abd761d 100644 (file)
@@ -404,14 +404,14 @@ define float @reduce_precision_multi_use_0(float %x, float %y) {
 ; CHECK-LABEL: @reduce_precision_multi_use_0(
 ; CHECK-NEXT:    [[X_EXT:%.*]] = fpext float [[X:%.*]] to double
 ; CHECK-NEXT:    [[Y_EXT:%.*]] = fpext float [[Y:%.*]] to double
-; CHECK-NEXT:    store double [[X_EXT]], double* undef, align 8
+; CHECK-NEXT:    store double [[X_EXT]], ptr undef, align 8
 ; CHECK-NEXT:    [[MAXNUM:%.*]] = call double @llvm.maxnum.f64(double [[X_EXT]], double [[Y_EXT]])
 ; CHECK-NEXT:    [[TRUNC:%.*]] = fptrunc double [[MAXNUM]] to float
 ; CHECK-NEXT:    ret float [[TRUNC]]
 ;
   %x.ext = fpext float %x to double
   %y.ext = fpext float %y to double
-  store double %x.ext, double* undef
+  store double %x.ext, ptr undef
   %maxnum = call double @llvm.maxnum.f64(double %x.ext, double %y.ext)
   %trunc = fptrunc double %maxnum to float
   ret float %trunc
@@ -421,14 +421,14 @@ define float @reduce_precision_multi_use_1(float %x, float %y) {
 ; CHECK-LABEL: @reduce_precision_multi_use_1(
 ; CHECK-NEXT:    [[X_EXT:%.*]] = fpext float [[X:%.*]] to double
 ; CHECK-NEXT:    [[Y_EXT:%.*]] = fpext float [[Y:%.*]] to double
-; CHECK-NEXT:    store double [[Y_EXT]], double* undef, align 8
+; CHECK-NEXT:    store double [[Y_EXT]], ptr undef, align 8
 ; CHECK-NEXT:    [[MAXNUM:%.*]] = call double @llvm.maxnum.f64(double [[X_EXT]], double [[Y_EXT]])
 ; CHECK-NEXT:    [[TRUNC:%.*]] = fptrunc double [[MAXNUM]] to float
 ; CHECK-NEXT:    ret float [[TRUNC]]
 ;
   %x.ext = fpext float %x to double
   %y.ext = fpext float %y to double
-  store double %y.ext, double* undef
+  store double %y.ext, ptr undef
   %maxnum = call double @llvm.maxnum.f64(double %x.ext, double %y.ext)
   %trunc = fptrunc double %maxnum to float
   ret float %trunc
index 15ac31b676b1a60ba27a8293acb778557dd0bdf6..7c09b91dc6cbd90417cc48aa73a0401c56b76a3f 100644 (file)
@@ -1,22 +1,22 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine  -S < %s | FileCheck %s
 
-declare i32 @memcmp(i8 addrspace(1)* nocapture, i8 addrspace(1)* nocapture, i64)
+declare i32 @memcmp(ptr addrspace(1) nocapture, ptr addrspace(1) nocapture, i64)
 
-define i32 @memcmp_const_size_update_deref(i8 addrspace(1)* nocapture readonly %d, i8 addrspace(1)* nocapture readonly %s) {
+define i32 @memcmp_const_size_update_deref(ptr addrspace(1) nocapture readonly %d, ptr addrspace(1) nocapture readonly %s) {
 ; CHECK-LABEL: @memcmp_const_size_update_deref(
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8 addrspace(1)* noundef dereferenceable(16) dereferenceable_or_null(40) [[D:%.*]], i8 addrspace(1)* noundef dereferenceable(16) [[S:%.*]], i64 16)
+; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(ptr addrspace(1) noundef dereferenceable(16) dereferenceable_or_null(40) [[D:%.*]], ptr addrspace(1) noundef dereferenceable(16) [[S:%.*]], i64 16)
 ; CHECK-NEXT:    ret i32 [[CALL]]
 ;
-  %call = tail call i32 @memcmp(i8 addrspace(1)* dereferenceable_or_null(40) %d, i8 addrspace(1)* %s, i64 16)
+  %call = tail call i32 @memcmp(ptr addrspace(1) dereferenceable_or_null(40) %d, ptr addrspace(1) %s, i64 16)
   ret i32 %call
 }
 
-define i32 @memcmp_nonconst_size_nonnnull(i8 addrspace(1)* nocapture readonly %d, i8 addrspace(1)* nocapture readonly %s, i64 %n) {
+define i32 @memcmp_nonconst_size_nonnnull(ptr addrspace(1) nocapture readonly %d, ptr addrspace(1) nocapture readonly %s, i64 %n) {
 ; CHECK-LABEL: @memcmp_nonconst_size_nonnnull(
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8 addrspace(1)* nonnull dereferenceable_or_null(40) [[D:%.*]], i8 addrspace(1)* nonnull [[S:%.*]], i64 [[N:%.*]])
+; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(ptr addrspace(1) nonnull dereferenceable_or_null(40) [[D:%.*]], ptr addrspace(1) nonnull [[S:%.*]], i64 [[N:%.*]])
 ; CHECK-NEXT:    ret i32 [[CALL]]
 ;
-  %call = tail call i32 @memcmp(i8 addrspace(1)* nonnull dereferenceable_or_null(40) %d, i8 addrspace(1)* nonnull %s, i64 %n)
+  %call = tail call i32 @memcmp(ptr addrspace(1) nonnull dereferenceable_or_null(40) %d, ptr addrspace(1) nonnull %s, i64 %n)
   ret i32 %call
 }
index 8d11b40235ca397d93cf9f9d538ba873c1e5d46d..ac06b49c61a81328375922aada2c9bfdb351f4fb 100644 (file)
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine  -S < %s | FileCheck %s
 
-declare i32 @memcmp(i8* nocapture, i8* nocapture, i64)
-declare i8* @memcpy(i8* nocapture, i8* nocapture, i64)
-declare i8* @memmove(i8* nocapture, i8* nocapture, i64)
-declare i8* @memset(i8* nocapture, i32, i64)
-declare i8* @memchr(i8* nocapture, i32, i64)
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i1)
-declare void @llvm.memmove.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i1)
-declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1)
-
-define i32 @memcmp_const_size_set_deref(i8* nocapture readonly %d, i8* nocapture readonly %s) {
+declare i32 @memcmp(ptr nocapture, ptr nocapture, i64)
+declare ptr @memcpy(ptr nocapture, ptr nocapture, i64)
+declare ptr @memmove(ptr nocapture, ptr nocapture, i64)
+declare ptr @memset(ptr nocapture, i32, i64)
+declare ptr @memchr(ptr nocapture, i32, i64)
+declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture, i64, i1)
+declare void @llvm.memmove.p0.p0.i64(ptr nocapture, ptr nocapture, i64, i1)
+declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1)
+
+define i32 @memcmp_const_size_set_deref(ptr nocapture readonly %d, ptr nocapture readonly %s) {
 ; CHECK-LABEL: @memcmp_const_size_set_deref(
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* noundef nonnull dereferenceable(16) [[D:%.*]], i8* noundef nonnull dereferenceable(16) [[S:%.*]], i64 16)
+; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(ptr noundef nonnull dereferenceable(16) [[D:%.*]], ptr noundef nonnull dereferenceable(16) [[S:%.*]], i64 16)
 ; CHECK-NEXT:    ret i32 [[CALL]]
 ;
-  %call = tail call i32 @memcmp(i8* %d, i8* %s, i64 16)
+  %call = tail call i32 @memcmp(ptr %d, ptr %s, i64 16)
   ret i32 %call
 }
 
-define i32 @memcmp_const_size_update_deref(i8* nocapture readonly %d, i8* nocapture readonly %s) {
+define i32 @memcmp_const_size_update_deref(ptr nocapture readonly %d, ptr nocapture readonly %s) {
 ; CHECK-LABEL: @memcmp_const_size_update_deref(
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* noundef nonnull dereferenceable(16) [[D:%.*]], i8* noundef nonnull dereferenceable(16) [[S:%.*]], i64 16)
+; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(ptr noundef nonnull dereferenceable(16) [[D:%.*]], ptr noundef nonnull dereferenceable(16) [[S:%.*]], i64 16)
 ; CHECK-NEXT:    ret i32 [[CALL]]
 ;
-  %call = tail call i32 @memcmp(i8* dereferenceable(4) %d, i8* dereferenceable(8) %s, i64 16)
+  %call = tail call i32 @memcmp(ptr dereferenceable(4) %d, ptr dereferenceable(8) %s, i64 16)
   ret i32 %call
 }
 
-define i32 @memcmp_const_size_update_deref2(i8* nocapture readonly %d, i8* nocapture readonly %s) {
+define i32 @memcmp_const_size_update_deref2(ptr nocapture readonly %d, ptr nocapture readonly %s) {
 ; CHECK-LABEL: @memcmp_const_size_update_deref2(
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* noundef nonnull dereferenceable(16) [[D:%.*]], i8* noundef nonnull dereferenceable(16) [[S:%.*]], i64 16)
+; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(ptr noundef nonnull dereferenceable(16) [[D:%.*]], ptr noundef nonnull dereferenceable(16) [[S:%.*]], i64 16)
 ; CHECK-NEXT:    ret i32 [[CALL]]
 ;
-  %call = tail call i32 @memcmp(i8* %d, i8* dereferenceable_or_null(8) %s, i64 16)
+  %call = tail call i32 @memcmp(ptr %d, ptr dereferenceable_or_null(8) %s, i64 16)
   ret i32 %call
 }
 
-define i32 @memcmp_const_size_update_deref3(i8* nocapture readonly %d, i8* nocapture readonly %s) {
+define i32 @memcmp_const_size_update_deref3(ptr nocapture readonly %d, ptr nocapture readonly %s) {
 ; CHECK-LABEL: @memcmp_const_size_update_deref3(
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* noundef nonnull dereferenceable(40) [[D:%.*]], i8* noundef nonnull dereferenceable(16) [[S:%.*]], i64 16)
+; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(ptr noundef nonnull dereferenceable(40) [[D:%.*]], ptr noundef nonnull dereferenceable(16) [[S:%.*]], i64 16)
 ; CHECK-NEXT:    ret i32 [[CALL]]
 ;
-  %call = tail call i32 @memcmp(i8* dereferenceable(40) %d, i8* %s, i64 16)
+  %call = tail call i32 @memcmp(ptr dereferenceable(40) %d, ptr %s, i64 16)
   ret i32 %call
 }
 
-define i32 @memcmp_const_size_update_deref4(i8* nocapture readonly %d, i8* nocapture readonly %s) {
+define i32 @memcmp_const_size_update_deref4(ptr nocapture readonly %d, ptr nocapture readonly %s) {
 ; CHECK-LABEL: @memcmp_const_size_update_deref4(
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* noundef nonnull dereferenceable(16) [[D:%.*]], i8* noundef nonnull dereferenceable(16) [[S:%.*]], i64 16)
+; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(ptr noundef nonnull dereferenceable(16) [[D:%.*]], ptr noundef nonnull dereferenceable(16) [[S:%.*]], i64 16)
 ; CHECK-NEXT:    ret i32 [[CALL]]
 ;
-  %call = tail call i32 @memcmp(i8* dereferenceable_or_null(16) %d, i8* %s, i64 16)
+  %call = tail call i32 @memcmp(ptr dereferenceable_or_null(16) %d, ptr %s, i64 16)
   ret i32 %call
 }
 
-define i32 @memcmp_const_size_update_deref5(i8* nocapture readonly %d, i8* nocapture readonly %s) {
+define i32 @memcmp_const_size_update_deref5(ptr nocapture readonly %d, ptr nocapture readonly %s) {
 ; CHECK-LABEL: @memcmp_const_size_update_deref5(
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* noundef nonnull dereferenceable(40) [[D:%.*]], i8* noundef nonnull dereferenceable(16) [[S:%.*]], i64 16)
+; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(ptr noundef nonnull dereferenceable(40) [[D:%.*]], ptr noundef nonnull dereferenceable(16) [[S:%.*]], i64 16)
 ; CHECK-NEXT:    ret i32 [[CALL]]
 ;
-  %call = tail call i32 @memcmp(i8* dereferenceable_or_null(40) %d, i8* %s, i64 16)
+  %call = tail call i32 @memcmp(ptr dereferenceable_or_null(40) %d, ptr %s, i64 16)
   ret i32 %call
 }
 
-define i32 @memcmp_const_size_update_deref6(i8* nocapture readonly %d, i8* nocapture readonly %s) null_pointer_is_valid {
+define i32 @memcmp_const_size_update_deref6(ptr nocapture readonly %d, ptr nocapture readonly %s) null_pointer_is_valid {
 ; CHECK-LABEL: @memcmp_const_size_update_deref6(
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* noundef dereferenceable(16) dereferenceable_or_null(40) [[D:%.*]], i8* noundef dereferenceable(16) [[S:%.*]], i64 16)
+; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(ptr noundef dereferenceable(16) dereferenceable_or_null(40) [[D:%.*]], ptr noundef dereferenceable(16) [[S:%.*]], i64 16)
 ; CHECK-NEXT:    ret i32 [[CALL]]
 ;
-  %call = tail call i32 @memcmp(i8* dereferenceable_or_null(40) %d, i8* %s, i64 16)
+  %call = tail call i32 @memcmp(ptr dereferenceable_or_null(40) %d, ptr %s, i64 16)
   ret i32 %call
 }
 
-define i32 @memcmp_const_size_update_deref7(i8* nocapture readonly %d, i8* nocapture readonly %s) null_pointer_is_valid {
+define i32 @memcmp_const_size_update_deref7(ptr nocapture readonly %d, ptr nocapture readonly %s) null_pointer_is_valid {
 ; CHECK-LABEL: @memcmp_const_size_update_deref7(
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* noundef nonnull dereferenceable(40) [[D:%.*]], i8* noundef dereferenceable(16) [[S:%.*]], i64 16)
+; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(ptr noundef nonnull dereferenceable(40) [[D:%.*]], ptr noundef dereferenceable(16) [[S:%.*]], i64 16)
 ; CHECK-NEXT:    ret i32 [[CALL]]
 ;
-  %call = tail call i32 @memcmp(i8* nonnull dereferenceable_or_null(40) %d, i8* %s, i64 16)
+  %call = tail call i32 @memcmp(ptr nonnull dereferenceable_or_null(40) %d, ptr %s, i64 16)
   ret i32 %call
 }
 
-define i32 @memcmp_const_size_no_update_deref(i8* nocapture readonly %d, i8* nocapture readonly %s) {
+define i32 @memcmp_const_size_no_update_deref(ptr nocapture readonly %d, ptr nocapture readonly %s) {
 ; CHECK-LABEL: @memcmp_const_size_no_update_deref(
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* noundef nonnull dereferenceable(40) [[D:%.*]], i8* noundef nonnull dereferenceable(20) [[S:%.*]], i64 16)
+; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(ptr noundef nonnull dereferenceable(40) [[D:%.*]], ptr noundef nonnull dereferenceable(20) [[S:%.*]], i64 16)
 ; CHECK-NEXT:    ret i32 [[CALL]]
 ;
-  %call = tail call i32 @memcmp(i8* dereferenceable(40) %d, i8* dereferenceable(20) %s, i64 16)
+  %call = tail call i32 @memcmp(ptr dereferenceable(40) %d, ptr dereferenceable(20) %s, i64 16)
   ret i32 %call
 }
 
-define i32 @memcmp_nonconst_size(i8* nocapture readonly %d, i8* nocapture readonly %s, i64 %n) {
+define i32 @memcmp_nonconst_size(ptr nocapture readonly %d, ptr nocapture readonly %s, i64 %n) {
 ; CHECK-LABEL: @memcmp_nonconst_size(
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* [[D:%.*]], i8* [[S:%.*]], i64 [[N:%.*]])
+; CHECK-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(ptr [[D:%.*]], ptr [[S:%.*]], i64 [[N:%.*]])
 ; CHECK-NEXT:    ret i32 [[CALL]]
 ;
-  %call = tail call i32 @memcmp(i8* %d, i8* %s, i64 %n)
+  %call = tail call i32 @memcmp(ptr %d, ptr %s, i64 %n)
   ret i32 %call
 }
 
-define i8* @memcpy_const_size_set_deref(i8* nocapture readonly %d, i8* nocapture readonly %s) {
+define ptr @memcpy_const_size_set_deref(ptr nocapture readonly %d, ptr nocapture readonly %s) {
 ; CHECK-LABEL: @memcpy_const_size_set_deref(
-; CHECK-NEXT:    tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 1 dereferenceable(64) [[D:%.*]], i8* noundef nonnull align 1 dereferenceable(64) [[S:%.*]], i64 64, i1 false)
-; CHECK-NEXT:    ret i8* [[D]]
+; CHECK-NEXT:    tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) [[D:%.*]], ptr noundef nonnull align 1 dereferenceable(64) [[S:%.*]], i64 64, i1 false)
+; CHECK-NEXT:    ret ptr [[D]]
 ;
-  %call = tail call i8* @memcpy(i8* %d, i8* %s, i64 64)
-  ret i8* %call
+  %call = tail call ptr @memcpy(ptr %d, ptr %s, i64 64)
+  ret ptr %call
 }
 
-define i8* @memmove_const_size_set_deref(i8* nocapture readonly %d, i8* nocapture readonly %s) {
+define ptr @memmove_const_size_set_deref(ptr nocapture readonly %d, ptr nocapture readonly %s) {
 ; CHECK-LABEL: @memmove_const_size_set_deref(
-; CHECK-NEXT:    tail call void @llvm.memmove.p0i8.p0i8.i64(i8* noundef nonnull align 1 dereferenceable(64) [[D:%.*]], i8* noundef nonnull align 1 dereferenceable(64) [[S:%.*]], i64 64, i1 false)
-; CHECK-NEXT:    ret i8* [[D]]
+; CHECK-NEXT:    tail call void @llvm.memmove.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) [[D:%.*]], ptr noundef nonnull align 1 dereferenceable(64) [[S:%.*]], i64 64, i1 false)
+; CHECK-NEXT:    ret ptr [[D]]
 ;
-  %call = tail call i8* @memmove(i8* %d, i8* %s, i64 64)
-  ret i8* %call
+  %call = tail call ptr @memmove(ptr %d, ptr %s, i64 64)
+  ret ptr %call
 }
 
-define i8* @memset_const_size_set_deref(i8* nocapture readonly %s, i32 %c) {
+define ptr @memset_const_size_set_deref(ptr nocapture readonly %s, i32 %c) {
 ; CHECK-LABEL: @memset_const_size_set_deref(
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i32 [[C:%.*]] to i8
-; CHECK-NEXT:    tail call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 1 dereferenceable(64) [[S:%.*]], i8 [[TMP1]], i64 64, i1 false)
-; CHECK-NEXT:    ret i8* [[S]]
+; CHECK-NEXT:    tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(64) [[S:%.*]], i8 [[TMP1]], i64 64, i1 false)
+; CHECK-NEXT:    ret ptr [[S]]
 ;
-  %call = tail call i8* @memset(i8* %s, i32 %c, i64 64)
-  ret i8* %call
+  %call = tail call ptr @memset(ptr %s, i32 %c, i64 64)
+  ret ptr %call
 }
 
-define i8* @memchr_const_size_set_deref(i8* nocapture readonly %s, i32 %c) {
+define ptr @memchr_const_size_set_deref(ptr nocapture readonly %s, i32 %c) {
 ; CHECK-LABEL: @memchr_const_size_set_deref(
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i8* @memchr(i8* noundef nonnull dereferenceable(1) [[S:%.*]], i32 [[C:%.*]], i64 64)
-; CHECK-NEXT:    ret i8* [[CALL]]
+; CHECK-NEXT:    [[CALL:%.*]] = tail call ptr @memchr(ptr noundef nonnull dereferenceable(1) [[S:%.*]], i32 [[C:%.*]], i64 64)
+; CHECK-NEXT:    ret ptr [[CALL]]
 ;
-  %call = tail call i8* @memchr(i8* %s, i32 %c, i64 64)
-  ret i8* %call
+  %call = tail call ptr @memchr(ptr %s, i32 %c, i64 64)
+  ret ptr %call
 }
 
-define i8* @llvm_memcpy_const_size_set_deref(i8* nocapture readonly %d, i8* nocapture readonly %s) {
+define ptr @llvm_memcpy_const_size_set_deref(ptr nocapture readonly %d, ptr nocapture readonly %s) {
 ; CHECK-LABEL: @llvm_memcpy_const_size_set_deref(
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 1 dereferenceable(16) [[D:%.*]], i8* noundef nonnull align 1 dereferenceable(16) [[S:%.*]], i64 16, i1 false)
-; CHECK-NEXT:    ret i8* [[D]]
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(16) [[D:%.*]], ptr noundef nonnull align 1 dereferenceable(16) [[S:%.*]], i64 16, i1 false)
+; CHECK-NEXT:    ret ptr [[D]]
 ;
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 %d, i8* align 1 %s, i64 16, i1 false)
-  ret i8* %d
+  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %d, ptr align 1 %s, i64 16, i1 false)
+  ret ptr %d
 }
 
-define i8* @llvm_memmove_const_size_set_deref(i8* nocapture readonly %d, i8* nocapture readonly %s) {
+define ptr @llvm_memmove_const_size_set_deref(ptr nocapture readonly %d, ptr nocapture readonly %s) {
 ; CHECK-LABEL: @llvm_memmove_const_size_set_deref(
-; CHECK-NEXT:    call void @llvm.memmove.p0i8.p0i8.i64(i8* noundef nonnull align 1 dereferenceable(16) [[D:%.*]], i8* noundef nonnull align 1 dereferenceable(16) [[S:%.*]], i64 16, i1 false)
-; CHECK-NEXT:    ret i8* [[D]]
+; CHECK-NEXT:    call void @llvm.memmove.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(16) [[D:%.*]], ptr noundef nonnull align 1 dereferenceable(16) [[S:%.*]], i64 16, i1 false)
+; CHECK-NEXT:    ret ptr [[D]]
 ;
-  call void @llvm.memmove.p0i8.p0i8.i64(i8* align 1 %d, i8* align 1 %s, i64 16, i1 false)
-  ret i8* %d
+  call void @llvm.memmove.p0.p0.i64(ptr align 1 %d, ptr align 1 %s, i64 16, i1 false)
+  ret ptr %d
 }
-define i8* @llvm_memset_const_size_set_deref(i8* nocapture readonly %s, i8 %c) {
+define ptr @llvm_memset_const_size_set_deref(ptr nocapture readonly %s, i8 %c) {
 ; CHECK-LABEL: @llvm_memset_const_size_set_deref(
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 1 dereferenceable(16) [[S:%.*]], i8 [[C:%.*]], i64 16, i1 false)
-; CHECK-NEXT:    ret i8* [[S]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(16) [[S:%.*]], i8 [[C:%.*]], i64 16, i1 false)
+; CHECK-NEXT:    ret ptr [[S]]
 ;
-  call void @llvm.memset.p0i8.i64(i8* align 1 %s, i8 %c, i64 16, i1 false)
-  ret i8* %s
+  call void @llvm.memset.p0.i64(ptr align 1 %s, i8 %c, i64 16, i1 false)
+  ret ptr %s
 }
index 19ea426fc2bc96a445346de7e6441e23e617b2c6..264f4dbc3731393b5aa300865f2f23eef3617bbd 100644 (file)
@@ -5,31 +5,31 @@ target triple = "powerpc64-unknown-linux-gnu"
 
 @f.a = private unnamed_addr constant [1 x i32] [i32 12], align 4
 @f.b = private unnamed_addr constant [1 x i32] [i32 55], align 4
-@f.c = linkonce unnamed_addr alias [1 x i32], [1 x i32]* @f.b
+@f.c = linkonce unnamed_addr alias [1 x i32], ptr @f.b
 
 define signext i32 @test1(i32 signext %x) #0 {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:    ret i32 12
 ;
   %idxprom = sext i32 %x to i64
-  %arrayidx = getelementptr inbounds [1 x i32], [1 x i32]* @f.a, i64 0, i64 %idxprom
-  %r = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds [1 x i32], ptr @f.a, i64 0, i64 %idxprom
+  %r = load i32, ptr %arrayidx, align 4
   ret i32 %r
 }
 
-declare void @foo(i64* %p)
+declare void @foo(ptr %p)
 define void @test2(i32 signext %x, i64 %v) #0 {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:    [[P:%.*]] = alloca i64, align 8
-; CHECK-NEXT:    store i64 [[V:%.*]], i64* [[P]], align 8
-; CHECK-NEXT:    call void @foo(i64* nonnull [[P]]) #1
+; CHECK-NEXT:    store i64 [[V:%.*]], ptr [[P]], align 8
+; CHECK-NEXT:    call void @foo(ptr nonnull [[P]]) #1
 ; CHECK-NEXT:    ret void
 ;
   %p = alloca i64
   %idxprom = sext i32 %x to i64
-  %arrayidx = getelementptr inbounds i64, i64* %p, i64 %idxprom
-  store i64 %v, i64* %arrayidx
-  call void @foo(i64* %p)
+  %arrayidx = getelementptr inbounds i64, ptr %p, i64 %idxprom
+  store i64 %v, ptr %arrayidx
+  call void @foo(ptr %p)
   ret void
 }
 
@@ -39,22 +39,22 @@ define signext i32 @test3(i32 signext %x, i1 %y) #0 {
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %idxprom = sext i32 %x to i64
-  %p = select i1 %y, [1 x i32]* @f.a, [1 x i32]* @f.b
-  %arrayidx = getelementptr inbounds [1 x i32], [1 x i32]* %p, i64 0, i64 %idxprom
-  %r = load i32, i32* %arrayidx, align 4
+  %p = select i1 %y, ptr @f.a, ptr @f.b
+  %arrayidx = getelementptr inbounds [1 x i32], ptr %p, i64 0, i64 %idxprom
+  %r = load i32, ptr %arrayidx, align 4
   ret i32 %r
 }
 
 define signext i32 @test4(i32 signext %x, i1 %y) #0 {
 ; CHECK-LABEL: @test4(
 ; CHECK-NEXT:    [[IDXPROM:%.*]] = sext i32 [[X:%.*]] to i64
-; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [1 x i32], [1 x i32]* @f.c, i64 0, i64 [[IDXPROM]]
-; CHECK-NEXT:    [[R:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds [1 x i32], ptr @f.c, i64 0, i64 [[IDXPROM]]
+; CHECK-NEXT:    [[R:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %idxprom = sext i32 %x to i64
-  %arrayidx = getelementptr inbounds [1 x i32], [1 x i32]* @f.c, i64 0, i64 %idxprom
-  %r = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds [1 x i32], ptr @f.c, i64 0, i64 %idxprom
+  %r = load i32, ptr %arrayidx, align 4
   ret i32 %r
 }
 
index 838b06b3d1476f921ea34cc6cb70a0ed4f5d6ec2..fda74fde58c698c9296624dec9e322183a1fcdac 100644 (file)
@@ -13,8 +13,8 @@
 ; }
 
 ; CHECK: for.body:
-; CHECK:  %{{.*}} = load i16, i16* %{{.*}}, align 1, !llvm.access.group !1
-; CHECK:  store i16 %{{.*}}, i16* %{{.*}}, align 1, !llvm.access.group !1
+; CHECK:  %{{.*}} = load i16, ptr %{{.*}}, align 1, !llvm.access.group !1
+; CHECK:  store i16 %{{.*}}, ptr %{{.*}}, align 1, !llvm.access.group !1
 
 
 ; ModuleID = '<stdin>'
@@ -23,7 +23,7 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
 ; Function Attrs: nounwind uwtable
-define void @_Z4testPcl(i8* %out, i64 %size) #0 {
+define void @_Z4testPcl(ptr %out, i64 %size) #0 {
 entry:
   br label %for.cond
 
@@ -33,10 +33,10 @@ for.cond:                                         ; preds = %for.inc, %entry
   br i1 %cmp, label %for.body, label %for.end
 
 for.body:                                         ; preds = %for.cond
-  %arrayidx = getelementptr inbounds i8, i8* %out, i64 %i.0
+  %arrayidx = getelementptr inbounds i8, ptr %out, i64 %i.0
   %add = add nsw i64 %i.0, %size
-  %arrayidx1 = getelementptr inbounds i8, i8* %out, i64 %add
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %arrayidx, i8* %arrayidx1, i64 2, i1 false), !llvm.access.group !4
+  %arrayidx1 = getelementptr inbounds i8, ptr %out, i64 %add
+  call void @llvm.memcpy.p0.p0.i64(ptr %arrayidx, ptr %arrayidx1, i64 2, i1 false), !llvm.access.group !4
   br label %for.inc
 
 for.inc:                                          ; preds = %for.body
@@ -48,7 +48,7 @@ for.end:                                          ; preds = %for.cond
 }
 
 ; Function Attrs: argmemonly nounwind
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #1
+declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1) #1
 
 attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
 attributes #1 = { argmemonly nounwind }
index 9d46e5159107bb463d67bc5264ff9a804b9e53e2..e96508d386f8f3d7264ca2ffa2013f074d1090c5 100644 (file)
@@ -5,7 +5,7 @@
 ; in equality expressions don't cause trouble and either are folded when
 ; they might be valid or not when they're provably undefined.
 
-declare i8* @memchr(i8*, i32, i64)
+declare ptr @memchr(ptr, i32, i64)
 
 
 @a5 = constant [5 x i8] c"12345"
@@ -20,10 +20,10 @@ define i1 @call_memchr_ap5_c_1_eq_a(i32 %c, i64 %n) {
 ; CHECK-LABEL: @call_memchr_ap5_c_1_eq_a(
 ; CHECK-NEXT:    ret i1
 ;
-  %pap5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %qap5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 1, i32 0
-  %q = call i8* @memchr(i8* %pap5, i32 %c, i64 1)
-  %cmp = icmp eq i8* %q, %qap5
+  %pap5 = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %qap5 = getelementptr [5 x i8], ptr @a5, i32 1, i32 0
+  %q = call ptr @memchr(ptr %pap5, i32 %c, i64 1)
+  %cmp = icmp eq ptr %q, %qap5
   ret i1 %cmp
 }
 
@@ -34,10 +34,10 @@ define i1 @call_memchr_ap5_c_5_eq_a(i32 %c, i64 %n) {
 ; CHECK-LABEL: @call_memchr_ap5_c_5_eq_a(
 ; CHECK-NEXT:    ret i1
 ;
-  %pap5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %qap5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 1, i32 0
-  %q = call i8* @memchr(i8* %pap5, i32 %c, i64 5)
-  %cmp = icmp eq i8* %q, %qap5
+  %pap5 = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %qap5 = getelementptr [5 x i8], ptr @a5, i32 1, i32 0
+  %q = call ptr @memchr(ptr %pap5, i32 %c, i64 5)
+  %cmp = icmp eq ptr %q, %qap5
   ret i1 %cmp
 }
 
@@ -48,10 +48,9 @@ define i1 @fold_memchr_ap5_c_n_eq_a(i32 %c, i64 %n) {
 ; CHECK-LABEL: @fold_memchr_ap5_c_n_eq_a(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %pa = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 0
-  %pap5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %q = call i8* @memchr(i8* %pap5, i32 %c, i64 %n)
-  %cmp = icmp eq i8* %q, %pa
+  %pap5 = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %q = call ptr @memchr(ptr %pap5, i32 %c, i64 %n)
+  %cmp = icmp eq ptr %q, @a5
   ret i1 %cmp
 }
 
@@ -63,9 +62,9 @@ define i1 @fold_memchr_ap5_c_n_eqz(i32 %c, i64 %n) {
 ; CHECK-LABEL: @fold_memchr_ap5_c_n_eqz(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %p = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %q = call i8* @memchr(i8* %p, i32 %c, i64 %n)
-  %cmp = icmp eq i8* %q, null
+  %p = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %q = call ptr @memchr(ptr %p, i32 %c, i64 %n)
+  %cmp = icmp eq ptr %q, null
   ret i1 %cmp
 }
 
@@ -77,8 +76,8 @@ define i1 @fold_memchr_a_nul_n_eqz(i64 %n) {
 ; CHECK-LABEL: @fold_memchr_a_nul_n_eqz(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %p = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %q = call i8* @memchr(i8* %p, i32 0, i64 %n)
-  %cmp = icmp eq i8* %q, null
+  %p = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %q = call ptr @memchr(ptr %p, i32 0, i64 %n)
+  %cmp = icmp eq ptr %q, null
   ret i1 %cmp
 }
index e434b10d8c5878354b44fc863a9aa27dfbc88363..c316f89a0caca9b08aae059dda0228364c946292 100644 (file)
@@ -4,7 +4,7 @@
 ; Verify that the result of memchr calls used in equality expressions
 ; with either the first argument or null are optimally folded.
 
-declare i8* @memchr(i8*, i32, i64)
+declare ptr @memchr(ptr, i32, i64)
 
 
 @a5 = constant [5 x i8] c"12345"
@@ -17,9 +17,8 @@ define i1 @fold_memchr_a_c_5_eq_a(i32 %c) {
 ; CHECK-NEXT:    [[CHAR0CMP:%.*]] = icmp eq i8 [[TMP1]], 49
 ; CHECK-NEXT:    ret i1 [[CHAR0CMP]]
 ;
-  %p = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 0
-  %q = call i8* @memchr(i8* %p, i32 %c, i64 5)
-  %cmp = icmp eq i8* %q, %p
+  %q = call ptr @memchr(ptr @a5, i32 %c, i64 5)
+  %cmp = icmp eq ptr %q, @a5
   ret i1 %cmp
 }
 
@@ -36,9 +35,8 @@ define i1 @fold_memchr_a_c_n_eq_a(i32 %c, i64 %n) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = select i1 [[TMP2]], i1 [[CHAR0CMP]], i1 false
 ; CHECK-NEXT:    ret i1 [[TMP3]]
 ;
-  %p = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 0
-  %q = call i8* @memchr(i8* %p, i32 %c, i64 %n)
-  %cmp = icmp eq i8* %q, %p
+  %q = call ptr @memchr(ptr @a5, i32 %c, i64 %n)
+  %cmp = icmp eq ptr %q, @a5
   ret i1 %cmp
 }
 
@@ -47,60 +45,60 @@ define i1 @fold_memchr_a_c_n_eq_a(i32 %c, i64 %n) {
 
 define i1 @call_memchr_api_c_n_eq_a(i64 %i, i32 %c, i64 %n) {
 ; CHECK-LABEL: @call_memchr_api_c_n_eq_a(
-; CHECK-NEXT:    [[P:%.*]] = getelementptr [5 x i8], [5 x i8]* @a5, i64 0, i64 [[I:%.*]]
-; CHECK-NEXT:    [[Q:%.*]] = call i8* @memchr(i8* [[P]], i32 [[C:%.*]], i64 [[N:%.*]])
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8* [[Q]], [[P]]
+; CHECK-NEXT:    [[P:%.*]] = getelementptr [5 x i8], ptr @a5, i64 0, i64 [[I:%.*]]
+; CHECK-NEXT:    [[Q:%.*]] = call ptr @memchr(ptr [[P]], i32 [[C:%.*]], i64 [[N:%.*]])
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[Q]], [[P]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %p = getelementptr [5 x i8], [5 x i8]* @a5, i64 0, i64 %i
-  %q = call i8* @memchr(i8* %p, i32 %c, i64 %n)
-  %cmp = icmp eq i8* %q, %p
+  %p = getelementptr [5 x i8], ptr @a5, i64 0, i64 %i
+  %q = call ptr @memchr(ptr %p, i32 %c, i64 %n)
+  %cmp = icmp eq ptr %q, %p
   ret i1 %cmp
 }
 
 
 ; Fold memchr(s, c, 15) == s to *s == c.
 
-define i1 @fold_memchr_s_c_15_eq_s(i8* %s, i32 %c) {
+define i1 @fold_memchr_s_c_15_eq_s(ptr %s, i32 %c) {
 ; CHECK-LABEL: @fold_memchr_s_c_15_eq_s(
-; CHECK-NEXT:    [[TMP1:%.*]] = load i8, i8* [[S:%.*]], align 1
+; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[S:%.*]], align 1
 ; CHECK-NEXT:    [[TMP2:%.*]] = trunc i32 [[C:%.*]] to i8
 ; CHECK-NEXT:    [[CHAR0CMP:%.*]] = icmp eq i8 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i1 [[CHAR0CMP]]
 ;
-  %p = call i8* @memchr(i8* %s, i32 %c, i64 15)
-  %cmp = icmp eq i8* %p, %s
+  %p = call ptr @memchr(ptr %s, i32 %c, i64 15)
+  %cmp = icmp eq ptr %p, %s
   ret i1 %cmp
 }
 
 
 ; Fold memchr(s, c, 17) != s to *s != c.
 
-define i1 @fold_memchr_s_c_17_neq_s(i8* %s, i32 %c) {
+define i1 @fold_memchr_s_c_17_neq_s(ptr %s, i32 %c) {
 ; CHECK-LABEL: @fold_memchr_s_c_17_neq_s(
-; CHECK-NEXT:    [[TMP1:%.*]] = load i8, i8* [[S:%.*]], align 1
+; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[S:%.*]], align 1
 ; CHECK-NEXT:    [[TMP2:%.*]] = trunc i32 [[C:%.*]] to i8
 ; CHECK-NEXT:    [[CHAR0CMP:%.*]] = icmp ne i8 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i1 [[CHAR0CMP]]
 ;
-  %p = call i8* @memchr(i8* %s, i32 %c, i64 17)
-  %cmp = icmp ne i8* %p, %s
+  %p = call ptr @memchr(ptr %s, i32 %c, i64 17)
+  %cmp = icmp ne ptr %p, %s
   ret i1 %cmp
 }
 
 
 ; Fold memchr(s, c, n) == s to *s == c for nonzero n.
 
-define i1 @fold_memchr_s_c_nz_eq_s(i8* %s, i32 %c, i64 %n) {
+define i1 @fold_memchr_s_c_nz_eq_s(ptr %s, i32 %c, i64 %n) {
 ; CHECK-LABEL: @fold_memchr_s_c_nz_eq_s(
-; CHECK-NEXT:    [[TMP1:%.*]] = load i8, i8* [[S:%.*]], align 1
+; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[S:%.*]], align 1
 ; CHECK-NEXT:    [[TMP2:%.*]] = trunc i32 [[C:%.*]] to i8
 ; CHECK-NEXT:    [[CHAR0CMP:%.*]] = icmp eq i8 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i1 [[CHAR0CMP]]
 ;
   %nz = or i64 %n, 1
-  %p = call i8* @memchr(i8* %s, i32 %c, i64 %nz)
-  %cmp = icmp eq i8* %p, %s
+  %p = call ptr @memchr(ptr %s, i32 %c, i64 %nz)
+  %cmp = icmp eq ptr %p, %s
   ret i1 %cmp
 }
 
@@ -109,13 +107,13 @@ define i1 @fold_memchr_s_c_nz_eq_s(i8* %s, i32 %c, i64 %n) {
 ; be optimized to the equivalent of N && *S == C provided a short-circuiting
 ; AND, otherwise the load could read a byte just past the end of an array.
 
-define i1 @call_memchr_s_c_n_eq_s(i8* %s, i32 %c, i64 %n) {
+define i1 @call_memchr_s_c_n_eq_s(ptr %s, i32 %c, i64 %n) {
 ; CHECK-LABEL: @call_memchr_s_c_n_eq_s(
-; CHECK-NEXT:    [[P:%.*]] = call i8* @memchr(i8* [[S:%.*]], i32 [[C:%.*]], i64 [[N:%.*]])
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8* [[P]], [[S]]
+; CHECK-NEXT:    [[P:%.*]] = call ptr @memchr(ptr [[S:%.*]], i32 [[C:%.*]], i64 [[N:%.*]])
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[P]], [[S]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %p = call i8* @memchr(i8* %s, i32 %c, i64 %n)
-  %cmp = icmp eq i8* %p, %s
+  %p = call ptr @memchr(ptr %s, i32 %c, i64 %n)
+  %cmp = icmp eq ptr %p, %s
   ret i1 %cmp
 }
index ececba162d592eca49133ea590b22230ddab6921..0fc3a7acd0d662b07bf0543588d273d45d31e5f3 100644 (file)
@@ -4,7 +4,7 @@
 ; Verify that the special case of memchr calls with the size of 1 are
 ; folded as expected.
 
-declare i8* @memchr(i8*, i32, i64)
+declare ptr @memchr(ptr, i32, i64)
 
 @ax = external global [0 x i8]
 @a12345 = constant [5 x i8] c"\01\02\03\04\05"
@@ -12,59 +12,55 @@ declare i8* @memchr(i8*, i32, i64)
 
 ; Fold memchr(a12345, 1, 1) to a12345.
 
-define i8* @fold_memchr_a12345_1_1() {
+define ptr @fold_memchr_a12345_1_1() {
 ; CHECK-LABEL: @fold_memchr_a12345_1_1(
-; CHECK-NEXT:    ret i8* getelementptr inbounds ([5 x i8], [5 x i8]* @a12345, i64 0, i64 0)
+; CHECK-NEXT:    ret ptr @a12345
 ;
 
-  %ptr = getelementptr [5 x i8], [5 x i8]* @a12345, i32 0, i32 0
-  %res = call i8* @memchr(i8* %ptr, i32 1, i64 1)
-  ret i8* %res
+  %res = call ptr @memchr(ptr @a12345, i32 1, i64 1)
+  ret ptr %res
 }
 
 
 ; Fold memchr(a12345, 2, 1) to null.
 
-define i8* @fold_memchr_a12345_2_1() {
+define ptr @fold_memchr_a12345_2_1() {
 ; CHECK-LABEL: @fold_memchr_a12345_2_1(
-; CHECK-NEXT:    ret i8* null
+; CHECK-NEXT:    ret ptr null
 ;
 
-  %ptr = getelementptr [5 x i8], [5 x i8]* @a12345, i32 0, i32 0
-  %res = call i8* @memchr(i8* %ptr, i32 2, i64 1)
-  ret i8* %res
+  %res = call ptr @memchr(ptr @a12345, i32 2, i64 1)
+  ret ptr %res
 }
 
 
 ; Fold memchr(ax, 257, 1) to (unsigned char)*ax == 1 ? ax : null
 ; to verify the constant 257 is converted to unsigned char (yielding 1).
 
-define i8* @fold_memchr_ax_257_1(i32 %chr, i64 %n) {
+define ptr @fold_memchr_ax_257_1(i32 %chr, i64 %n) {
 ; CHECK-LABEL: @fold_memchr_ax_257_1(
-; CHECK-NEXT:    [[MEMCHR_CHAR0:%.*]] = load i8, i8* getelementptr inbounds ([0 x i8], [0 x i8]* @ax, i64 0, i64 0), align 1
+; CHECK-NEXT:    [[MEMCHR_CHAR0:%.*]] = load i8, ptr @ax, align 1
 ; CHECK-NEXT:    [[MEMCHR_CHAR0CMP:%.*]] = icmp eq i8 [[MEMCHR_CHAR0]], 1
-; CHECK-NEXT:    [[MEMCHR_SEL:%.*]] = select i1 [[MEMCHR_CHAR0CMP]], i8* getelementptr inbounds ([0 x i8], [0 x i8]* @ax, i64 0, i64 0), i8* null
-; CHECK-NEXT:    ret i8* [[MEMCHR_SEL]]
+; CHECK-NEXT:    [[MEMCHR_SEL:%.*]] = select i1 [[MEMCHR_CHAR0CMP]], ptr @ax, ptr null
+; CHECK-NEXT:    ret ptr [[MEMCHR_SEL]]
 ;
 
-  %ptr = getelementptr [0 x i8], [0 x i8]* @ax, i32 0, i32 0
-  %res = call i8* @memchr(i8* %ptr, i32 257, i64 1)
-  ret i8* %res
+  %res = call ptr @memchr(ptr @ax, i32 257, i64 1)
+  ret ptr %res
 }
 
 
 ; Fold memchr(ax, c, 1) to (unsigned char)*ax == (unsigned char)c ? ax : null.
 
-define i8* @fold_memchr_ax_c_1(i32 %chr, i64 %n) {
+define ptr @fold_memchr_ax_c_1(i32 %chr, i64 %n) {
 ; CHECK-LABEL: @fold_memchr_ax_c_1(
-; CHECK-NEXT:    [[MEMCHR_CHAR0:%.*]] = load i8, i8* getelementptr inbounds ([0 x i8], [0 x i8]* @ax, i64 0, i64 0), align 1
+; CHECK-NEXT:    [[MEMCHR_CHAR0:%.*]] = load i8, ptr @ax, align 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i32 [[CHR:%.*]] to i8
 ; CHECK-NEXT:    [[MEMCHR_CHAR0CMP:%.*]] = icmp eq i8 [[MEMCHR_CHAR0]], [[TMP1]]
-; CHECK-NEXT:    [[MEMCHR_SEL:%.*]] = select i1 [[MEMCHR_CHAR0CMP]], i8* getelementptr inbounds ([0 x i8], [0 x i8]* @ax, i64 0, i64 0), i8* null
-; CHECK-NEXT:    ret i8* [[MEMCHR_SEL]]
+; CHECK-NEXT:    [[MEMCHR_SEL:%.*]] = select i1 [[MEMCHR_CHAR0CMP]], ptr @ax, ptr null
+; CHECK-NEXT:    ret ptr [[MEMCHR_SEL]]
 ;
 
-  %ptr = getelementptr [0 x i8], [0 x i8]* @ax, i32 0, i32 0
-  %res = call i8* @memchr(i8* %ptr, i32 %chr, i64 1)
-  ret i8* %res
+  %res = call ptr @memchr(ptr @ax, i32 %chr, i64 1)
+  ret ptr %res
 }
index 434f6641c44e750dcacdd2d58d12f34d59224e71..40c6b28a30136dd55d4da8ae004aea86e80f782c 100644 (file)
@@ -4,7 +4,7 @@
 ; RUN: opt < %s -passes=instcombine -S -data-layout="E" | FileCheck %s --check-prefixes=BE
 ; RUN: opt < %s -passes=instcombine -S -data-layout="e" | FileCheck %s --check-prefixes=LE
 
-declare i8* @memchr(i8*, i32, i64)
+declare ptr @memchr(ptr, i32, i64)
 
 ; BE representation: { 'a', 'b', 'c', 'd', 'e', ..., 'p' }
 ; LE representation: { 'd', 'c', 'b', 'a', 'h', ..., 'm' }
@@ -13,109 +13,106 @@ declare i8* @memchr(i8*, i32, i64)
 
 ; Fold memchr(a, C, 16) for C in ['a', 'd'] U ['o', 'q'].
 
-define void @fold_memchr_a(i64* %pcmp) {
+define void @fold_memchr_a(ptr %pcmp) {
 ; BE-LABEL: @fold_memchr_a(
-; BE-NEXT:    store i64 0, i64* [[PCMP:%.*]], align 4
-; BE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, i64* [[PCMP]], i64 1
-; BE-NEXT:    store i64 1, i64* [[PSTOR1]], align 4
-; BE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, i64* [[PCMP]], i64 2
-; BE-NEXT:    store i64 2, i64* [[PSTOR2]], align 4
-; BE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, i64* [[PCMP]], i64 3
-; BE-NEXT:    store i64 3, i64* [[PSTOR3]], align 4
-; BE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, i64* [[PCMP]], i64 4
-; BE-NEXT:    store i64 13, i64* [[PSTOR4]], align 4
-; BE-NEXT:    [[PSTOR6:%.*]] = getelementptr i64, i64* [[PCMP]], i64 6
-; BE-NEXT:    store i64 14, i64* [[PSTOR6]], align 4
-; BE-NEXT:    [[PSTOR7:%.*]] = getelementptr i64, i64* [[PCMP]], i64 7
-; BE-NEXT:    store i64 15, i64* [[PSTOR7]], align 4
-; BE-NEXT:    [[PSTOR8:%.*]] = getelementptr i64, i64* [[PCMP]], i64 8
-; BE-NEXT:    store i64 0, i64* [[PSTOR8]], align 4
+; BE-NEXT:    store i64 0, ptr [[PCMP:%.*]], align 4
+; BE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, ptr [[PCMP]], i64 1
+; BE-NEXT:    store i64 1, ptr [[PSTOR1]], align 4
+; BE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, ptr [[PCMP]], i64 2
+; BE-NEXT:    store i64 2, ptr [[PSTOR2]], align 4
+; BE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, ptr [[PCMP]], i64 3
+; BE-NEXT:    store i64 3, ptr [[PSTOR3]], align 4
+; BE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, ptr [[PCMP]], i64 4
+; BE-NEXT:    store i64 13, ptr [[PSTOR4]], align 4
+; BE-NEXT:    [[PSTOR6:%.*]] = getelementptr i64, ptr [[PCMP]], i64 6
+; BE-NEXT:    store i64 14, ptr [[PSTOR6]], align 4
+; BE-NEXT:    [[PSTOR7:%.*]] = getelementptr i64, ptr [[PCMP]], i64 7
+; BE-NEXT:    store i64 15, ptr [[PSTOR7]], align 4
+; BE-NEXT:    [[PSTOR8:%.*]] = getelementptr i64, ptr [[PCMP]], i64 8
+; BE-NEXT:    store i64 0, ptr [[PSTOR8]], align 4
 ; BE-NEXT:    ret void
 ;
 ; LE-LABEL: @fold_memchr_a(
-; LE-NEXT:    store i64 3, i64* [[PCMP:%.*]], align 4
-; LE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, i64* [[PCMP]], i64 1
-; LE-NEXT:    store i64 2, i64* [[PSTOR1]], align 4
-; LE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, i64* [[PCMP]], i64 2
-; LE-NEXT:    store i64 1, i64* [[PSTOR2]], align 4
-; LE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, i64* [[PCMP]], i64 3
-; LE-NEXT:    store i64 0, i64* [[PSTOR3]], align 4
-; LE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, i64* [[PCMP]], i64 4
-; LE-NEXT:    store i64 14, i64* [[PSTOR4]], align 4
-; LE-NEXT:    [[PSTOR6:%.*]] = getelementptr i64, i64* [[PCMP]], i64 6
-; LE-NEXT:    store i64 13, i64* [[PSTOR6]], align 4
-; LE-NEXT:    [[PSTOR7:%.*]] = getelementptr i64, i64* [[PCMP]], i64 7
-; LE-NEXT:    store i64 12, i64* [[PSTOR7]], align 4
-; LE-NEXT:    [[PSTOR8:%.*]] = getelementptr i64, i64* [[PCMP]], i64 8
-; LE-NEXT:    store i64 0, i64* [[PSTOR8]], align 4
+; LE-NEXT:    store i64 3, ptr [[PCMP:%.*]], align 4
+; LE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, ptr [[PCMP]], i64 1
+; LE-NEXT:    store i64 2, ptr [[PSTOR1]], align 4
+; LE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, ptr [[PCMP]], i64 2
+; LE-NEXT:    store i64 1, ptr [[PSTOR2]], align 4
+; LE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, ptr [[PCMP]], i64 3
+; LE-NEXT:    store i64 0, ptr [[PSTOR3]], align 4
+; LE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, ptr [[PCMP]], i64 4
+; LE-NEXT:    store i64 14, ptr [[PSTOR4]], align 4
+; LE-NEXT:    [[PSTOR6:%.*]] = getelementptr i64, ptr [[PCMP]], i64 6
+; LE-NEXT:    store i64 13, ptr [[PSTOR6]], align 4
+; LE-NEXT:    [[PSTOR7:%.*]] = getelementptr i64, ptr [[PCMP]], i64 7
+; LE-NEXT:    store i64 12, ptr [[PSTOR7]], align 4
+; LE-NEXT:    [[PSTOR8:%.*]] = getelementptr i64, ptr [[PCMP]], i64 8
+; LE-NEXT:    store i64 0, ptr [[PSTOR8]], align 4
 ; LE-NEXT:    ret void
 ;
-  %p0 = getelementptr [4 x i32], [4 x i32]* @a, i64 0, i64 0
-  %p1 = bitcast i32* %p0 to i8*
-  %ip0 = ptrtoint [4 x i32]* @a to i64
+  %ip0 = ptrtoint ptr @a to i64
 
 ; Fold memchr(a, 'a', 16) - a to 0 (3 in LE).
 
-  %pa = call i8* @memchr(i8* %p1, i32 97, i64 16)
-  %ipa = ptrtoint i8* %pa to i64
+  %pa = call ptr @memchr(ptr @a, i32 97, i64 16)
+  %ipa = ptrtoint ptr %pa to i64
   %offa = sub i64 %ipa, %ip0
-  %pstor0 = getelementptr i64, i64* %pcmp, i64 0
-  store i64 %offa, i64* %pstor0
+  store i64 %offa, ptr %pcmp
 
 ; Fold memchr(a, 'b', 16) - a to 1 (2 in LE)
 
-  %pb = call i8* @memchr(i8* %p1, i32 98, i64 16)
-  %ipb = ptrtoint i8* %pb to i64
+  %pb = call ptr @memchr(ptr @a, i32 98, i64 16)
+  %ipb = ptrtoint ptr %pb to i64
   %offb = sub i64 %ipb, %ip0
-  %pstor1 = getelementptr i64, i64* %pcmp, i64 1
-  store i64 %offb, i64* %pstor1
+  %pstor1 = getelementptr i64, ptr %pcmp, i64 1
+  store i64 %offb, ptr %pstor1
 
 ; Fold memchr(a, 'c', 16) - a to 2 (1 in LE)
 
-  %pc = call i8* @memchr(i8* %p1, i32 99, i64 16)
-  %ipc = ptrtoint i8* %pc to i64
+  %pc = call ptr @memchr(ptr @a, i32 99, i64 16)
+  %ipc = ptrtoint ptr %pc to i64
   %offc = sub i64 %ipc, %ip0
-  %pstor2 = getelementptr i64, i64* %pcmp, i64 2
-  store i64 %offc, i64* %pstor2
+  %pstor2 = getelementptr i64, ptr %pcmp, i64 2
+  store i64 %offc, ptr %pstor2
 
 ; Fold memchr(a, 'd', 16) - a to 3 (0 in LE)
 
-  %pd = call i8* @memchr(i8* %p1, i32 100, i64 16)
-  %ipd = ptrtoint i8* %pd to i64
+  %pd = call ptr @memchr(ptr @a, i32 100, i64 16)
+  %ipd = ptrtoint ptr %pd to i64
   %offd = sub i64 %ipd, %ip0
-  %pstor3 = getelementptr i64, i64* %pcmp, i64 3
-  store i64 %offd, i64* %pstor3
+  %pstor3 = getelementptr i64, ptr %pcmp, i64 3
+  store i64 %offd, ptr %pstor3
 
 ; Fold memchr(a, 'n', 16) - a to 13 (14 in LE)
 
-  %pn = call i8* @memchr(i8* %p1, i32 110, i64 16)
-  %ipn = ptrtoint i8* %pn to i64
+  %pn = call ptr @memchr(ptr @a, i32 110, i64 16)
+  %ipn = ptrtoint ptr %pn to i64
   %offn = sub i64 %ipn, %ip0
-  %pstor4 = getelementptr i64, i64* %pcmp, i64 4
-  store i64 %offn, i64* %pstor4
+  %pstor4 = getelementptr i64, ptr %pcmp, i64 4
+  store i64 %offn, ptr %pstor4
 
 ; Fold memchr(a, 'o', 16) - a to 14 (13 in LE)
 
-  %po = call i8* @memchr(i8* %p1, i32 111, i64 16)
-  %ipo = ptrtoint i8* %po to i64
+  %po = call ptr @memchr(ptr @a, i32 111, i64 16)
+  %ipo = ptrtoint ptr %po to i64
   %offo = sub i64 %ipo, %ip0
-  %pstor6 = getelementptr i64, i64* %pcmp, i64 6
-  store i64 %offo, i64* %pstor6
+  %pstor6 = getelementptr i64, ptr %pcmp, i64 6
+  store i64 %offo, ptr %pstor6
 
 ; Fold memchr(a, 'p', 16) - a to 15 (12 in LE)
 
-  %pp = call i8* @memchr(i8* %p1, i32 112, i64 16)
-  %ipp = ptrtoint i8* %pp to i64
+  %pp = call ptr @memchr(ptr @a, i32 112, i64 16)
+  %ipp = ptrtoint ptr %pp to i64
   %offp = sub i64 %ipp, %ip0
-  %pstor7 = getelementptr i64, i64* %pcmp, i64 7
-  store i64 %offp, i64* %pstor7
+  %pstor7 = getelementptr i64, ptr %pcmp, i64 7
+  store i64 %offp, ptr %pstor7
 
 ; Fold memchr(a, 'q', 16) to null in both BE and LE.
 
-  %pq = call i8* @memchr(i8* %p1, i32 113, i64 16)
-  %ipq = ptrtoint i8* %pq to i64
-  %pstor8 = getelementptr i64, i64* %pcmp, i64 8
-  store i64 %ipq, i64* %pstor8
+  %pq = call ptr @memchr(ptr @a, i32 113, i64 16)
+  %ipq = ptrtoint ptr %pq to i64
+  %pstor8 = getelementptr i64, ptr %pcmp, i64 8
+  store i64 %ipq, ptr %pstor8
 
   ret void
 }
@@ -123,84 +120,82 @@ define void @fold_memchr_a(i64* %pcmp) {
 
 ; Fold memchr(a + 1, C, 12) for C in ['e', 'h'] U ['a', 'd'].
 
-define void @fold_memchr_a_p1(i64* %pcmp) {
+define void @fold_memchr_a_p1(ptr %pcmp) {
 ; BE-LABEL: @fold_memchr_a_p1(
-; BE-NEXT:    store i64 0, i64* [[PCMP:%.*]], align 4
-; BE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, i64* [[PCMP]], i64 1
-; BE-NEXT:    store i64 1, i64* [[PSTOR1]], align 4
-; BE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, i64* [[PCMP]], i64 2
-; BE-NEXT:    store i64 2, i64* [[PSTOR2]], align 4
-; BE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, i64* [[PCMP]], i64 3
-; BE-NEXT:    store i64 3, i64* [[PSTOR3]], align 4
-; BE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, i64* [[PCMP]], i64 4
-; BE-NEXT:    store i64 0, i64* [[PSTOR4]], align 4
-; BE-NEXT:    [[PSTOR5:%.*]] = getelementptr i64, i64* [[PCMP]], i64 5
-; BE-NEXT:    store i64 0, i64* [[PSTOR5]], align 4
+; BE-NEXT:    store i64 0, ptr [[PCMP:%.*]], align 4
+; BE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, ptr [[PCMP]], i64 1
+; BE-NEXT:    store i64 1, ptr [[PSTOR1]], align 4
+; BE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, ptr [[PCMP]], i64 2
+; BE-NEXT:    store i64 2, ptr [[PSTOR2]], align 4
+; BE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, ptr [[PCMP]], i64 3
+; BE-NEXT:    store i64 3, ptr [[PSTOR3]], align 4
+; BE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, ptr [[PCMP]], i64 4
+; BE-NEXT:    store i64 0, ptr [[PSTOR4]], align 4
+; BE-NEXT:    [[PSTOR5:%.*]] = getelementptr i64, ptr [[PCMP]], i64 5
+; BE-NEXT:    store i64 0, ptr [[PSTOR5]], align 4
 ; BE-NEXT:    ret void
 ;
 ; LE-LABEL: @fold_memchr_a_p1(
-; LE-NEXT:    store i64 3, i64* [[PCMP:%.*]], align 4
-; LE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, i64* [[PCMP]], i64 1
-; LE-NEXT:    store i64 2, i64* [[PSTOR1]], align 4
-; LE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, i64* [[PCMP]], i64 2
-; LE-NEXT:    store i64 1, i64* [[PSTOR2]], align 4
-; LE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, i64* [[PCMP]], i64 3
-; LE-NEXT:    store i64 0, i64* [[PSTOR3]], align 4
-; LE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, i64* [[PCMP]], i64 4
-; LE-NEXT:    store i64 0, i64* [[PSTOR4]], align 4
-; LE-NEXT:    [[PSTOR5:%.*]] = getelementptr i64, i64* [[PCMP]], i64 5
-; LE-NEXT:    store i64 0, i64* [[PSTOR5]], align 4
+; LE-NEXT:    store i64 3, ptr [[PCMP:%.*]], align 4
+; LE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, ptr [[PCMP]], i64 1
+; LE-NEXT:    store i64 2, ptr [[PSTOR1]], align 4
+; LE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, ptr [[PCMP]], i64 2
+; LE-NEXT:    store i64 1, ptr [[PSTOR2]], align 4
+; LE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, ptr [[PCMP]], i64 3
+; LE-NEXT:    store i64 0, ptr [[PSTOR3]], align 4
+; LE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, ptr [[PCMP]], i64 4
+; LE-NEXT:    store i64 0, ptr [[PSTOR4]], align 4
+; LE-NEXT:    [[PSTOR5:%.*]] = getelementptr i64, ptr [[PCMP]], i64 5
+; LE-NEXT:    store i64 0, ptr [[PSTOR5]], align 4
 ; LE-NEXT:    ret void
 ;
-  %p0 = getelementptr [4 x i32], [4 x i32]* @a, i64 0, i64 1
-  %p1 = bitcast i32* %p0 to i8*
-  %ip0 = ptrtoint i8* %p1 to i64
+  %p0 = getelementptr [4 x i32], ptr @a, i64 0, i64 1
+  %ip0 = ptrtoint ptr %p0 to i64
 
 ; Fold memchr(a + 1, 'e', 12) - a to 0 (3 in LE).
 
-  %pe = call i8* @memchr(i8* %p1, i32 101, i64 12)
-  %ipe = ptrtoint i8* %pe to i64
+  %pe = call ptr @memchr(ptr %p0, i32 101, i64 12)
+  %ipe = ptrtoint ptr %pe to i64
   %offe = sub i64 %ipe, %ip0
-  %pstor0 = getelementptr i64, i64* %pcmp, i64 0
-  store i64 %offe, i64* %pstor0
+  store i64 %offe, ptr %pcmp
 
 ; Fold memchr(a + 1, 'f', 12) - a to 1 (2 in LE).
 
-  %pf = call i8* @memchr(i8* %p1, i32 102, i64 12)
-  %ipf = ptrtoint i8* %pf to i64
+  %pf = call ptr @memchr(ptr %p0, i32 102, i64 12)
+  %ipf = ptrtoint ptr %pf to i64
   %offf = sub i64 %ipf, %ip0
-  %pstor1 = getelementptr i64, i64* %pcmp, i64 1
-  store i64 %offf, i64* %pstor1
+  %pstor1 = getelementptr i64, ptr %pcmp, i64 1
+  store i64 %offf, ptr %pstor1
 
 ; Fold memchr(a + 1, 'g', 12) - a to 2 (1 in LE).
 
-  %pg = call i8* @memchr(i8* %p1, i32 103, i64 12)
-  %ipg = ptrtoint i8* %pg to i64
+  %pg = call ptr @memchr(ptr %p0, i32 103, i64 12)
+  %ipg = ptrtoint ptr %pg to i64
   %offg = sub i64 %ipg, %ip0
-  %pstor2 = getelementptr i64, i64* %pcmp, i64 2
-  store i64 %offg, i64* %pstor2
+  %pstor2 = getelementptr i64, ptr %pcmp, i64 2
+  store i64 %offg, ptr %pstor2
 
 ; Fold memchr(a + 1, 'h', 12) - a to 3 (0 in LE).
 
-  %ph = call i8* @memchr(i8* %p1, i32 104, i64 12)
-  %iph = ptrtoint i8* %ph to i64
+  %ph = call ptr @memchr(ptr %p0, i32 104, i64 12)
+  %iph = ptrtoint ptr %ph to i64
   %offh = sub i64 %iph, %ip0
-  %pstor3 = getelementptr i64, i64* %pcmp, i64 3
-  store i64 %offh, i64* %pstor3
+  %pstor3 = getelementptr i64, ptr %pcmp, i64 3
+  store i64 %offh, ptr %pstor3
 
 ; Fold memchr(a + 1, 'a', 12) to null in both BE and LE.
 
-  %pa = call i8* @memchr(i8* %p1, i32 97, i64 12)
-  %ipa = ptrtoint i8* %pa to i64
-  %pstor4 = getelementptr i64, i64* %pcmp, i64 4
-  store i64 %ipa, i64* %pstor4
+  %pa = call ptr @memchr(ptr %p0, i32 97, i64 12)
+  %ipa = ptrtoint ptr %pa to i64
+  %pstor4 = getelementptr i64, ptr %pcmp, i64 4
+  store i64 %ipa, ptr %pstor4
 
 ; Fold memchr(a + 1, 'd', 12) to null in both BE and LE.
 
-  %pd = call i8* @memchr(i8* %p1, i32 100, i64 12)
-  %ipd = ptrtoint i8* %pd to i64
-  %pstor5 = getelementptr i64, i64* %pcmp, i64 5
-  store i64 %ipd, i64* %pstor5
+  %pd = call ptr @memchr(ptr %p0, i32 100, i64 12)
+  %ipd = ptrtoint ptr %pd to i64
+  %pstor5 = getelementptr i64, ptr %pcmp, i64 5
+  store i64 %ipd, ptr %pstor5
 
   ret void
 }
index 62fe1048e21e4be2466df09ca68397686c952083..054896647b51886b3ee3d0cc3e8bfff5f62bfa32 100644 (file)
@@ -9,40 +9,40 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @hel = constant [4 x i8] c"hel\00"
 @hello_u = constant [8 x i8] c"hello_u\00"
 
-declare i32 @memcmp(i8*, i8*, i32)
+declare i32 @memcmp(ptr, ptr, i32)
 
 ; Check memcmp(mem, mem, size) -> 0.
 
-define i32 @test_simplify1(i8* %mem, i32 %size) {
+define i32 @test_simplify1(ptr %mem, i32 %size) {
 ; CHECK-LABEL: @test_simplify1(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %ret = call i32 @memcmp(i8* %mem, i8* %mem, i32 %size)
+  %ret = call i32 @memcmp(ptr %mem, ptr %mem, i32 %size)
   ret i32 %ret
 }
 
 ; Check memcmp(mem1, mem2, 0) -> 0.
 
-define i32 @test_simplify2(i8* %mem1, i8* %mem2) {
+define i32 @test_simplify2(ptr %mem1, ptr %mem2) {
 ; CHECK-LABEL: @test_simplify2(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %ret = call i32 @memcmp(i8* %mem1, i8* %mem2, i32 0)
+  %ret = call i32 @memcmp(ptr %mem1, ptr %mem2, i32 0)
   ret i32 %ret
 }
 
 ;; Check memcmp(mem1, mem2, 1) -> *(unsigned char*)mem1 - *(unsigned char*)mem2.
 
-define i32 @test_simplify3(i8* %mem1, i8* %mem2) {
+define i32 @test_simplify3(ptr %mem1, ptr %mem2) {
 ; CHECK-LABEL: @test_simplify3(
-; CHECK-NEXT:    [[LHSC:%.*]] = load i8, i8* %mem1, align 1
+; CHECK-NEXT:    [[LHSC:%.*]] = load i8, ptr %mem1, align 1
 ; CHECK-NEXT:    [[LHSV:%.*]] = zext i8 [[LHSC]] to i32
-; CHECK-NEXT:    [[RHSC:%.*]] = load i8, i8* %mem2, align 1
+; CHECK-NEXT:    [[RHSC:%.*]] = load i8, ptr %mem2, align 1
 ; CHECK-NEXT:    [[RHSV:%.*]] = zext i8 [[RHSC]] to i32
 ; CHECK-NEXT:    [[CHARDIFF:%.*]] = sub nsw i32 [[LHSV]], [[RHSV]]
 ; CHECK-NEXT:    ret i32 [[CHARDIFF]]
 ;
-  %ret = call i32 @memcmp(i8* %mem1, i8* %mem2, i32 1)
+  %ret = call i32 @memcmp(ptr %mem1, ptr %mem2, i32 1)
   ret i32 %ret
 }
 
@@ -52,9 +52,7 @@ define i32 @test_simplify4() {
 ; CHECK-LABEL: @test_simplify4(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %mem1 = getelementptr [4 x i8], [4 x i8]* @hel, i32 0, i32 0
-  %mem2 = getelementptr [8 x i8], [8 x i8]* @hello_u, i32 0, i32 0
-  %ret = call i32 @memcmp(i8* %mem1, i8* %mem2, i32 3)
+  %ret = call i32 @memcmp(ptr @hel, ptr @hello_u, i32 3)
   ret i32 %ret
 }
 
@@ -62,9 +60,7 @@ define i32 @test_simplify5() {
 ; CHECK-LABEL: @test_simplify5(
 ; CHECK-NEXT:    ret i32 1
 ;
-  %mem1 = getelementptr [4 x i8], [4 x i8]* @hel, i32 0, i32 0
-  %mem2 = getelementptr [4 x i8], [4 x i8]* @foo, i32 0, i32 0
-  %ret = call i32 @memcmp(i8* %mem1, i8* %mem2, i32 3)
+  %ret = call i32 @memcmp(ptr @hel, ptr @foo, i32 3)
   ret i32 %ret
 }
 
@@ -72,9 +68,7 @@ define i32 @test_simplify6() {
 ; CHECK-LABEL: @test_simplify6(
 ; CHECK-NEXT:    ret i32 -1
 ;
-  %mem1 = getelementptr [4 x i8], [4 x i8]* @foo, i32 0, i32 0
-  %mem2 = getelementptr [4 x i8], [4 x i8]* @hel, i32 0, i32 0
-  %ret = call i32 @memcmp(i8* %mem1, i8* %mem2, i32 3)
+  %ret = call i32 @memcmp(ptr @foo, ptr @hel, i32 3)
   ret i32 %ret
 }
 
@@ -87,11 +81,9 @@ define i1 @test_simplify7(i64 %x, i64 %y) {
 ;
   %x.addr = alloca i64, align 8
   %y.addr = alloca i64, align 8
-  store i64 %x, i64* %x.addr, align 8
-  store i64 %y, i64* %y.addr, align 8
-  %xptr = bitcast i64* %x.addr to i8*
-  %yptr = bitcast i64* %y.addr to i8*
-  %call = call i32 @memcmp(i8* %xptr, i8* %yptr, i32 8)
+  store i64 %x, ptr %x.addr, align 8
+  store i64 %y, ptr %y.addr, align 8
+  %call = call i32 @memcmp(ptr %x.addr, ptr %y.addr, i32 8)
   %cmp = icmp eq i32 %call, 0
   ret i1 %cmp
 }
@@ -105,11 +97,9 @@ define i1 @test_simplify8(i32 %x, i32 %y) {
 ;
   %x.addr = alloca i32, align 4
   %y.addr = alloca i32, align 4
-  store i32 %x, i32* %x.addr, align 4
-  store i32 %y, i32* %y.addr, align 4
-  %xptr = bitcast i32* %x.addr to i8*
-  %yptr = bitcast i32* %y.addr to i8*
-  %call = call i32 @memcmp(i8* %xptr, i8* %yptr, i32 4)
+  store i32 %x, ptr %x.addr, align 4
+  store i32 %y, ptr %y.addr, align 4
+  %call = call i32 @memcmp(ptr %x.addr, ptr %y.addr, i32 4)
   %cmp = icmp eq i32 %call, 0
   ret i1 %cmp
 }
@@ -123,29 +113,27 @@ define i1 @test_simplify9(i16 %x, i16 %y) {
 ;
   %x.addr = alloca i16, align 2
   %y.addr = alloca i16, align 2
-  store i16 %x, i16* %x.addr, align 2
-  store i16 %y, i16* %y.addr, align 2
-  %xptr = bitcast i16* %x.addr to i8*
-  %yptr = bitcast i16* %y.addr to i8*
-  %call = call i32 @memcmp(i8* %xptr, i8* %yptr, i32 2)
+  store i16 %x, ptr %x.addr, align 2
+  store i16 %y, ptr %y.addr, align 2
+  %call = call i32 @memcmp(ptr %x.addr, ptr %y.addr, i32 2)
   %cmp = icmp eq i32 %call, 0
   ret i1 %cmp
 }
 
 ; Check memcmp(mem1, mem2, size)==0 -> bcmp(mem1, mem2, size)==0
 
-define i1 @test_simplify10(i8* %mem1, i8* %mem2, i32 %size) {
+define i1 @test_simplify10(ptr %mem1, ptr %mem2, i32 %size) {
 ; NOBCMP-LABEL: @test_simplify10(
-; NOBCMP-NEXT:    [[CALL:%.*]] = call i32 @memcmp(i8* %mem1, i8* %mem2, i32 %size)
+; NOBCMP-NEXT:    [[CALL:%.*]] = call i32 @memcmp(ptr %mem1, ptr %mem2, i32 %size)
 ; NOBCMP-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0
 ; NOBCMP-NEXT:    ret i1 [[CMP]]
 ;
 ; BCMP-LABEL: @test_simplify10(
-; BCMP-NEXT:    [[CALL:%.*]] = call i32 @bcmp(i8* %mem1, i8* %mem2, i32 %size)
+; BCMP-NEXT:    [[CALL:%.*]] = call i32 @bcmp(ptr %mem1, ptr %mem2, i32 %size)
 ; BCMP-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], 0
 ; BCMP-NEXT:    ret i1 [[CMP]]
 ;
-  %call = call i32 @memcmp(i8* %mem1, i8* %mem2, i32 %size)
+  %call = call i32 @memcmp(ptr %mem1, ptr %mem2, i32 %size)
   %cmp = icmp eq i32 %call, 0
   ret i1 %cmp
 }
index 3f56c49b53543ef665d8a3c93d5345b265505220..0edc815ff30c9faa9580dd9f5d13355bb1110c50 100644 (file)
@@ -4,14 +4,14 @@
 
 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:128:128"
 
-declare i32* @memcmp(i8*, i8*, i32)
+declare ptr @memcmp(ptr, ptr, i32)
 
 ; Check that memcmp functions with the wrong prototype aren't simplified.
 
-define i32* @test_no_simplify1(i8* %mem, i32 %size) {
+define ptr @test_no_simplify1(ptr %mem, i32 %size) {
 ; CHECK-LABEL: @test_no_simplify1(
-  %ret = call i32* @memcmp(i8* %mem, i8* %mem, i32 %size)
-; CHECK-NEXT: call i32* @memcmp
-  ret i32* %ret
-; CHECK-NEXT: ret i32* %ret
+  %ret = call ptr @memcmp(ptr %mem, ptr %mem, i32 %size)
+; CHECK-NEXT: call ptr @memcmp
+  ret ptr %ret
+; CHECK-NEXT: ret ptr %ret
 }
index cafb8523f3d71146ac144c0971eade034f41a6de..fd4d54ebd7c1c689783a17e25f5db63bbb84b91d 100644 (file)
@@ -4,7 +4,7 @@
 ; RUN: opt < %s -passes=instcombine -S -data-layout="E" | FileCheck %s --check-prefixes=BE
 ; RUN: opt < %s -passes=instcombine -S -data-layout="e" | FileCheck %s --check-prefixes=LE
 
-declare i32 @memcmp(i8*, i8*, i64)
+declare i32 @memcmp(ptr, ptr, i64)
 
 ; BE representation: { 'a', 'b', 'c', ..., 'f', 'g', 'h' }
 ; LE representation: { 'b', 'a', 'd', ..., 'e', 'h', 'g' }
@@ -15,86 +15,82 @@ declare i32 @memcmp(i8*, i8*, i64)
 
 ; Fold memcmp(ia16a, i8a, N) for N in [0, 8].
 
-define void @fold_memcmp_ia16a_i8a(i32* %pcmp) {
+define void @fold_memcmp_ia16a_i8a(ptr %pcmp) {
 ; BE-LABEL: @fold_memcmp_ia16a_i8a(
-; BE-NEXT:    store i32 0, i32* [[PCMP:%.*]], align 4
-; BE-NEXT:    [[PSTOR1:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; BE-NEXT:    store i32 0, i32* [[PSTOR1]], align 4
-; BE-NEXT:    [[PSTOR2:%.*]] = getelementptr i32, i32* [[PCMP]], i64 2
-; BE-NEXT:    store i32 0, i32* [[PSTOR2]], align 4
-; BE-NEXT:    [[PSTOR3:%.*]] = getelementptr i32, i32* [[PCMP]], i64 3
-; BE-NEXT:    store i32 0, i32* [[PSTOR3]], align 4
-; BE-NEXT:    [[PSTOR4:%.*]] = getelementptr i32, i32* [[PCMP]], i64 4
-; BE-NEXT:    store i32 0, i32* [[PSTOR4]], align 4
-; BE-NEXT:    [[PSTOR5:%.*]] = getelementptr i32, i32* [[PCMP]], i64 5
-; BE-NEXT:    store i32 0, i32* [[PSTOR5]], align 4
-; BE-NEXT:    [[PSTOR6:%.*]] = getelementptr i32, i32* [[PCMP]], i64 6
-; BE-NEXT:    store i32 0, i32* [[PSTOR6]], align 4
-; BE-NEXT:    [[PSTOR7:%.*]] = getelementptr i32, i32* [[PCMP]], i64 7
-; BE-NEXT:    store i32 0, i32* [[PSTOR7]], align 4
-; BE-NEXT:    [[PSTOR8:%.*]] = getelementptr i32, i32* [[PCMP]], i64 8
-; BE-NEXT:    store i32 1, i32* [[PSTOR8]], align 4
+; BE-NEXT:    store i32 0, ptr [[PCMP:%.*]], align 4
+; BE-NEXT:    [[PSTOR1:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; BE-NEXT:    store i32 0, ptr [[PSTOR1]], align 4
+; BE-NEXT:    [[PSTOR2:%.*]] = getelementptr i32, ptr [[PCMP]], i64 2
+; BE-NEXT:    store i32 0, ptr [[PSTOR2]], align 4
+; BE-NEXT:    [[PSTOR3:%.*]] = getelementptr i32, ptr [[PCMP]], i64 3
+; BE-NEXT:    store i32 0, ptr [[PSTOR3]], align 4
+; BE-NEXT:    [[PSTOR4:%.*]] = getelementptr i32, ptr [[PCMP]], i64 4
+; BE-NEXT:    store i32 0, ptr [[PSTOR4]], align 4
+; BE-NEXT:    [[PSTOR5:%.*]] = getelementptr i32, ptr [[PCMP]], i64 5
+; BE-NEXT:    store i32 0, ptr [[PSTOR5]], align 4
+; BE-NEXT:    [[PSTOR6:%.*]] = getelementptr i32, ptr [[PCMP]], i64 6
+; BE-NEXT:    store i32 0, ptr [[PSTOR6]], align 4
+; BE-NEXT:    [[PSTOR7:%.*]] = getelementptr i32, ptr [[PCMP]], i64 7
+; BE-NEXT:    store i32 0, ptr [[PSTOR7]], align 4
+; BE-NEXT:    [[PSTOR8:%.*]] = getelementptr i32, ptr [[PCMP]], i64 8
+; BE-NEXT:    store i32 1, ptr [[PSTOR8]], align 4
 ; BE-NEXT:    ret void
 ;
 ; LE-LABEL: @fold_memcmp_ia16a_i8a(
-; LE-NEXT:    store i32 0, i32* [[PCMP:%.*]], align 4
-; LE-NEXT:    [[PSTOR1:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; LE-NEXT:    store i32 1, i32* [[PSTOR1]], align 4
-; LE-NEXT:    [[PSTOR2:%.*]] = getelementptr i32, i32* [[PCMP]], i64 2
-; LE-NEXT:    store i32 1, i32* [[PSTOR2]], align 4
-; LE-NEXT:    [[PSTOR3:%.*]] = getelementptr i32, i32* [[PCMP]], i64 3
-; LE-NEXT:    store i32 1, i32* [[PSTOR3]], align 4
-; LE-NEXT:    [[PSTOR4:%.*]] = getelementptr i32, i32* [[PCMP]], i64 4
-; LE-NEXT:    store i32 1, i32* [[PSTOR4]], align 4
-; LE-NEXT:    [[PSTOR5:%.*]] = getelementptr i32, i32* [[PCMP]], i64 5
-; LE-NEXT:    store i32 1, i32* [[PSTOR5]], align 4
-; LE-NEXT:    [[PSTOR6:%.*]] = getelementptr i32, i32* [[PCMP]], i64 6
-; LE-NEXT:    store i32 1, i32* [[PSTOR6]], align 4
-; LE-NEXT:    [[PSTOR7:%.*]] = getelementptr i32, i32* [[PCMP]], i64 7
-; LE-NEXT:    store i32 1, i32* [[PSTOR7]], align 4
-; LE-NEXT:    [[PSTOR8:%.*]] = getelementptr i32, i32* [[PCMP]], i64 8
-; LE-NEXT:    store i32 1, i32* [[PSTOR8]], align 4
+; LE-NEXT:    store i32 0, ptr [[PCMP:%.*]], align 4
+; LE-NEXT:    [[PSTOR1:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; LE-NEXT:    store i32 1, ptr [[PSTOR1]], align 4
+; LE-NEXT:    [[PSTOR2:%.*]] = getelementptr i32, ptr [[PCMP]], i64 2
+; LE-NEXT:    store i32 1, ptr [[PSTOR2]], align 4
+; LE-NEXT:    [[PSTOR3:%.*]] = getelementptr i32, ptr [[PCMP]], i64 3
+; LE-NEXT:    store i32 1, ptr [[PSTOR3]], align 4
+; LE-NEXT:    [[PSTOR4:%.*]] = getelementptr i32, ptr [[PCMP]], i64 4
+; LE-NEXT:    store i32 1, ptr [[PSTOR4]], align 4
+; LE-NEXT:    [[PSTOR5:%.*]] = getelementptr i32, ptr [[PCMP]], i64 5
+; LE-NEXT:    store i32 1, ptr [[PSTOR5]], align 4
+; LE-NEXT:    [[PSTOR6:%.*]] = getelementptr i32, ptr [[PCMP]], i64 6
+; LE-NEXT:    store i32 1, ptr [[PSTOR6]], align 4
+; LE-NEXT:    [[PSTOR7:%.*]] = getelementptr i32, ptr [[PCMP]], i64 7
+; LE-NEXT:    store i32 1, ptr [[PSTOR7]], align 4
+; LE-NEXT:    [[PSTOR8:%.*]] = getelementptr i32, ptr [[PCMP]], i64 8
+; LE-NEXT:    store i32 1, ptr [[PSTOR8]], align 4
 ; LE-NEXT:    ret void
 ;
-  %p0 = getelementptr [4 x i16], [4 x i16]* @ia16a, i64 0, i64 0
-  %p1 = bitcast i16* %p0 to i8*
-  %q = getelementptr [8 x i8], [8 x i8]* @i8a, i64 0, i64 0
 
-  %cmp0 = call i32 @memcmp(i8* %p1, i8* %q, i64 0)
-  %pstor0 = getelementptr i32, i32* %pcmp, i64 0
-  store i32 %cmp0, i32* %pstor0
+  %cmp0 = call i32 @memcmp(ptr @ia16a, ptr @i8a, i64 0)
+  store i32 %cmp0, ptr %pcmp
 
-  %cmp1 = call i32 @memcmp(i8* %p1, i8* %q, i64 1)
-  %pstor1 = getelementptr i32, i32* %pcmp, i64 1
-  store i32 %cmp1, i32* %pstor1
+  %cmp1 = call i32 @memcmp(ptr @ia16a, ptr @i8a, i64 1)
+  %pstor1 = getelementptr i32, ptr %pcmp, i64 1
+  store i32 %cmp1, ptr %pstor1
 
-  %cmp2 = call i32 @memcmp(i8* %p1, i8* %q, i64 2)
-  %pstor2 = getelementptr i32, i32* %pcmp, i64 2
-  store i32 %cmp2, i32* %pstor2
+  %cmp2 = call i32 @memcmp(ptr @ia16a, ptr @i8a, i64 2)
+  %pstor2 = getelementptr i32, ptr %pcmp, i64 2
+  store i32 %cmp2, ptr %pstor2
 
-  %cmp3 = call i32 @memcmp(i8* %p1, i8* %q, i64 3)
-  %pstor3 = getelementptr i32, i32* %pcmp, i64 3
-  store i32 %cmp3, i32* %pstor3
+  %cmp3 = call i32 @memcmp(ptr @ia16a, ptr @i8a, i64 3)
+  %pstor3 = getelementptr i32, ptr %pcmp, i64 3
+  store i32 %cmp3, ptr %pstor3
 
-  %cmp4 = call i32 @memcmp(i8* %p1, i8* %q, i64 4)
-  %pstor4 = getelementptr i32, i32* %pcmp, i64 4
-  store i32 %cmp4, i32* %pstor4
+  %cmp4 = call i32 @memcmp(ptr @ia16a, ptr @i8a, i64 4)
+  %pstor4 = getelementptr i32, ptr %pcmp, i64 4
+  store i32 %cmp4, ptr %pstor4
 
-  %cmp5 = call i32 @memcmp(i8* %p1, i8* %q, i64 5)
-  %pstor5 = getelementptr i32, i32* %pcmp, i64 5
-  store i32 %cmp5, i32* %pstor5
+  %cmp5 = call i32 @memcmp(ptr @ia16a, ptr @i8a, i64 5)
+  %pstor5 = getelementptr i32, ptr %pcmp, i64 5
+  store i32 %cmp5, ptr %pstor5
 
-  %cmp6 = call i32 @memcmp(i8* %p1, i8* %q, i64 6)
-  %pstor6 = getelementptr i32, i32* %pcmp, i64 6
-  store i32 %cmp6, i32* %pstor6
+  %cmp6 = call i32 @memcmp(ptr @ia16a, ptr @i8a, i64 6)
+  %pstor6 = getelementptr i32, ptr %pcmp, i64 6
+  store i32 %cmp6, ptr %pstor6
 
-  %cmp7 = call i32 @memcmp(i8* %p1, i8* %q, i64 7)
-  %pstor7 = getelementptr i32, i32* %pcmp, i64 7
-  store i32 %cmp7, i32* %pstor7
+  %cmp7 = call i32 @memcmp(ptr @ia16a, ptr @i8a, i64 7)
+  %pstor7 = getelementptr i32, ptr %pcmp, i64 7
+  store i32 %cmp7, ptr %pstor7
 
-  %cmp8 = call i32 @memcmp(i8* %p1, i8* %q, i64 8)
-  %pstor8 = getelementptr i32, i32* %pcmp, i64 8
-  store i32 %cmp8, i32* %pstor8
+  %cmp8 = call i32 @memcmp(ptr @ia16a, ptr @i8a, i64 8)
+  %pstor8 = getelementptr i32, ptr %pcmp, i64 8
+  store i32 %cmp8, ptr %pstor8
 
   ret void
 }
@@ -102,70 +98,68 @@ define void @fold_memcmp_ia16a_i8a(i32* %pcmp) {
 
 ; Fold memcmp(ia16a + 1, i8a + 2, N) for N in [0, 6].
 
-define void @fold_memcmp_ia16a_p1_i8a_p1(i32* %pcmp) {
+define void @fold_memcmp_ia16a_p1_i8a_p1(ptr %pcmp) {
 ; BE-LABEL: @fold_memcmp_ia16a_p1_i8a_p1(
-; BE-NEXT:    store i32 0, i32* [[PCMP:%.*]], align 4
-; BE-NEXT:    [[PSTOR1:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; BE-NEXT:    store i32 1, i32* [[PSTOR1]], align 4
-; BE-NEXT:    [[PSTOR2:%.*]] = getelementptr i32, i32* [[PCMP]], i64 2
-; BE-NEXT:    store i32 1, i32* [[PSTOR2]], align 4
-; BE-NEXT:    [[PSTOR3:%.*]] = getelementptr i32, i32* [[PCMP]], i64 3
-; BE-NEXT:    store i32 1, i32* [[PSTOR3]], align 4
-; BE-NEXT:    [[PSTOR4:%.*]] = getelementptr i32, i32* [[PCMP]], i64 4
-; BE-NEXT:    store i32 1, i32* [[PSTOR4]], align 4
-; BE-NEXT:    [[PSTOR5:%.*]] = getelementptr i32, i32* [[PCMP]], i64 5
-; BE-NEXT:    store i32 1, i32* [[PSTOR5]], align 4
-; BE-NEXT:    [[PSTOR6:%.*]] = getelementptr i32, i32* [[PCMP]], i64 6
-; BE-NEXT:    store i32 1, i32* [[PSTOR6]], align 4
+; BE-NEXT:    store i32 0, ptr [[PCMP:%.*]], align 4
+; BE-NEXT:    [[PSTOR1:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; BE-NEXT:    store i32 1, ptr [[PSTOR1]], align 4
+; BE-NEXT:    [[PSTOR2:%.*]] = getelementptr i32, ptr [[PCMP]], i64 2
+; BE-NEXT:    store i32 1, ptr [[PSTOR2]], align 4
+; BE-NEXT:    [[PSTOR3:%.*]] = getelementptr i32, ptr [[PCMP]], i64 3
+; BE-NEXT:    store i32 1, ptr [[PSTOR3]], align 4
+; BE-NEXT:    [[PSTOR4:%.*]] = getelementptr i32, ptr [[PCMP]], i64 4
+; BE-NEXT:    store i32 1, ptr [[PSTOR4]], align 4
+; BE-NEXT:    [[PSTOR5:%.*]] = getelementptr i32, ptr [[PCMP]], i64 5
+; BE-NEXT:    store i32 1, ptr [[PSTOR5]], align 4
+; BE-NEXT:    [[PSTOR6:%.*]] = getelementptr i32, ptr [[PCMP]], i64 6
+; BE-NEXT:    store i32 1, ptr [[PSTOR6]], align 4
 ; BE-NEXT:    ret void
 ;
 ; LE-LABEL: @fold_memcmp_ia16a_p1_i8a_p1(
-; LE-NEXT:    store i32 0, i32* [[PCMP:%.*]], align 4
-; LE-NEXT:    [[PSTOR1:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; LE-NEXT:    store i32 1, i32* [[PSTOR1]], align 4
-; LE-NEXT:    [[PSTOR2:%.*]] = getelementptr i32, i32* [[PCMP]], i64 2
-; LE-NEXT:    store i32 1, i32* [[PSTOR2]], align 4
-; LE-NEXT:    [[PSTOR3:%.*]] = getelementptr i32, i32* [[PCMP]], i64 3
-; LE-NEXT:    store i32 1, i32* [[PSTOR3]], align 4
-; LE-NEXT:    [[PSTOR4:%.*]] = getelementptr i32, i32* [[PCMP]], i64 4
-; LE-NEXT:    store i32 1, i32* [[PSTOR4]], align 4
-; LE-NEXT:    [[PSTOR5:%.*]] = getelementptr i32, i32* [[PCMP]], i64 5
-; LE-NEXT:    store i32 1, i32* [[PSTOR5]], align 4
-; LE-NEXT:    [[PSTOR6:%.*]] = getelementptr i32, i32* [[PCMP]], i64 6
-; LE-NEXT:    store i32 1, i32* [[PSTOR6]], align 4
+; LE-NEXT:    store i32 0, ptr [[PCMP:%.*]], align 4
+; LE-NEXT:    [[PSTOR1:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; LE-NEXT:    store i32 1, ptr [[PSTOR1]], align 4
+; LE-NEXT:    [[PSTOR2:%.*]] = getelementptr i32, ptr [[PCMP]], i64 2
+; LE-NEXT:    store i32 1, ptr [[PSTOR2]], align 4
+; LE-NEXT:    [[PSTOR3:%.*]] = getelementptr i32, ptr [[PCMP]], i64 3
+; LE-NEXT:    store i32 1, ptr [[PSTOR3]], align 4
+; LE-NEXT:    [[PSTOR4:%.*]] = getelementptr i32, ptr [[PCMP]], i64 4
+; LE-NEXT:    store i32 1, ptr [[PSTOR4]], align 4
+; LE-NEXT:    [[PSTOR5:%.*]] = getelementptr i32, ptr [[PCMP]], i64 5
+; LE-NEXT:    store i32 1, ptr [[PSTOR5]], align 4
+; LE-NEXT:    [[PSTOR6:%.*]] = getelementptr i32, ptr [[PCMP]], i64 6
+; LE-NEXT:    store i32 1, ptr [[PSTOR6]], align 4
 ; LE-NEXT:    ret void
 ;
-  %p0 = getelementptr [4 x i16], [4 x i16]* @ia16a, i64 0, i64 1
-  %p1 = bitcast i16* %p0 to i8*
-  %q = getelementptr [8 x i8], [8 x i8]* @i8a, i64 0, i64 1
+  %p0 = getelementptr [4 x i16], ptr @ia16a, i64 0, i64 1
+  %q = getelementptr [8 x i8], ptr @i8a, i64 0, i64 1
 
-  %cmp0 = call i32 @memcmp(i8* %p1, i8* %q, i64 0)
-  %pstor0 = getelementptr i32, i32* %pcmp, i64 0
-  store i32 %cmp0, i32* %pstor0
+  %cmp0 = call i32 @memcmp(ptr %p0, ptr %q, i64 0)
+  store i32 %cmp0, ptr %pcmp
 
-  %cmp1 = call i32 @memcmp(i8* %p1, i8* %q, i64 1)
-  %pstor1 = getelementptr i32, i32* %pcmp, i64 1
-  store i32 %cmp1, i32* %pstor1
+  %cmp1 = call i32 @memcmp(ptr %p0, ptr %q, i64 1)
+  %pstor1 = getelementptr i32, ptr %pcmp, i64 1
+  store i32 %cmp1, ptr %pstor1
 
-  %cmp2 = call i32 @memcmp(i8* %p1, i8* %q, i64 2)
-  %pstor2 = getelementptr i32, i32* %pcmp, i64 2
-  store i32 %cmp2, i32* %pstor2
+  %cmp2 = call i32 @memcmp(ptr %p0, ptr %q, i64 2)
+  %pstor2 = getelementptr i32, ptr %pcmp, i64 2
+  store i32 %cmp2, ptr %pstor2
 
-  %cmp3 = call i32 @memcmp(i8* %p1, i8* %q, i64 3)
-  %pstor3 = getelementptr i32, i32* %pcmp, i64 3
-  store i32 %cmp3, i32* %pstor3
+  %cmp3 = call i32 @memcmp(ptr %p0, ptr %q, i64 3)
+  %pstor3 = getelementptr i32, ptr %pcmp, i64 3
+  store i32 %cmp3, ptr %pstor3
 
-  %cmp4 = call i32 @memcmp(i8* %p1, i8* %q, i64 4)
-  %pstor4 = getelementptr i32, i32* %pcmp, i64 4
-  store i32 %cmp4, i32* %pstor4
+  %cmp4 = call i32 @memcmp(ptr %p0, ptr %q, i64 4)
+  %pstor4 = getelementptr i32, ptr %pcmp, i64 4
+  store i32 %cmp4, ptr %pstor4
 
-  %cmp5 = call i32 @memcmp(i8* %p1, i8* %q, i64 5)
-  %pstor5 = getelementptr i32, i32* %pcmp, i64 5
-  store i32 %cmp5, i32* %pstor5
+  %cmp5 = call i32 @memcmp(ptr %p0, ptr %q, i64 5)
+  %pstor5 = getelementptr i32, ptr %pcmp, i64 5
+  store i32 %cmp5, ptr %pstor5
 
-  %cmp6 = call i32 @memcmp(i8* %p1, i8* %q, i64 6)
-  %pstor6 = getelementptr i32, i32* %pcmp, i64 6
-  store i32 %cmp6, i32* %pstor6
+  %cmp6 = call i32 @memcmp(ptr %p0, ptr %q, i64 6)
+  %pstor6 = getelementptr i32, ptr %pcmp, i64 6
+  store i32 %cmp6, ptr %pstor6
 
   ret void
 }
index 260bba5b1a89e1579ef9ce0b8dc70ed17ed7f00e..c63f305581b034322f657662a0355382bc8de21d 100644 (file)
@@ -5,7 +5,7 @@
 ; RUN: opt < %s -passes=instcombine -S -data-layout="E" | FileCheck %s --check-prefixes=BE
 ; RUN: opt < %s -passes=instcombine -S -data-layout="e" | FileCheck %s --check-prefixes=LE
 
-declare i32 @memcmp(i8*, i8*, i64)
+declare i32 @memcmp(ptr, ptr, i64)
 
 @ia16a = constant [4 x i16] [i16 24930, i16 25444, i16 25958, i16 26472]
 @ia16b = constant [5 x i16] [i16 24930, i16 25444, i16 25958, i16 26472, i16 26992]
@@ -17,31 +17,26 @@ declare i32 @memcmp(i8*, i8*, i64)
 ; value (analogous to strncmp) is safer than letting a SIMD library
 ; implementation return a bogus value.
 
-define void @fold_memcmp_mismatch_too_big(i32* %pcmp) {
+define void @fold_memcmp_mismatch_too_big(ptr %pcmp) {
 ; BE-LABEL: @fold_memcmp_mismatch_too_big(
-; BE-NEXT:    store i32 -1, i32* [[PCMP:%.*]], align 4
-; BE-NEXT:    [[PSTOR_CB:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; BE-NEXT:    store i32 1, i32* [[PSTOR_CB]], align 4
+; BE-NEXT:    store i32 -1, ptr [[PCMP:%.*]], align 4
+; BE-NEXT:    [[PSTOR_CB:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; BE-NEXT:    store i32 1, ptr [[PSTOR_CB]], align 4
 ; BE-NEXT:    ret void
 ;
 ; LE-LABEL: @fold_memcmp_mismatch_too_big(
-; LE-NEXT:    store i32 -1, i32* [[PCMP:%.*]], align 4
-; LE-NEXT:    [[PSTOR_CB:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; LE-NEXT:    store i32 1, i32* [[PSTOR_CB]], align 4
+; LE-NEXT:    store i32 -1, ptr [[PCMP:%.*]], align 4
+; LE-NEXT:    [[PSTOR_CB:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; LE-NEXT:    store i32 1, ptr [[PSTOR_CB]], align 4
 ; LE-NEXT:    ret void
 ;
-  %p0 = getelementptr [5 x i16], [5 x i16]* @ia16b, i64 0, i64 0
-  %p1 = bitcast i16* %p0 to i8*
-  %q0 = getelementptr [6 x i16], [6 x i16]* @ia16c, i64 0, i64 0
-  %q1 = bitcast i16* %q0 to i8*
 
-  %cmp_bc = call i32 @memcmp(i8* %p1, i8* %q1, i64 12)
-  %pstor_bc = getelementptr i32, i32* %pcmp, i64 0
-  store i32 %cmp_bc, i32* %pstor_bc
+  %cmp_bc = call i32 @memcmp(ptr @ia16b, ptr @ia16c, i64 12)
+  store i32 %cmp_bc, ptr %pcmp
 
-  %cmp_cb = call i32 @memcmp(i8* %q1, i8* %p1, i64 12)
-  %pstor_cb = getelementptr i32, i32* %pcmp, i64 1
-  store i32 %cmp_cb, i32* %pstor_cb
+  %cmp_cb = call i32 @memcmp(ptr @ia16c, ptr @ia16b, i64 12)
+  %pstor_cb = getelementptr i32, ptr %pcmp, i64 1
+  store i32 %cmp_cb, ptr %pstor_cb
 
   ret void
 }
@@ -51,31 +46,26 @@ define void @fold_memcmp_mismatch_too_big(i32* %pcmp) {
 ; Like in the instances above, this is preferable to letting the undefined
 ; calls take place, although it does prevent sanitizers from detecting them.
 
-define void @fold_memcmp_match_too_big(i32* %pcmp) {
+define void @fold_memcmp_match_too_big(ptr %pcmp) {
 ; BE-LABEL: @fold_memcmp_match_too_big(
-; BE-NEXT:    store i32 0, i32* [[PCMP:%.*]], align 4
-; BE-NEXT:    [[PSTOR_AB_M1:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; BE-NEXT:    store i32 0, i32* [[PSTOR_AB_M1]], align 4
+; BE-NEXT:    store i32 0, ptr [[PCMP:%.*]], align 4
+; BE-NEXT:    [[PSTOR_AB_M1:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; BE-NEXT:    store i32 0, ptr [[PSTOR_AB_M1]], align 4
 ; BE-NEXT:    ret void
 ;
 ; LE-LABEL: @fold_memcmp_match_too_big(
-; LE-NEXT:    store i32 0, i32* [[PCMP:%.*]], align 4
-; LE-NEXT:    [[PSTOR_AB_M1:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; LE-NEXT:    store i32 0, i32* [[PSTOR_AB_M1]], align 4
+; LE-NEXT:    store i32 0, ptr [[PCMP:%.*]], align 4
+; LE-NEXT:    [[PSTOR_AB_M1:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; LE-NEXT:    store i32 0, ptr [[PSTOR_AB_M1]], align 4
 ; LE-NEXT:    ret void
 ;
-  %p0 = getelementptr [4 x i16], [4 x i16]* @ia16a, i64 0, i64 0
-  %p1 = bitcast i16* %p0 to i8*
-  %q0 = getelementptr [5 x i16], [5 x i16]* @ia16b, i64 0, i64 0
-  %q1 = bitcast i16* %q0 to i8*
 
-  %cmp_ab_9 = call i32 @memcmp(i8* %p1, i8* %q1, i64 9)
-  %pstor_ab_9 = getelementptr i32, i32* %pcmp, i64 0
-  store i32 %cmp_ab_9, i32* %pstor_ab_9
+  %cmp_ab_9 = call i32 @memcmp(ptr @ia16a, ptr @ia16b, i64 9)
+  store i32 %cmp_ab_9, ptr %pcmp
 
-  %cmp_ab_m1 = call i32 @memcmp(i8* %p1, i8* %q1, i64 -1)
-  %pstor_ab_m1 = getelementptr i32, i32* %pcmp, i64 1
-  store i32 %cmp_ab_m1, i32* %pstor_ab_m1
+  %cmp_ab_m1 = call i32 @memcmp(ptr @ia16a, ptr @ia16b, i64 -1)
+  %pstor_ab_m1 = getelementptr i32, ptr %pcmp, i64 1
+  store i32 %cmp_ab_m1, ptr %pstor_ab_m1
 
   ret void
 }
index 4b3aa3a402c62057b19d82cad1e0bc50f22758dd..cf95c7bac5692d45db91ce7234c82ad53cbd6bef 100644 (file)
@@ -4,7 +4,7 @@
 ; Exercise folding of memcmp calls with constant arrays including both
 ; negative and positive characters and both constant and nonconstant sizes.
 
-declare i32 @memcmp(i8*, i8*, i64)
+declare i32 @memcmp(ptr, ptr, i64)
 
 @a = constant [7 x i8] c"abcdef\7f"
 @b = constant [7 x i8] c"abcdef\80"
@@ -13,42 +13,41 @@ declare i32 @memcmp(i8*, i8*, i64)
 ; Exercise memcmp(A + C, B + C, 2) folding of small arrays that differ in
 ; a character with the opposite sign and a constant size.
 
-define void @fold_memcmp_cst_cst(i32* %pcmp) {
+define void @fold_memcmp_cst_cst(ptr %pcmp) {
 ; CHECK-LABEL: @fold_memcmp_cst_cst(
-; CHECK-NEXT:    store i32 -1, i32* [[PCMP:%.*]], align 4
-; CHECK-NEXT:    [[SB5_A5:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; CHECK-NEXT:    store i32 1, i32* [[SB5_A5]], align 4
-; CHECK-NEXT:    [[SA6_B6:%.*]] = getelementptr i32, i32* [[PCMP]], i64 2
-; CHECK-NEXT:    store i32 -1, i32* [[SA6_B6]], align 4
-; CHECK-NEXT:    [[SB6_A6:%.*]] = getelementptr i32, i32* [[PCMP]], i64 3
-; CHECK-NEXT:    store i32 1, i32* [[SB6_A6]], align 4
+; CHECK-NEXT:    store i32 -1, ptr [[PCMP:%.*]], align 4
+; CHECK-NEXT:    [[SB5_A5:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; CHECK-NEXT:    store i32 1, ptr [[SB5_A5]], align 4
+; CHECK-NEXT:    [[SA6_B6:%.*]] = getelementptr i32, ptr [[PCMP]], i64 2
+; CHECK-NEXT:    store i32 -1, ptr [[SA6_B6]], align 4
+; CHECK-NEXT:    [[SB6_A6:%.*]] = getelementptr i32, ptr [[PCMP]], i64 3
+; CHECK-NEXT:    store i32 1, ptr [[SB6_A6]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %p5 = getelementptr [7 x i8], [7 x i8]* @a, i64 0, i64 5
-  %p6 = getelementptr [7 x i8], [7 x i8]* @a, i64 0, i64 6
+  %p5 = getelementptr [7 x i8], ptr @a, i64 0, i64 5
+  %p6 = getelementptr [7 x i8], ptr @a, i64 0, i64 6
 
-  %q5 = getelementptr [7 x i8], [7 x i8]* @b, i64 0, i64 5
-  %q6 = getelementptr [7 x i8], [7 x i8]* @b, i64 0, i64 6
+  %q5 = getelementptr [7 x i8], ptr @b, i64 0, i64 5
+  %q6 = getelementptr [7 x i8], ptr @b, i64 0, i64 6
 
   ; Fold memcmp(a + 5, b + 5, 2) to -1.
-  %ca5_b5 = call i32 @memcmp(i8* %p5, i8* %q5, i64 2)
-  %sa5_b5 = getelementptr i32, i32* %pcmp, i64 0
-  store i32 %ca5_b5, i32* %sa5_b5
+  %ca5_b5 = call i32 @memcmp(ptr %p5, ptr %q5, i64 2)
+  store i32 %ca5_b5, ptr %pcmp
 
   ; Fold memcmp(b + 5, a + 5, 2) to +1.
-  %cb5_a5 = call i32 @memcmp(i8* %q5, i8* %p5, i64 2)
-  %sb5_a5 = getelementptr i32, i32* %pcmp, i64 1
-  store i32 %cb5_a5, i32* %sb5_a5
+  %cb5_a5 = call i32 @memcmp(ptr %q5, ptr %p5, i64 2)
+  %sb5_a5 = getelementptr i32, ptr %pcmp, i64 1
+  store i32 %cb5_a5, ptr %sb5_a5
 
   ; Fold memcmp(a + 6, b + 6, 1) to -1.
-  %ca6_b6 = call i32 @memcmp(i8* %p6, i8* %q6, i64 1)
-  %sa6_b6 = getelementptr i32, i32* %pcmp, i64 2
-  store i32 %ca6_b6, i32* %sa6_b6
+  %ca6_b6 = call i32 @memcmp(ptr %p6, ptr %q6, i64 1)
+  %sa6_b6 = getelementptr i32, ptr %pcmp, i64 2
+  store i32 %ca6_b6, ptr %sa6_b6
 
   ; Fold memcmp(b + 6, a + 6, 1) to  +1.
-  %cb6_a6 = call i32 @memcmp(i8* %q6, i8* %p6, i64 1)
-  %sb6_a6 = getelementptr i32, i32* %pcmp, i64 3
-  store i32 %cb6_a6, i32* %sb6_a6
+  %cb6_a6 = call i32 @memcmp(ptr %q6, ptr %p6, i64 1)
+  %sb6_a6 = getelementptr i32, ptr %pcmp, i64 3
+  store i32 %cb6_a6, ptr %sb6_a6
 
   ret void
 }
@@ -57,50 +56,47 @@ define void @fold_memcmp_cst_cst(i32* %pcmp) {
 ; Exercise memcmp(A, B, N) folding of arrays that differ in a character
 ; with the opposite sign and a variable size
 
-define void @fold_memcmp_cst_var(i32* %pcmp, i64 %n) {
+define void @fold_memcmp_cst_var(ptr %pcmp, i64 %n) {
 ; CHECK-LABEL: @fold_memcmp_cst_var(
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ugt i64 [[N:%.*]], 6
 ; CHECK-NEXT:    [[TMP2:%.*]] = sext i1 [[TMP1]] to i32
-; CHECK-NEXT:    store i32 [[TMP2]], i32* [[PCMP:%.*]], align 4
+; CHECK-NEXT:    store i32 [[TMP2]], ptr [[PCMP:%.*]], align 4
 ; CHECK-NEXT:    [[TMP3:%.*]] = icmp ugt i64 [[N]], 6
 ; CHECK-NEXT:    [[TMP4:%.*]] = zext i1 [[TMP3]] to i32
-; CHECK-NEXT:    [[SB0_A0:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; CHECK-NEXT:    store i32 [[TMP4]], i32* [[SB0_A0]], align 4
+; CHECK-NEXT:    [[SB0_A0:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; CHECK-NEXT:    store i32 [[TMP4]], ptr [[SB0_A0]], align 4
 ; CHECK-NEXT:    [[TMP5:%.*]] = icmp ne i64 [[N]], 0
 ; CHECK-NEXT:    [[TMP6:%.*]] = sext i1 [[TMP5]] to i32
-; CHECK-NEXT:    [[SA6_B6:%.*]] = getelementptr i32, i32* [[PCMP]], i64 2
-; CHECK-NEXT:    store i32 [[TMP6]], i32* [[SA6_B6]], align 4
+; CHECK-NEXT:    [[SA6_B6:%.*]] = getelementptr i32, ptr [[PCMP]], i64 2
+; CHECK-NEXT:    store i32 [[TMP6]], ptr [[SA6_B6]], align 4
 ; CHECK-NEXT:    [[TMP7:%.*]] = icmp ne i64 [[N]], 0
 ; CHECK-NEXT:    [[TMP8:%.*]] = zext i1 [[TMP7]] to i32
-; CHECK-NEXT:    [[SB6_A6:%.*]] = getelementptr i32, i32* [[PCMP]], i64 3
-; CHECK-NEXT:    store i32 [[TMP8]], i32* [[SB6_A6]], align 4
+; CHECK-NEXT:    [[SB6_A6:%.*]] = getelementptr i32, ptr [[PCMP]], i64 3
+; CHECK-NEXT:    store i32 [[TMP8]], ptr [[SB6_A6]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %p0 = getelementptr [7 x i8], [7 x i8]* @a, i64 0, i64 0
-  %p6 = getelementptr [7 x i8], [7 x i8]* @a, i64 0, i64 6
+  %p6 = getelementptr [7 x i8], ptr @a, i64 0, i64 6
 
-  %q0 = getelementptr [7 x i8], [7 x i8]* @b, i64 0, i64 0
-  %q6 = getelementptr [7 x i8], [7 x i8]* @b, i64 0, i64 6
+  %q6 = getelementptr [7 x i8], ptr @b, i64 0, i64 6
 
   ; Fold memcmp(a, b, n) to -1.
-  %ca0_b0 = call i32 @memcmp(i8* %p0, i8* %q0, i64 %n)
-  %sa0_b0 = getelementptr i32, i32* %pcmp, i64 0
-  store i32 %ca0_b0, i32* %sa0_b0
+  %ca0_b0 = call i32 @memcmp(ptr @a, ptr @b, i64 %n)
+  store i32 %ca0_b0, ptr %pcmp
 
   ; Fold memcmp(b, a, n) to +1.
-  %cb0_a0 = call i32 @memcmp(i8* %q0, i8* %p0, i64 %n)
-  %sb0_a0 = getelementptr i32, i32* %pcmp, i64 1
-  store i32 %cb0_a0, i32* %sb0_a0
+  %cb0_a0 = call i32 @memcmp(ptr @b, ptr @a, i64 %n)
+  %sb0_a0 = getelementptr i32, ptr %pcmp, i64 1
+  store i32 %cb0_a0, ptr %sb0_a0
 
   ; Fold memcmp(a + 6, b + 6, n) to -1.
-  %ca6_b6 = call i32 @memcmp(i8* %p6, i8* %q6, i64 %n)
-  %sa6_b6 = getelementptr i32, i32* %pcmp, i64 2
-  store i32 %ca6_b6, i32* %sa6_b6
+  %ca6_b6 = call i32 @memcmp(ptr %p6, ptr %q6, i64 %n)
+  %sa6_b6 = getelementptr i32, ptr %pcmp, i64 2
+  store i32 %ca6_b6, ptr %sa6_b6
 
   ; Fold memcmp(b + 6, a + 6, n) to +1.
-  %cb6_a6 = call i32 @memcmp(i8* %q6, i8* %p6, i64 %n)
-  %sb6_a6 = getelementptr i32, i32* %pcmp, i64 3
-  store i32 %cb6_a6, i32* %sb6_a6
+  %cb6_a6 = call i32 @memcmp(ptr %q6, ptr %p6, i64 %n)
+  %sb6_a6 = getelementptr i32, ptr %pcmp, i64 3
+  store i32 %cb6_a6, ptr %sb6_a6
 
   ret void
 }
index fa1c52fd42820504224725b70ec2bdba62ddf4cd..72dccfd86f801e652187bf85462a55e976dd70fc 100644 (file)
@@ -5,42 +5,37 @@
 ; pointers into constant arrays of types larger than char and fractional
 ; offsets.
 
-declare i32 @memcmp(i8*, i8*, i64)
+declare i32 @memcmp(ptr, ptr, i64)
 
 @i32a = constant [2 x i16] [i16 4386, i16 13124]
 @i32b = constant [2 x i16] [i16 4386, i16 13124]
 
 
-define void @fold_memcmp_i32a_i32b_pIb(i32 %I, i32* %pcmp)
+define void @fold_memcmp_i32a_i32b_pIb(i32 %I, ptr %pcmp)
 ; CHECK-LABEL: @fold_memcmp_i32a_i32b_pIb(
-; CHECK-NEXT:    store i32 0, i32* [[PCMP:%.*]], align 4
-; CHECK-NEXT:    [[PST_1_1_2:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; CHECK-NEXT:    store i32 0, i32* [[PST_1_1_2]], align 4
-; CHECK-NEXT:    [[PST_1_1_3:%.*]] = getelementptr i32, i32* [[PCMP]], i64 2
-; CHECK-NEXT:    store i32 0, i32* [[PST_1_1_3]], align 4
+; CHECK-NEXT:    store i32 0, ptr [[PCMP:%.*]], align 4
+; CHECK-NEXT:    [[PST_1_1_2:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; CHECK-NEXT:    store i32 0, ptr [[PST_1_1_2]], align 4
+; CHECK-NEXT:    [[PST_1_1_3:%.*]] = getelementptr i32, ptr [[PCMP]], i64 2
+; CHECK-NEXT:    store i32 0, ptr [[PST_1_1_3]], align 4
 ; CHECK-NEXT:    ret void
 ;
 {
-  %pi32a = getelementptr [2 x i16], [2 x i16]* @i32a, i32 0, i32 0
-  %pi32b = getelementptr [2 x i16], [2 x i16]* @i32b, i32 0, i32 0
 
-  %pi8a = bitcast i16* %pi32a to i8*
-  %pi8b = bitcast i16* %pi32b to i8*
 
-  %pi8ap1 = getelementptr i8, i8* %pi8a, i32 1
-  %pi8bp1 = getelementptr i8, i8* %pi8b, i32 1
+  %pi8ap1 = getelementptr i8, ptr @i32a, i32 1
+  %pi8bp1 = getelementptr i8, ptr @i32b, i32 1
 
-  %pst_1_1_1 = getelementptr i32, i32* %pcmp, i32 0
-  %cmp_1_1_1 = call i32 @memcmp(i8* %pi8ap1, i8* %pi8ap1, i64 1)
-  store i32 %cmp_1_1_1, i32* %pst_1_1_1
+  %cmp_1_1_1 = call i32 @memcmp(ptr %pi8ap1, ptr %pi8ap1, i64 1)
+  store i32 %cmp_1_1_1, ptr %pcmp
 
-  %pst_1_1_2 = getelementptr i32, i32* %pcmp, i32 1
-  %cmp_1_1_2 = call i32 @memcmp(i8* %pi8ap1, i8* %pi8ap1, i64 2)
-  store i32 %cmp_1_1_2, i32* %pst_1_1_2
+  %pst_1_1_2 = getelementptr i32, ptr %pcmp, i32 1
+  %cmp_1_1_2 = call i32 @memcmp(ptr %pi8ap1, ptr %pi8ap1, i64 2)
+  store i32 %cmp_1_1_2, ptr %pst_1_1_2
 
-  %pst_1_1_3 = getelementptr i32, i32* %pcmp, i32 2
-  %cmp_1_1_3 = call i32 @memcmp(i8* %pi8ap1, i8* %pi8ap1, i64 3)
-  store i32 %cmp_1_1_3, i32* %pst_1_1_3
+  %pst_1_1_3 = getelementptr i32, ptr %pcmp, i32 2
+  %cmp_1_1_3 = call i32 @memcmp(ptr %pi8ap1, ptr %pi8ap1, i64 3)
+  store i32 %cmp_1_1_3, ptr %pst_1_1_3
 
   ret void
 }
@@ -52,93 +47,86 @@ define void @fold_memcmp_i32a_i32b_pIb(i32 %I, i32* %pcmp)
 @a = constant [1 x %struct.A] [%struct.A { [4 x i8] [i8 1, i8 2, i8 3, i8 4] }]
 @b = constant [1 x %struct.B] [%struct.B { [2 x i8] [i8 1, i8 2], [2 x i8] [i8 3, i8 4]}]
 
-define void @fold_memcmp_A_B_pIb(i32 %I, i32* %pcmp) {
+define void @fold_memcmp_A_B_pIb(i32 %I, ptr %pcmp) {
 ; CHECK-LABEL: @fold_memcmp_A_B_pIb(
-; CHECK-NEXT:    store i32 0, i32* [[PCMP:%.*]], align 4
-; CHECK-NEXT:    [[PST_0_0_2:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; CHECK-NEXT:    store i32 0, i32* [[PST_0_0_2]], align 4
-; CHECK-NEXT:    [[PST_0_0_3:%.*]] = getelementptr i32, i32* [[PCMP]], i64 2
-; CHECK-NEXT:    store i32 0, i32* [[PST_0_0_3]], align 4
-; CHECK-NEXT:    [[PST_0_0_4:%.*]] = getelementptr i32, i32* [[PCMP]], i64 3
-; CHECK-NEXT:    store i32 0, i32* [[PST_0_0_4]], align 4
-; CHECK-NEXT:    [[PST_0_1_1:%.*]] = getelementptr i32, i32* [[PCMP]], i64 4
-; CHECK-NEXT:    store i32 -1, i32* [[PST_0_1_1]], align 4
-; CHECK-NEXT:    [[PST_0_1_2:%.*]] = getelementptr i32, i32* [[PCMP]], i64 5
-; CHECK-NEXT:    store i32 -1, i32* [[PST_0_1_2]], align 4
-; CHECK-NEXT:    [[PST_0_1_3:%.*]] = getelementptr i32, i32* [[PCMP]], i64 6
-; CHECK-NEXT:    store i32 -1, i32* [[PST_0_1_3]], align 4
-; CHECK-NEXT:    [[PST_1_0_1:%.*]] = getelementptr i32, i32* [[PCMP]], i64 4
-; CHECK-NEXT:    store i32 1, i32* [[PST_1_0_1]], align 4
-; CHECK-NEXT:    [[PST_1_0_2:%.*]] = getelementptr i32, i32* [[PCMP]], i64 5
-; CHECK-NEXT:    store i32 1, i32* [[PST_1_0_2]], align 4
-; CHECK-NEXT:    [[PST_1_0_3:%.*]] = getelementptr i32, i32* [[PCMP]], i64 6
-; CHECK-NEXT:    store i32 1, i32* [[PST_1_0_3]], align 4
+; CHECK-NEXT:    store i32 0, ptr [[PCMP:%.*]], align 4
+; CHECK-NEXT:    [[PST_0_0_2:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; CHECK-NEXT:    store i32 0, ptr [[PST_0_0_2]], align 4
+; CHECK-NEXT:    [[PST_0_0_3:%.*]] = getelementptr i32, ptr [[PCMP]], i64 2
+; CHECK-NEXT:    store i32 0, ptr [[PST_0_0_3]], align 4
+; CHECK-NEXT:    [[PST_0_0_4:%.*]] = getelementptr i32, ptr [[PCMP]], i64 3
+; CHECK-NEXT:    store i32 0, ptr [[PST_0_0_4]], align 4
+; CHECK-NEXT:    [[PST_0_1_1:%.*]] = getelementptr i32, ptr [[PCMP]], i64 4
+; CHECK-NEXT:    store i32 -1, ptr [[PST_0_1_1]], align 4
+; CHECK-NEXT:    [[PST_0_1_2:%.*]] = getelementptr i32, ptr [[PCMP]], i64 5
+; CHECK-NEXT:    store i32 -1, ptr [[PST_0_1_2]], align 4
+; CHECK-NEXT:    [[PST_0_1_3:%.*]] = getelementptr i32, ptr [[PCMP]], i64 6
+; CHECK-NEXT:    store i32 -1, ptr [[PST_0_1_3]], align 4
+; CHECK-NEXT:    [[PST_1_0_1:%.*]] = getelementptr i32, ptr [[PCMP]], i64 4
+; CHECK-NEXT:    store i32 1, ptr [[PST_1_0_1]], align 4
+; CHECK-NEXT:    [[PST_1_0_2:%.*]] = getelementptr i32, ptr [[PCMP]], i64 5
+; CHECK-NEXT:    store i32 1, ptr [[PST_1_0_2]], align 4
+; CHECK-NEXT:    [[PST_1_0_3:%.*]] = getelementptr i32, ptr [[PCMP]], i64 6
+; CHECK-NEXT:    store i32 1, ptr [[PST_1_0_3]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %pa = getelementptr [1 x %struct.A], [1 x %struct.A]* @a, i64 0, i64 0
-  %pb = getelementptr [1 x %struct.B], [1 x %struct.B]* @b, i64 0, i64 0
 
-  %pi8a = bitcast %struct.A* %pa to i8*
-  %pi8b = bitcast %struct.B* %pb to i8*
 
-  %pi8ap0 = getelementptr i8, i8* %pi8a, i32 0
-  %pi8bp0 = getelementptr i8, i8* %pi8b, i32 0
 
   ; Fold memcmp(&a, &b, 1) to 0;
-  %pst_0_0_1 = getelementptr i32, i32* %pcmp, i32 0
-  %cmp_0_0_1 = call i32 @memcmp(i8* %pi8ap0, i8* %pi8bp0, i64 1)
-  store i32 %cmp_0_0_1, i32* %pst_0_0_1
+  %cmp_0_0_1 = call i32 @memcmp(ptr @a, ptr @b, i64 1)
+  store i32 %cmp_0_0_1, ptr %pcmp
 
   ; Fold memcmp(&a, &b, 2) to 0;
-  %pst_0_0_2 = getelementptr i32, i32* %pcmp, i32 1
-  %cmp_0_0_2 = call i32 @memcmp(i8* %pi8ap0, i8* %pi8bp0, i64 2)
-  store i32 %cmp_0_0_2, i32* %pst_0_0_2
+  %pst_0_0_2 = getelementptr i32, ptr %pcmp, i32 1
+  %cmp_0_0_2 = call i32 @memcmp(ptr @a, ptr @b, i64 2)
+  store i32 %cmp_0_0_2, ptr %pst_0_0_2
 
   ; Fold memcmp(&a, &b, 3) to 0;
-  %pst_0_0_3 = getelementptr i32, i32* %pcmp, i32 2
-  %cmp_0_0_3 = call i32 @memcmp(i8* %pi8ap0, i8* %pi8bp0, i64 3)
-  store i32 %cmp_0_0_3, i32* %pst_0_0_3
+  %pst_0_0_3 = getelementptr i32, ptr %pcmp, i32 2
+  %cmp_0_0_3 = call i32 @memcmp(ptr @a, ptr @b, i64 3)
+  store i32 %cmp_0_0_3, ptr %pst_0_0_3
 
   ; Fold memcmp(&a, &b, 4) to 0;
-  %pst_0_0_4 = getelementptr i32, i32* %pcmp, i32 3
-  %cmp_0_0_4 = call i32 @memcmp(i8* %pi8ap0, i8* %pi8bp0, i64 4)
-  store i32 %cmp_0_0_4, i32* %pst_0_0_4
+  %pst_0_0_4 = getelementptr i32, ptr %pcmp, i32 3
+  %cmp_0_0_4 = call i32 @memcmp(ptr @a, ptr @b, i64 4)
+  store i32 %cmp_0_0_4, ptr %pst_0_0_4
 
 
-  %pi8bp1 = getelementptr i8, i8* %pi8b, i32 1
+  %pi8bp1 = getelementptr i8, ptr @b, i32 1
 
   ; Fold memcmp(&a, (char*)&b + 1, 1) to -1;
-  %pst_0_1_1 = getelementptr i32, i32* %pcmp, i32 4
-  %cmp_0_1_1 = call i32 @memcmp(i8* %pi8ap0, i8* %pi8bp1, i64 1)
-  store i32 %cmp_0_1_1, i32* %pst_0_1_1
+  %pst_0_1_1 = getelementptr i32, ptr %pcmp, i32 4
+  %cmp_0_1_1 = call i32 @memcmp(ptr @a, ptr %pi8bp1, i64 1)
+  store i32 %cmp_0_1_1, ptr %pst_0_1_1
 
   ; Fold memcmp(&a, (char*)&b + 1, 2) to -1;
-  %pst_0_1_2 = getelementptr i32, i32* %pcmp, i32 5
-  %cmp_0_1_2 = call i32 @memcmp(i8* %pi8ap0, i8* %pi8bp1, i64 2)
-  store i32 %cmp_0_1_2, i32* %pst_0_1_2
+  %pst_0_1_2 = getelementptr i32, ptr %pcmp, i32 5
+  %cmp_0_1_2 = call i32 @memcmp(ptr @a, ptr %pi8bp1, i64 2)
+  store i32 %cmp_0_1_2, ptr %pst_0_1_2
 
   ; Fold memcmp(&a, (char*)&b + 1, 3) to -1;
-  %pst_0_1_3 = getelementptr i32, i32* %pcmp, i32 6
-  %cmp_0_1_3 = call i32 @memcmp(i8* %pi8ap0, i8* %pi8bp1, i64 3)
-  store i32 %cmp_0_1_3, i32* %pst_0_1_3
+  %pst_0_1_3 = getelementptr i32, ptr %pcmp, i32 6
+  %cmp_0_1_3 = call i32 @memcmp(ptr @a, ptr %pi8bp1, i64 3)
+  store i32 %cmp_0_1_3, ptr %pst_0_1_3
 
 
-  %pi8ap1 = getelementptr i8, i8* %pi8a, i32 1
+  %pi8ap1 = getelementptr i8, ptr @a, i32 1
 
   ; Fold memcmp((char*)&a + 1, &b, 1) to +1;
-  %pst_1_0_1 = getelementptr i32, i32* %pcmp, i32 4
-  %cmp_1_0_1 = call i32 @memcmp(i8* %pi8ap1, i8* %pi8bp0, i64 1)
-  store i32 %cmp_1_0_1, i32* %pst_1_0_1
+  %pst_1_0_1 = getelementptr i32, ptr %pcmp, i32 4
+  %cmp_1_0_1 = call i32 @memcmp(ptr %pi8ap1, ptr @b, i64 1)
+  store i32 %cmp_1_0_1, ptr %pst_1_0_1
 
   ; Fold memcmp((char*)&a + 1, &b, 2) to +1;
-  %pst_1_0_2 = getelementptr i32, i32* %pcmp, i32 5
-  %cmp_1_0_2 = call i32 @memcmp(i8* %pi8ap1, i8* %pi8bp0, i64 2)
-  store i32 %cmp_1_0_2, i32* %pst_1_0_2
+  %pst_1_0_2 = getelementptr i32, ptr %pcmp, i32 5
+  %cmp_1_0_2 = call i32 @memcmp(ptr %pi8ap1, ptr @b, i64 2)
+  store i32 %cmp_1_0_2, ptr %pst_1_0_2
 
   ; Fold memcmp((char*)&a + 1, &b, 3) to +1;
-  %pst_1_0_3 = getelementptr i32, i32* %pcmp, i32 6
-  %cmp_1_0_3 = call i32 @memcmp(i8* %pi8ap1, i8* %pi8bp0, i64 3)
-  store i32 %cmp_1_0_3, i32* %pst_1_0_3
+  %pst_1_0_3 = getelementptr i32, ptr %pcmp, i32 6
+  %cmp_1_0_3 = call i32 @memcmp(ptr %pi8ap1, ptr @b, i64 3)
+  store i32 %cmp_1_0_3, ptr %pst_1_0_3
 
   ret void
 }
index 7b7a5363e40ba0facff1880100fa33663fc9db00..bae282fb2a8a9a90cfcc2169a4c4ceaf1da393cd 100644 (file)
@@ -4,7 +4,7 @@
 ; Verify that the result of memrchr calls with past-the-end pointers used
 ; don't cause trouble and are optimally folded.
 
-declare i32 @memcmp(i8*, i8*, i64)
+declare i32 @memcmp(ptr, ptr, i64)
 
 
 @a5 = constant [5 x i8] c"12345";
@@ -17,9 +17,8 @@ define i32 @fold_memcmp_a5_a5p5_n(i64 %n) {
 ; CHECK-LABEL: @fold_memcmp_a5_a5p5_n(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %pa5_p0 = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 0
-  %pa5_p5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %cmp = call i32 @memcmp(i8* %pa5_p0, i8* %pa5_p5, i64 %n)
+  %pa5_p5 = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %cmp = call i32 @memcmp(ptr @a5, ptr %pa5_p5, i64 %n)
   ret i32 %cmp
 }
 
@@ -30,9 +29,9 @@ define i32 @fold_memcmp_a5p5_a5p5_n(i64 %n) {
 ; CHECK-LABEL: @fold_memcmp_a5p5_a5p5_n(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %pa5_p5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %qa5_p5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %cmp = call i32 @memcmp(i8* %pa5_p5, i8* %qa5_p5, i64 %n)
+  %pa5_p5 = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %qa5_p5 = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %cmp = call i32 @memcmp(ptr %pa5_p5, ptr %qa5_p5, i64 %n)
   ret i32 %cmp
 }
 
@@ -42,12 +41,12 @@ define i32 @fold_memcmp_a5p5_a5p5_n(i64 %n) {
 define i32 @fold_memcmp_a5pi_a5p5_n(i32 %i, i64 %n) {
 ; CHECK-LABEL: @fold_memcmp_a5pi_a5p5_n(
 ; CHECK-NEXT:    [[TMP1:%.*]] = sext i32 [[I:%.*]] to i64
-; CHECK-NEXT:    [[PA5_PI:%.*]] = getelementptr [5 x i8], [5 x i8]* @a5, i64 0, i64 [[TMP1]]
-; CHECK-NEXT:    [[CMP:%.*]] = call i32 @memcmp(i8* [[PA5_PI]], i8* getelementptr inbounds ([5 x i8], [5 x i8]* @a5, i64 1, i64 0), i64 [[N:%.*]])
+; CHECK-NEXT:    [[PA5_PI:%.*]] = getelementptr [5 x i8], ptr @a5, i64 0, i64 [[TMP1]]
+; CHECK-NEXT:    [[CMP:%.*]] = call i32 @memcmp(ptr [[PA5_PI]], ptr getelementptr inbounds ([5 x i8], ptr @a5, i64 1, i64 0), i64 [[N:%.*]])
 ; CHECK-NEXT:    ret i32 [[CMP]]
 ;
-  %pa5_pi = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 %i
-  %pa5_p5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %cmp = call i32 @memcmp(i8* %pa5_pi, i8* %pa5_p5, i64 %n)
+  %pa5_pi = getelementptr [5 x i8], ptr @a5, i32 0, i32 %i
+  %pa5_p5 = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %cmp = call i32 @memcmp(ptr %pa5_pi, ptr %pa5_p5, i64 %n)
   ret i32 %cmp
 }
index b24e5a2193533c8fc342319e39448ab669979980..563570551547348795b1e0680e926d2753330198 100644 (file)
@@ -2,26 +2,24 @@
 ; RUN: opt < %s -passes=instcombine -S -data-layout=e-n32 | FileCheck %s --check-prefix=ALL --check-prefix=LE
 ; RUN: opt < %s -passes=instcombine -S -data-layout=E-n32 | FileCheck %s --check-prefix=ALL --check-prefix=BE
 
-declare i32 @memcmp(i8*, i8*, i64)
+declare i32 @memcmp(ptr, ptr, i64)
 
 ; The alignment of this constant does not matter. We constant fold the load.
 
 @charbuf = private unnamed_addr constant [4 x i8] [i8 0, i8 0, i8 0, i8 1], align 1
 
-define i1 @memcmp_4bytes_unaligned_constant_i8(i8* align 4 %x) {
+define i1 @memcmp_4bytes_unaligned_constant_i8(ptr align 4 %x) {
 ; LE-LABEL: @memcmp_4bytes_unaligned_constant_i8(
-; LE-NEXT:    [[TMP1:%.*]] = bitcast i8* [[X:%.*]] to i32*
-; LE-NEXT:    [[LHSV:%.*]] = load i32, i32* [[TMP1]], align 4
+; LE-NEXT:    [[LHSV:%.*]] = load i32, ptr [[X:%.*]], align 4
 ; LE-NEXT:    [[DOTNOT:%.*]] = icmp eq i32 [[LHSV]], 16777216
 ; LE-NEXT:    ret i1 [[DOTNOT]]
 ;
 ; BE-LABEL: @memcmp_4bytes_unaligned_constant_i8(
-; BE-NEXT:    [[TMP1:%.*]] = bitcast i8* [[X:%.*]] to i32*
-; BE-NEXT:    [[LHSV:%.*]] = load i32, i32* [[TMP1]], align 4
+; BE-NEXT:    [[LHSV:%.*]] = load i32, ptr [[X:%.*]], align 4
 ; BE-NEXT:    [[DOTNOT:%.*]] = icmp eq i32 [[LHSV]], 1
 ; BE-NEXT:    ret i1 [[DOTNOT]]
 ;
-  %call = tail call i32 @memcmp(i8* %x, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @charbuf, i64 0, i64 0), i64 4)
+  %call = tail call i32 @memcmp(ptr %x, ptr @charbuf, i64 4)
   %cmpeq0 = icmp eq i32 %call, 0
   ret i1 %cmpeq0
 }
@@ -31,20 +29,18 @@ define i1 @memcmp_4bytes_unaligned_constant_i8(i8* align 4 %x) {
 
 @intbuf_unaligned = private unnamed_addr constant [4 x i16] [i16 1, i16 2, i16 3, i16 4], align 1
 
-define i1 @memcmp_4bytes_unaligned_constant_i16(i8* align 4 %x) {
+define i1 @memcmp_4bytes_unaligned_constant_i16(ptr align 4 %x) {
 ; LE-LABEL: @memcmp_4bytes_unaligned_constant_i16(
-; LE-NEXT:    [[TMP1:%.*]] = bitcast i8* [[X:%.*]] to i32*
-; LE-NEXT:    [[RHSV:%.*]] = load i32, i32* [[TMP1]], align 4
+; LE-NEXT:    [[RHSV:%.*]] = load i32, ptr [[X:%.*]], align 4
 ; LE-NEXT:    [[DOTNOT:%.*]] = icmp eq i32 [[RHSV]], 131073
 ; LE-NEXT:    ret i1 [[DOTNOT]]
 ;
 ; BE-LABEL: @memcmp_4bytes_unaligned_constant_i16(
-; BE-NEXT:    [[TMP1:%.*]] = bitcast i8* [[X:%.*]] to i32*
-; BE-NEXT:    [[RHSV:%.*]] = load i32, i32* [[TMP1]], align 4
+; BE-NEXT:    [[RHSV:%.*]] = load i32, ptr [[X:%.*]], align 4
 ; BE-NEXT:    [[DOTNOT:%.*]] = icmp eq i32 [[RHSV]], 65538
 ; BE-NEXT:    ret i1 [[DOTNOT]]
 ;
-  %call = tail call i32 @memcmp(i8* bitcast (i16* getelementptr inbounds ([4 x i16], [4 x i16]* @intbuf_unaligned, i64 0, i64 0) to i8*), i8* %x, i64 4)
+  %call = tail call i32 @memcmp(ptr @intbuf_unaligned, ptr %x, i64 4)
   %cmpeq0 = icmp eq i32 %call, 0
   ret i1 %cmpeq0
 }
@@ -54,29 +50,28 @@ define i1 @memcmp_4bytes_unaligned_constant_i16(i8* align 4 %x) {
 
 @intbuf = private unnamed_addr constant [2 x i32] [i32 0, i32 1], align 4
 
-define i1 @memcmp_3bytes_aligned_constant_i32(i8* align 4 %x) {
+define i1 @memcmp_3bytes_aligned_constant_i32(ptr align 4 %x) {
 ; LE-LABEL: @memcmp_3bytes_aligned_constant_i32(
 ; LE-NEXT:    ret i1 false
 ;
 ; BE-LABEL: @memcmp_3bytes_aligned_constant_i32(
 ; BE-NEXT:    ret i1 true
 ;
-  %call = tail call i32 @memcmp(i8* bitcast (i32* getelementptr inbounds ([2 x i32], [2 x i32]* @intbuf, i64 0, i64 1) to i8*), i8* bitcast (i32* getelementptr inbounds ([2 x i32], [2 x i32]* @intbuf, i64 0, i64 0) to i8*), i64 3)
+  %call = tail call i32 @memcmp(ptr getelementptr inbounds ([2 x i32], ptr @intbuf, i64 0, i64 1), ptr @intbuf, i64 3)
   %cmpeq0 = icmp eq i32 %call, 0
   ret i1 %cmpeq0
 }
 
 ; A sloppy implementation would infinite loop by recreating the unused instructions.
 
-define i1 @memcmp_4bytes_one_unaligned_i8(i8* align 4 %x, i8* align 1 %y) {
+define i1 @memcmp_4bytes_one_unaligned_i8(ptr align 4 %x, ptr align 1 %y) {
 ; ALL-LABEL: @memcmp_4bytes_one_unaligned_i8(
-; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(i8* noundef nonnull dereferenceable(4) [[X:%.*]], i8* noundef nonnull dereferenceable(4) [[Y:%.*]], i64 4)
+; ALL-NEXT:    [[CALL:%.*]] = tail call i32 @memcmp(ptr noundef nonnull dereferenceable(4) [[X:%.*]], ptr noundef nonnull dereferenceable(4) [[Y:%.*]], i64 4)
 ; ALL-NEXT:    [[CMPEQ0:%.*]] = icmp eq i32 [[CALL]], 0
 ; ALL-NEXT:    ret i1 [[CMPEQ0]]
 ;
-  %bc = bitcast i8* %x to i32*
-  %lhsv = load i32, i32* %bc
-  %call = tail call i32 @memcmp(i8* %x, i8* %y, i64 4)
+  %lhsv = load i32, ptr %x
+  %call = tail call i32 @memcmp(ptr %x, ptr %y, i64 4)
   %cmpeq0 = icmp eq i32 %call, 0
   ret i1 %cmpeq0
 }
index 2155310d0df4553e681ae86e3f4190dac03cb9df..f921ee75b431a792416f895d5a500b6e477617fa 100644 (file)
@@ -5,61 +5,61 @@
 
 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:128:128"
 
-declare i8* @memcpy(i8*, i8*, i32)
+declare ptr @memcpy(ptr, ptr, i32)
 
 ; Check memcpy(mem1, mem2, size) -> llvm.memcpy(mem1, mem2, size, 1).
 
-define i8* @test_simplify1(i8* %mem1, i8* %mem2, i32 %size) {
+define ptr @test_simplify1(ptr %mem1, ptr %mem2, i32 %size) {
 ; CHECK-LABEL: @test_simplify1(
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 1 [[MEM1:%.*]], i8* align 1 [[MEM2:%.*]], i32 [[SIZE:%.*]], i1 false)
-; CHECK-NEXT:    ret i8* [[MEM1]]
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 1 [[MEM1:%.*]], ptr align 1 [[MEM2:%.*]], i32 [[SIZE:%.*]], i1 false)
+; CHECK-NEXT:    ret ptr [[MEM1]]
 ;
-  %ret = call i8* @memcpy(i8* %mem1, i8* %mem2, i32 %size)
-  ret i8* %ret
+  %ret = call ptr @memcpy(ptr %mem1, ptr %mem2, i32 %size)
+  ret ptr %ret
 }
 
 ; Verify that the strictfp attr doesn't block this optimization.
 
-define i8* @test_simplify2(i8* %mem1, i8* %mem2, i32 %size) strictfp {
+define ptr @test_simplify2(ptr %mem1, ptr %mem2, i32 %size) strictfp {
 ; CHECK-LABEL: @test_simplify2(
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 1 [[MEM1:%.*]], i8* align 1 [[MEM2:%.*]], i32 [[SIZE:%.*]], i1 false) #[[ATTR0:[0-9]+]]
-; CHECK-NEXT:    ret i8* [[MEM1]]
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 1 [[MEM1:%.*]], ptr align 1 [[MEM2:%.*]], i32 [[SIZE:%.*]], i1 false) #[[ATTR0:[0-9]+]]
+; CHECK-NEXT:    ret ptr [[MEM1]]
 ;
-  %ret = call i8* @memcpy(i8* %mem1, i8* %mem2, i32 %size) strictfp
-  ret i8* %ret
+  %ret = call ptr @memcpy(ptr %mem1, ptr %mem2, i32 %size) strictfp
+  ret ptr %ret
 }
 
 ; Verify that the first parameter to memcpy could itself be a call that's not
 ; tail, while the call to @memcpy could be tail.
-declare i8* @get_dest()
+declare ptr @get_dest()
 
-define i8* @test_simplify3(i8* %mem2, i32 %size) {
+define ptr @test_simplify3(ptr %mem2, i32 %size) {
 ; CHECK-LABEL: @test_simplify3(
-; CHECK-NEXT:    [[DEST:%.*]] = call i8* @get_dest()
-; CHECK-NEXT:    tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 1 [[DEST]], i8* align 1 [[MEM2:%.*]], i32 [[SIZE:%.*]], i1 false)
-; CHECK-NEXT:    ret i8* [[DEST]]
+; CHECK-NEXT:    [[DEST:%.*]] = call ptr @get_dest()
+; CHECK-NEXT:    tail call void @llvm.memcpy.p0.p0.i32(ptr align 1 [[DEST]], ptr align 1 [[MEM2:%.*]], i32 [[SIZE:%.*]], i1 false)
+; CHECK-NEXT:    ret ptr [[DEST]]
 ;
 
-  %dest = call i8* @get_dest()
-  %ret = tail call i8* @memcpy(i8* %dest, i8* %mem2, i32 %size)
-  ret i8* %ret
+  %dest = call ptr @get_dest()
+  %ret = tail call ptr @memcpy(ptr %dest, ptr %mem2, i32 %size)
+  ret ptr %ret
 }
 
-define i8* @test_no_incompatible_attr(i8* %mem1, i8* %mem2, i32 %size) {
+define ptr @test_no_incompatible_attr(ptr %mem1, ptr %mem2, i32 %size) {
 ; CHECK-LABEL: @test_no_incompatible_attr(
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 1 [[MEM1:%.*]], i8* align 1 [[MEM2:%.*]], i32 [[SIZE:%.*]], i1 false)
-; CHECK-NEXT:    ret i8* [[MEM1]]
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr align 1 [[MEM1:%.*]], ptr align 1 [[MEM2:%.*]], i32 [[SIZE:%.*]], i1 false)
+; CHECK-NEXT:    ret ptr [[MEM1]]
 ;
 
-  %ret = call dereferenceable(1) i8* @memcpy(i8* %mem1, i8* %mem2, i32 %size)
-  ret i8* %ret
+  %ret = call dereferenceable(1) ptr @memcpy(ptr %mem1, ptr %mem2, i32 %size)
+  ret ptr %ret
 }
 
-define i8* @test_no_simplify1(i8* %mem1, i8* %mem2, i32 %size) {
+define ptr @test_no_simplify1(ptr %mem1, ptr %mem2, i32 %size) {
 ; CHECK-LABEL: @test_no_simplify1(
-; CHECK-NEXT:    [[RET:%.*]] = musttail call i8* @memcpy(i8* [[MEM1:%.*]], i8* [[MEM2:%.*]], i32 [[SIZE:%.*]])
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = musttail call ptr @memcpy(ptr [[MEM1:%.*]], ptr [[MEM2:%.*]], i32 [[SIZE:%.*]])
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
-  %ret = musttail call i8* @memcpy(i8* %mem1, i8* %mem2, i32 %size)
-  ret i8* %ret
+  %ret = musttail call ptr @memcpy(ptr %mem1, ptr %mem2, i32 %size)
+  ret ptr %ret
 }
index b969d049c965208c3041d3600642078f1eb4a8fa..f8e677db087e3d2899d2f354713a17eaee736d9b 100644 (file)
@@ -4,15 +4,15 @@
 
 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:128:128"
 
-declare i8 @memcpy(i8*, i8*, i32)
+declare i8 @memcpy(ptr, ptr, i32)
 
 ; Check that memcpy functions with the wrong prototype (doesn't return a pointer) aren't simplified.
 
-define i8 @test_no_simplify1(i8* %mem1, i8* %mem2, i32 %size) {
+define i8 @test_no_simplify1(ptr %mem1, ptr %mem2, i32 %size) {
 ; CHECK-LABEL: @test_no_simplify1(
-; CHECK-NEXT:    [[RET:%.*]] = call i8 @memcpy(i8* %mem1, i8* %mem2, i32 %size)
+; CHECK-NEXT:    [[RET:%.*]] = call i8 @memcpy(ptr %mem1, ptr %mem2, i32 %size)
 ; CHECK-NEXT:    ret i8 [[RET]]
 ;
-  %ret = call i8 @memcpy(i8* %mem1, i8* %mem2, i32 %size)
+  %ret = call i8 @memcpy(ptr %mem1, ptr %mem2, i32 %size)
   ret i8 %ret
 }
index 913e76e064368f7ab2ab2ef951dea78a85baa95a..4ee6ed22202413e500291464fc2f1b64e45001c6 100644 (file)
@@ -4,84 +4,78 @@
 ; RUN: opt < %s -passes=instcombine -S -data-layout=n32:64     | FileCheck %s
 ; RUN: opt < %s -passes=instcombine -S -data-layout=n32:64:128 | FileCheck %s
 
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i1) nounwind
+declare void @llvm.memcpy.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1) nounwind
 
 ; memcpy can be expanded inline with load/store (based on the datalayout?)
 
-define void @copy_1_byte(i8* %d, i8* %s) {
+define void @copy_1_byte(ptr %d, ptr %s) {
 ; CHECK-LABEL: @copy_1_byte(
-; CHECK-NEXT:    [[TMP1:%.*]] = load i8, i8* [[S:%.*]], align 1
-; CHECK-NEXT:    store i8 [[TMP1]], i8* [[D:%.*]], align 1
+; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[S:%.*]], align 1
+; CHECK-NEXT:    store i8 [[TMP1]], ptr [[D:%.*]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %d, i8* %s, i32 1, i1 false)
+  call void @llvm.memcpy.p0.p0.i32(ptr %d, ptr %s, i32 1, i1 false)
   ret void
 }
 
-define void @copy_2_bytes(i8* %d, i8* %s) {
+define void @copy_2_bytes(ptr %d, ptr %s) {
 ; CHECK-LABEL: @copy_2_bytes(
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8* [[S:%.*]] to i16*
-; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i8* [[D:%.*]] to i16*
-; CHECK-NEXT:    [[TMP3:%.*]] = load i16, i16* [[TMP1]], align 1
-; CHECK-NEXT:    store i16 [[TMP3]], i16* [[TMP2]], align 1
+; CHECK-NEXT:    [[TMP3:%.*]] = load i16, ptr [[S:%.*]], align 1
+; CHECK-NEXT:    store i16 [[TMP3]], ptr [[D:%.*]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %d, i8* %s, i32 2, i1 false)
+  call void @llvm.memcpy.p0.p0.i32(ptr %d, ptr %s, i32 2, i1 false)
   ret void
 }
 
 ; We don't expand small non-power-of-2. Should we? Might be a target-dependent choice.
 
-define void @copy_3_bytes(i8* %d, i8* %s) {
+define void @copy_3_bytes(ptr %d, ptr %s) {
 ; CHECK-LABEL: @copy_3_bytes(
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* noundef nonnull align 1 dereferenceable(3) [[D:%.*]], i8* noundef nonnull align 1 dereferenceable(3) [[S:%.*]], i32 3, i1 false)
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr noundef nonnull align 1 dereferenceable(3) [[D:%.*]], ptr noundef nonnull align 1 dereferenceable(3) [[S:%.*]], i32 3, i1 false)
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %d, i8* %s, i32 3, i1 false)
+  call void @llvm.memcpy.p0.p0.i32(ptr %d, ptr %s, i32 3, i1 false)
   ret void
 }
 
-define void @copy_4_bytes(i8* %d, i8* %s) {
+define void @copy_4_bytes(ptr %d, ptr %s) {
 ; CHECK-LABEL: @copy_4_bytes(
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8* [[S:%.*]] to i32*
-; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i8* [[D:%.*]] to i32*
-; CHECK-NEXT:    [[TMP3:%.*]] = load i32, i32* [[TMP1]], align 1
-; CHECK-NEXT:    store i32 [[TMP3]], i32* [[TMP2]], align 1
+; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[S:%.*]], align 1
+; CHECK-NEXT:    store i32 [[TMP3]], ptr [[D:%.*]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %d, i8* %s, i32 4, i1 false)
+  call void @llvm.memcpy.p0.p0.i32(ptr %d, ptr %s, i32 4, i1 false)
   ret void
 }
 
 ; We don't expand small non-power-of-2. Should we? Might be a target-dependent choice.
 
-define void @copy_5_bytes(i8* %d, i8* %s) {
+define void @copy_5_bytes(ptr %d, ptr %s) {
 ; CHECK-LABEL: @copy_5_bytes(
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* noundef nonnull align 1 dereferenceable(5) [[D:%.*]], i8* noundef nonnull align 1 dereferenceable(5) [[S:%.*]], i32 5, i1 false)
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr noundef nonnull align 1 dereferenceable(5) [[D:%.*]], ptr noundef nonnull align 1 dereferenceable(5) [[S:%.*]], i32 5, i1 false)
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %d, i8* %s, i32 5, i1 false)
+  call void @llvm.memcpy.p0.p0.i32(ptr %d, ptr %s, i32 5, i1 false)
   ret void
 }
 
-define void @copy_8_bytes(i8* %d, i8* %s) {
+define void @copy_8_bytes(ptr %d, ptr %s) {
 ; CHECK-LABEL: @copy_8_bytes(
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8* [[S:%.*]] to i64*
-; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i8* [[D:%.*]] to i64*
-; CHECK-NEXT:    [[TMP3:%.*]] = load i64, i64* [[TMP1]], align 1
-; CHECK-NEXT:    store i64 [[TMP3]], i64* [[TMP2]], align 1
+; CHECK-NEXT:    [[TMP3:%.*]] = load i64, ptr [[S:%.*]], align 1
+; CHECK-NEXT:    store i64 [[TMP3]], ptr [[D:%.*]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %d, i8* %s, i32 8, i1 false)
+  call void @llvm.memcpy.p0.p0.i32(ptr %d, ptr %s, i32 8, i1 false)
   ret void
 }
 
-define void @copy_16_bytes(i8* %d, i8* %s) {
+define void @copy_16_bytes(ptr %d, ptr %s) {
 ; CHECK-LABEL: @copy_16_bytes(
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i32(i8* noundef nonnull align 1 dereferenceable(16) [[D:%.*]], i8* noundef nonnull align 1 dereferenceable(16) [[S:%.*]], i32 16, i1 false)
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i32(ptr noundef nonnull align 1 dereferenceable(16) [[D:%.*]], ptr noundef nonnull align 1 dereferenceable(16) [[S:%.*]], i32 16, i1 false)
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %d, i8* %s, i32 16, i1 false)
+  call void @llvm.memcpy.p0.p0.i32(ptr %d, ptr %s, i32 16, i1 false)
   ret void
 }
 
index 18f0a1f9e2410a417b398e62559fdf878070e465..5803bd074bb3c68c754da9c199e51ebe5a3e6a83 100644 (file)
@@ -1,48 +1,47 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i1) nounwind
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i1) nounwind
+declare void @llvm.memcpy.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1) nounwind
+declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture, i64, i1) nounwind
 
 ; Same src/dest.
 
-define void @test1(i8* %a) {
+define void @test1(ptr %a) {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:    ret void
 ;
-  tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %a, i8* %a, i32 100, i1 false)
+  tail call void @llvm.memcpy.p0.p0.i32(ptr %a, ptr %a, i32 100, i1 false)
   ret void
 }
 
 ; PR8267 - same src/dest, but volatile.
 
-define void @test2(i8* %a) {
+define void @test2(ptr %a) {
 ; CHECK-LABEL: @test2(
-; CHECK-NEXT:    tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* [[A:%.*]], i8* [[A]], i32 100, i1 true)
+; CHECK-NEXT:    tail call void @llvm.memcpy.p0.p0.i32(ptr [[A:%.*]], ptr [[A]], i32 100, i1 true)
 ; CHECK-NEXT:    ret void
 ;
-  tail call void @llvm.memcpy.p0i8.p0i8.i32(i8* %a, i8* %a, i32 100, i1 true)
+  tail call void @llvm.memcpy.p0.p0.i32(ptr %a, ptr %a, i32 100, i1 true)
   ret void
 }
 
 ; 17179869184 == 0x400000000 - make sure that doesn't get truncated to 32-bit.
 
-define void @test3(i8* %d, i8* %s) {
+define void @test3(ptr %d, ptr %s) {
 ; CHECK-LABEL: @test3(
-; CHECK-NEXT:    tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 4 dereferenceable(17179869184) [[D:%.*]], i8* noundef nonnull align 4 dereferenceable(17179869184) [[S:%.*]], i64 17179869184, i1 false)
+; CHECK-NEXT:    tail call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(17179869184) [[D:%.*]], ptr noundef nonnull align 4 dereferenceable(17179869184) [[S:%.*]], i64 17179869184, i1 false)
 ; CHECK-NEXT:    ret void
 ;
-  tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %d, i8* align 4 %s, i64 17179869184, i1 false)
+  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %d, ptr align 4 %s, i64 17179869184, i1 false)
   ret void
 }
 
 @UnknownConstant = external constant i128
 
-define void @memcpy_to_constant(i8* %src) {
+define void @memcpy_to_constant(ptr %src) {
 ; CHECK-LABEL: @memcpy_to_constant(
 ; CHECK-NEXT:    ret void
 ;
-  %dest = bitcast i128* @UnknownConstant to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dest, i8* %src, i32 16, i1 false)
+  call void @llvm.memcpy.p0.p0.i32(ptr @UnknownConstant, ptr %src, i32 16, i1 false)
   ret void
 }
index 75d8b93a4c573c8e05e461c67f11cbee9dac5348..b2840378fe15ddb42e616bafc9233c45877c0d25 100644 (file)
@@ -13,12 +13,10 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 
 define void @test_no_simplify() {
 ; CHECK-LABEL: @test_no_simplify(
-  %dst = bitcast %struct.T1* @t1 to i8*
-  %src = bitcast %struct.T2* @t2 to i8*
 
-; CHECK-NEXT: call i8* @__memcpy_chk
-  call i8* @__memcpy_chk(i8* %dst, i8* %src, i64 1824)
+; CHECK-NEXT: call ptr @__memcpy_chk
+  call ptr @__memcpy_chk(ptr @t1, ptr @t2, i64 1824)
   ret void
 }
 
-declare i8* @__memcpy_chk(i8*, i8*, i64)
+declare ptr @__memcpy_chk(ptr, ptr, i64)
index 3899fc7877e6017ef53b50db7b094cde616d6ac9..2356bef60da5fe2cb45c84761581256dec0b8d56 100644 (file)
@@ -4,38 +4,38 @@
 
 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:128:128"
 
-declare i8* @memmove(i8*, i8*, i32)
+declare ptr @memmove(ptr, ptr, i32)
 
 ; Check memmove(mem1, mem2, size) -> llvm.memmove(mem1, mem2, size, 1).
 
-define i8* @test_simplify1(i8* %mem1, i8* %mem2, i32 %size) {
+define ptr @test_simplify1(ptr %mem1, ptr %mem2, i32 %size) {
 ; CHECK-LABEL: @test_simplify1(
-  %ret = call i8* @memmove(i8* %mem1, i8* %mem2, i32 %size)
+  %ret = call ptr @memmove(ptr %mem1, ptr %mem2, i32 %size)
 ; CHECK: call void @llvm.memmove
-  ret i8* %ret
-; CHECK: ret i8* %mem1
+  ret ptr %ret
+; CHECK: ret ptr %mem1
 }
 
-define i8* @test_simplify2(i8* %mem1, i8* %mem2, i32 %size) {
+define ptr @test_simplify2(ptr %mem1, ptr %mem2, i32 %size) {
 ; CHECK-LABEL: @test_simplify2(
 ; CHECK-NEXT:   tail call void @llvm.memmove
-; CHECK-NEXT:   ret i8* %mem1
-  %ret = tail call i8* @memmove(i8* %mem1, i8* %mem2, i32 %size)
-  ret i8* %ret
+; CHECK-NEXT:   ret ptr %mem1
+  %ret = tail call ptr @memmove(ptr %mem1, ptr %mem2, i32 %size)
+  ret ptr %ret
 }
 
-define i8* @test_no_simplify1(i8* %mem1, i8* %mem2, i32 %size) {
+define ptr @test_no_simplify1(ptr %mem1, ptr %mem2, i32 %size) {
 ; CHECK-LABEL: @test_no_simplify1(
-; CHECK-NEXT:   %ret = musttail call i8* @memmove(i8* %mem1, i8* %mem2, i32 %size)
-; CHECK-NEXT:   ret i8* %ret
-  %ret = musttail call i8* @memmove(i8* %mem1, i8* %mem2, i32 %size)
-  ret i8* %ret
+; CHECK-NEXT:   %ret = musttail call ptr @memmove(ptr %mem1, ptr %mem2, i32 %size)
+; CHECK-NEXT:   ret ptr %ret
+  %ret = musttail call ptr @memmove(ptr %mem1, ptr %mem2, i32 %size)
+  ret ptr %ret
 }
 
-define i8* @test_no_incompatible_attr(i8* %mem1, i8* %mem2, i32 %size) {
+define ptr @test_no_incompatible_attr(ptr %mem1, ptr %mem2, i32 %size) {
 ; CHECK-LABEL: @test_no_incompatible_attr(
-  %ret = call dereferenceable(1) i8* @memmove(i8* %mem1, i8* %mem2, i32 %size)
+  %ret = call dereferenceable(1) ptr @memmove(ptr %mem1, ptr %mem2, i32 %size)
 ; CHECK: call void @llvm.memmove
-  ret i8* %ret
-; CHECK: ret i8* %mem1
+  ret ptr %ret
+; CHECK: ret ptr %mem1
 }
index 9fd7c613d3d75896ab76983a64ee0b9d36a017fc..a1ad1a78ad73d7acefce83db6f494be0d48a3206 100644 (file)
@@ -4,13 +4,13 @@
 
 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:128:128"
 
-declare i8 @memmove(i8*, i8*, i32)
+declare i8 @memmove(ptr, ptr, i32)
 
 ; Check that memmove functions with the wrong prototype aren't simplified.
 
-define i8 @test_no_simplify1(i8* %mem1, i8* %mem2, i32 %size) {
+define i8 @test_no_simplify1(ptr %mem1, ptr %mem2, i32 %size) {
 ; CHECK-LABEL: @test_no_simplify1(
-  %ret = call i8 @memmove(i8* %mem1, i8* %mem2, i32 %size)
+  %ret = call i8 @memmove(ptr %mem1, ptr %mem2, i32 %size)
 ; CHECK: call i8 @memmove
   ret i8 %ret
 ; CHECK: ret i8 %ret
index 01dd8ca427bf928522c96d72eacc78f5925bfe80..11defff2a441bceb2dcaef4353ec98955038f52b 100644 (file)
@@ -13,12 +13,10 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 
 define void @test_no_simplify() {
 ; CHECK-LABEL: @test_no_simplify(
-  %dst = bitcast %struct.T1* @t1 to i8*
-  %src = bitcast %struct.T2* @t2 to i8*
 
-; CHECK-NEXT: call i8* @__memmove_chk
-  call i8* @__memmove_chk(i8* %dst, i8* %src, i64 1824)
+; CHECK-NEXT: call ptr @__memmove_chk
+  call ptr @__memmove_chk(ptr @t1, ptr @t2, i64 1824)
   ret void
 }
 
-declare i8* @__memmove_chk(i8*, i8*, i64)
+declare ptr @__memmove_chk(ptr, ptr, i64)
index d74ce53246cffd9be00e3278e4563a0e951bf722..7f1e856a5a40c426b3b79226524dd239ecf69683 100644 (file)
@@ -1,76 +1,74 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-define i8* @memcpy_nonconst_n(i8* %d, i8* nocapture readonly %s, i64 %n) {
+define ptr @memcpy_nonconst_n(ptr %d, ptr nocapture readonly %s, i64 %n) {
 ; CHECK-LABEL: @memcpy_nonconst_n(
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 [[D:%.*]], i8* align 1 [[S:%.*]], i64 [[N:%.*]], i1 false)
-; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, i8* [[D]], i64 [[N]]
-; CHECK-NEXT:    ret i8* [[TMP1]]
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 1 [[D:%.*]], ptr align 1 [[S:%.*]], i64 [[N:%.*]], i1 false)
+; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[D]], i64 [[N]]
+; CHECK-NEXT:    ret ptr [[TMP1]]
 ;
-  %r = tail call i8* @mempcpy(i8* %d, i8* %s, i64 %n)
-  ret i8* %r
+  %r = tail call ptr @mempcpy(ptr %d, ptr %s, i64 %n)
+  ret ptr %r
 }
 
-define i8* @memcpy_nonconst_n_copy_attrs(i8* %d, i8* nocapture readonly %s, i64 %n) {
+define ptr @memcpy_nonconst_n_copy_attrs(ptr %d, ptr nocapture readonly %s, i64 %n) {
 ; CHECK-LABEL: @memcpy_nonconst_n_copy_attrs(
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 dereferenceable(16) [[D:%.*]], i8* align 1 [[S:%.*]], i64 [[N:%.*]], i1 false)
-; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, i8* [[D]], i64 [[N]]
-; CHECK-NEXT:    ret i8* [[TMP1]]
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 1 dereferenceable(16) [[D:%.*]], ptr align 1 [[S:%.*]], i64 [[N:%.*]], i1 false)
+; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[D]], i64 [[N]]
+; CHECK-NEXT:    ret ptr [[TMP1]]
 ;
-  %r = tail call i8* @mempcpy(i8* dereferenceable(16) %d, i8* %s, i64 %n)
-  ret i8* %r
+  %r = tail call ptr @mempcpy(ptr dereferenceable(16) %d, ptr %s, i64 %n)
+  ret ptr %r
 }
 
-define void @memcpy_nonconst_n_unused_retval(i8* %d, i8* nocapture readonly %s, i64 %n) {
+define void @memcpy_nonconst_n_unused_retval(ptr %d, ptr nocapture readonly %s, i64 %n) {
 ; CHECK-LABEL: @memcpy_nonconst_n_unused_retval(
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 [[D:%.*]], i8* align 1 [[S:%.*]], i64 [[N:%.*]], i1 false)
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 1 [[D:%.*]], ptr align 1 [[S:%.*]], i64 [[N:%.*]], i1 false)
 ; CHECK-NEXT:    ret void
 ;
-  call i8* @mempcpy(i8* %d, i8* %s, i64 %n)
+  call ptr @mempcpy(ptr %d, ptr %s, i64 %n)
   ret void
 }
 
-define i8* @memcpy_small_const_n(i8* %d, i8* nocapture readonly %s) {
+define ptr @memcpy_small_const_n(ptr %d, ptr nocapture readonly %s) {
 ; CHECK-LABEL: @memcpy_small_const_n(
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8* [[S:%.*]] to i64*
-; CHECK-NEXT:    [[TMP2:%.*]] = bitcast i8* [[D:%.*]] to i64*
-; CHECK-NEXT:    [[TMP3:%.*]] = load i64, i64* [[TMP1]], align 1
-; CHECK-NEXT:    store i64 [[TMP3]], i64* [[TMP2]], align 1
-; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr inbounds i8, i8* [[D]], i64 8
-; CHECK-NEXT:    ret i8* [[TMP4]]
+; CHECK-NEXT:    [[TMP3:%.*]] = load i64, ptr [[S:%.*]], align 1
+; CHECK-NEXT:    store i64 [[TMP3]], ptr [[D:%.*]], align 1
+; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr inbounds i8, ptr [[D]], i64 8
+; CHECK-NEXT:    ret ptr [[TMP4]]
 ;
-  %r = tail call i8* @mempcpy(i8* %d, i8* %s, i64 8)
-  ret i8* %r
+  %r = tail call ptr @mempcpy(ptr %d, ptr %s, i64 8)
+  ret ptr %r
 }
 
-define i8* @memcpy_big_const_n(i8* %d, i8* nocapture readonly %s) {
+define ptr @memcpy_big_const_n(ptr %d, ptr nocapture readonly %s) {
 ; CHECK-LABEL: @memcpy_big_const_n(
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 1 dereferenceable(1024) [[D:%.*]], i8* noundef nonnull align 1 dereferenceable(1024) [[S:%.*]], i64 1024, i1 false)
-; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, i8* [[D]], i64 1024
-; CHECK-NEXT:    ret i8* [[TMP1]]
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(1024) [[D:%.*]], ptr noundef nonnull align 1 dereferenceable(1024) [[S:%.*]], i64 1024, i1 false)
+; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[D]], i64 1024
+; CHECK-NEXT:    ret ptr [[TMP1]]
 ;
-  %r = tail call i8* @mempcpy(i8* %d, i8* %s, i64 1024)
-  ret i8* %r
+  %r = tail call ptr @mempcpy(ptr %d, ptr %s, i64 1024)
+  ret ptr %r
 }
 
 ; The original call may have attributes that can not propagate to memcpy.
 
 define i32 @PR48810() {
 ; CHECK-LABEL: @PR48810(
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 1 undef, i8* align 4294967296 null, i64 undef, i1 false)
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr align 1 undef, ptr align 4294967296 null, i64 undef, i1 false)
 ; CHECK-NEXT:    ret i32 undef
 ;
-  %r = call dereferenceable(1) i8* @mempcpy(i8* undef, i8* null, i64 undef)
+  %r = call dereferenceable(1) ptr @mempcpy(ptr undef, ptr null, i64 undef)
   ret i32 undef
 }
 
-define i8* @memcpy_no_simplify1(i8* %d, i8* nocapture readonly %s, i64 %n) {
+define ptr @memcpy_no_simplify1(ptr %d, ptr nocapture readonly %s, i64 %n) {
 ; CHECK-LABEL: @memcpy_no_simplify1(
-; CHECK-NEXT:    %r = musttail call i8* @mempcpy(i8* %d, i8* %s, i64 %n)
-; CHECK-NEXT:    ret i8* %r
+; CHECK-NEXT:    %r = musttail call ptr @mempcpy(ptr %d, ptr %s, i64 %n)
+; CHECK-NEXT:    ret ptr %r
 ;
-  %r = musttail call i8* @mempcpy(i8* %d, i8* %s, i64 %n)
-  ret i8* %r
+  %r = musttail call ptr @mempcpy(ptr %d, ptr %s, i64 %n)
+  ret ptr %r
 }
 
-declare i8* @mempcpy(i8*, i8* nocapture readonly, i64)
+declare ptr @mempcpy(ptr, ptr nocapture readonly, i64)
index 8426d1e2580acdd619127c8b67593d08d9c6cd91..59b2accf15ba5d09d3c87a3491949f07de1e02de 100644 (file)
@@ -4,7 +4,7 @@
 ; Verify that memrchr calls with an out of bounds size are not folded to
 ; null (they might be intercepted by sanitizers).
 
-declare i8* @memrchr(i8*, i32, i64)
+declare ptr @memrchr(ptr, i32, i64)
 
 @ax = external global [0 x i8]
 @ax1 = external global [1 x i8]
@@ -14,69 +14,64 @@ declare i8* @memrchr(i8*, i32, i64)
 ; Do not fold memrchr(a12345, C, UINT32_MAX + 1LU) to null or to a12345
 ; as might happen if the size were to be truncated to int32_t.
 
-define i8* @call_memrchr_a12345_c_ui32max_p1(i32 %C) {
+define ptr @call_memrchr_a12345_c_ui32max_p1(i32 %C) {
 ; CHECK-LABEL: @call_memrchr_a12345_c_ui32max_p1(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @memrchr(i8* noundef nonnull dereferenceable(4294967296) getelementptr inbounds ([5 x i8], [5 x i8]* @a12345, i64 0, i64 0), i32 [[C:%.*]], i64 4294967296)
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr noundef nonnull dereferenceable(4294967296) @a12345, i32 [[C:%.*]], i64 4294967296)
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
 
-  %ptr = getelementptr [5 x i8], [5 x i8]* @a12345, i64 0, i64 0
-  %ret = call i8* @memrchr(i8* %ptr, i32 %C, i64 4294967296)
-  ret i8* %ret
+  %ret = call ptr @memrchr(ptr @a12345, i32 %C, i64 4294967296)
+  ret ptr %ret
 }
 
 
 ; Do not fold memrchr(ax1, C, UINT32_MAX + 2LU) to null or to *ax1 == 1.
 
-define i8* @call_memrchr_ax1_c_ui32max_p2(i32 %C) {
+define ptr @call_memrchr_ax1_c_ui32max_p2(i32 %C) {
 ; CHECK-LABEL: @call_memrchr_ax1_c_ui32max_p2(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @memrchr(i8* noundef nonnull dereferenceable(4294967297) getelementptr inbounds ([1 x i8], [1 x i8]* @ax1, i64 0, i64 0), i32 [[C:%.*]], i64 4294967297)
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr noundef nonnull dereferenceable(4294967297) @ax1, i32 [[C:%.*]], i64 4294967297)
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
 
-  %ptr = getelementptr [1 x i8], [1 x i8]* @ax1, i64 0, i64 0
-  %ret = call i8* @memrchr(i8* %ptr, i32 %C, i64 4294967297)
-  ret i8* %ret
+  %ret = call ptr @memrchr(ptr @ax1, i32 %C, i64 4294967297)
+  ret ptr %ret
 }
 
 
 ; Do not fold memrchr(ax, C, UINT32_MAX + 2LU) to *ax == 1.
 
-define i8* @call_memrchr_ax_c_ui32max_p2(i32 %C) {
+define ptr @call_memrchr_ax_c_ui32max_p2(i32 %C) {
 ; CHECK-LABEL: @call_memrchr_ax_c_ui32max_p2(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @memrchr(i8* noundef nonnull dereferenceable(4294967297) getelementptr inbounds ([0 x i8], [0 x i8]* @ax, i64 0, i64 0), i32 [[C:%.*]], i64 4294967297)
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr noundef nonnull dereferenceable(4294967297) @ax, i32 [[C:%.*]], i64 4294967297)
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
 
-  %ptr = getelementptr [0 x i8], [0 x i8]* @ax, i64 0, i64 0
-  %ret = call i8* @memrchr(i8* %ptr, i32 %C, i64 4294967297)
-  ret i8* %ret
+  %ret = call ptr @memrchr(ptr @ax, i32 %C, i64 4294967297)
+  ret ptr %ret
 }
 
 
 ; Do not fold memrchr(a12345, C, 6) to null.
 
-define i8* @call_memrchr_a12345_c_6(i32 %C) {
+define ptr @call_memrchr_a12345_c_6(i32 %C) {
 ; CHECK-LABEL: @call_memrchr_a12345_c_6(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @memrchr(i8* noundef nonnull dereferenceable(6) getelementptr inbounds ([5 x i8], [5 x i8]* @a12345, i64 0, i64 0), i32 [[C:%.*]], i64 6)
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr noundef nonnull dereferenceable(6) @a12345, i32 [[C:%.*]], i64 6)
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
 
-  %ptr = getelementptr [5 x i8], [5 x i8]* @a12345, i64 0, i64 0
-  %ret = call i8* @memrchr(i8* %ptr, i32 %C, i64 6)
-  ret i8* %ret
+  %ret = call ptr @memrchr(ptr @a12345, i32 %C, i64 6)
+  ret ptr %ret
 }
 
 
 ; Do not fold memrchr(a12345, C, SIZE_MAX) to null.
 
-define i8* @call_memrchr_a12345_c_szmax(i32 %C) {
+define ptr @call_memrchr_a12345_c_szmax(i32 %C) {
 ; CHECK-LABEL: @call_memrchr_a12345_c_szmax(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @memrchr(i8* noundef nonnull dereferenceable(18446744073709551615) getelementptr inbounds ([5 x i8], [5 x i8]* @a12345, i64 0, i64 0), i32 [[C:%.*]], i64 -1)
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr noundef nonnull dereferenceable(18446744073709551615) @a12345, i32 [[C:%.*]], i64 -1)
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
 
-  %ptr = getelementptr [5 x i8], [5 x i8]* @a12345, i64 0, i64 0
-  %ret = call i8* @memrchr(i8* %ptr, i32 %C, i64 18446744073709551615)
-  ret i8* %ret
+  %ret = call ptr @memrchr(ptr @a12345, i32 %C, i64 18446744073709551615)
+  ret ptr %ret
 }
index 43156559123eb28e71006cd0c7d540e3599e85e3..535c01fd6fe797f902e19f28248a28414a7c3846 100644 (file)
@@ -4,7 +4,7 @@
 ; RUN: opt < %s -passes=instcombine -S -data-layout="E" | FileCheck %s --check-prefixes=BE
 ; RUN: opt < %s -passes=instcombine -S -data-layout="e" | FileCheck %s --check-prefixes=LE
 
-declare i8* @memrchr(i8*, i32, i64)
+declare ptr @memrchr(ptr, i32, i64)
 
 ; BE representation: { 'a', 'b', 'c', 'd', 'e', ..., 'p', 'a', 'b', 'c', 'd' }
 ; LE representation: { 'd', 'c', 'b', 'a', 'h', ..., 'm', 'd', 'c', 'b', 'a' }
@@ -13,109 +13,106 @@ declare i8* @memrchr(i8*, i32, i64)
 
 ; Fold memrchr(a, C, 16) for C in ['a', 'd'] U ['o', 'q'].
 
-define void @fold_memrchr_a_16(i64* %pcmp) {
+define void @fold_memrchr_a_16(ptr %pcmp) {
 ; BE-LABEL: @fold_memrchr_a_16(
-; BE-NEXT:    store i64 0, i64* [[PCMP:%.*]], align 4
-; BE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, i64* [[PCMP]], i64 1
-; BE-NEXT:    store i64 1, i64* [[PSTOR1]], align 4
-; BE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, i64* [[PCMP]], i64 2
-; BE-NEXT:    store i64 2, i64* [[PSTOR2]], align 4
-; BE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, i64* [[PCMP]], i64 3
-; BE-NEXT:    store i64 3, i64* [[PSTOR3]], align 4
-; BE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, i64* [[PCMP]], i64 4
-; BE-NEXT:    store i64 13, i64* [[PSTOR4]], align 4
-; BE-NEXT:    [[PSTOR6:%.*]] = getelementptr i64, i64* [[PCMP]], i64 6
-; BE-NEXT:    store i64 14, i64* [[PSTOR6]], align 4
-; BE-NEXT:    [[PSTOR7:%.*]] = getelementptr i64, i64* [[PCMP]], i64 7
-; BE-NEXT:    store i64 15, i64* [[PSTOR7]], align 4
-; BE-NEXT:    [[PSTOR8:%.*]] = getelementptr i64, i64* [[PCMP]], i64 8
-; BE-NEXT:    store i64 0, i64* [[PSTOR8]], align 4
+; BE-NEXT:    store i64 0, ptr [[PCMP:%.*]], align 4
+; BE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, ptr [[PCMP]], i64 1
+; BE-NEXT:    store i64 1, ptr [[PSTOR1]], align 4
+; BE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, ptr [[PCMP]], i64 2
+; BE-NEXT:    store i64 2, ptr [[PSTOR2]], align 4
+; BE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, ptr [[PCMP]], i64 3
+; BE-NEXT:    store i64 3, ptr [[PSTOR3]], align 4
+; BE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, ptr [[PCMP]], i64 4
+; BE-NEXT:    store i64 13, ptr [[PSTOR4]], align 4
+; BE-NEXT:    [[PSTOR6:%.*]] = getelementptr i64, ptr [[PCMP]], i64 6
+; BE-NEXT:    store i64 14, ptr [[PSTOR6]], align 4
+; BE-NEXT:    [[PSTOR7:%.*]] = getelementptr i64, ptr [[PCMP]], i64 7
+; BE-NEXT:    store i64 15, ptr [[PSTOR7]], align 4
+; BE-NEXT:    [[PSTOR8:%.*]] = getelementptr i64, ptr [[PCMP]], i64 8
+; BE-NEXT:    store i64 0, ptr [[PSTOR8]], align 4
 ; BE-NEXT:    ret void
 ;
 ; LE-LABEL: @fold_memrchr_a_16(
-; LE-NEXT:    store i64 3, i64* [[PCMP:%.*]], align 4
-; LE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, i64* [[PCMP]], i64 1
-; LE-NEXT:    store i64 2, i64* [[PSTOR1]], align 4
-; LE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, i64* [[PCMP]], i64 2
-; LE-NEXT:    store i64 1, i64* [[PSTOR2]], align 4
-; LE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, i64* [[PCMP]], i64 3
-; LE-NEXT:    store i64 0, i64* [[PSTOR3]], align 4
-; LE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, i64* [[PCMP]], i64 4
-; LE-NEXT:    store i64 14, i64* [[PSTOR4]], align 4
-; LE-NEXT:    [[PSTOR6:%.*]] = getelementptr i64, i64* [[PCMP]], i64 6
-; LE-NEXT:    store i64 13, i64* [[PSTOR6]], align 4
-; LE-NEXT:    [[PSTOR7:%.*]] = getelementptr i64, i64* [[PCMP]], i64 7
-; LE-NEXT:    store i64 12, i64* [[PSTOR7]], align 4
-; LE-NEXT:    [[PSTOR8:%.*]] = getelementptr i64, i64* [[PCMP]], i64 8
-; LE-NEXT:    store i64 0, i64* [[PSTOR8]], align 4
+; LE-NEXT:    store i64 3, ptr [[PCMP:%.*]], align 4
+; LE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, ptr [[PCMP]], i64 1
+; LE-NEXT:    store i64 2, ptr [[PSTOR1]], align 4
+; LE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, ptr [[PCMP]], i64 2
+; LE-NEXT:    store i64 1, ptr [[PSTOR2]], align 4
+; LE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, ptr [[PCMP]], i64 3
+; LE-NEXT:    store i64 0, ptr [[PSTOR3]], align 4
+; LE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, ptr [[PCMP]], i64 4
+; LE-NEXT:    store i64 14, ptr [[PSTOR4]], align 4
+; LE-NEXT:    [[PSTOR6:%.*]] = getelementptr i64, ptr [[PCMP]], i64 6
+; LE-NEXT:    store i64 13, ptr [[PSTOR6]], align 4
+; LE-NEXT:    [[PSTOR7:%.*]] = getelementptr i64, ptr [[PCMP]], i64 7
+; LE-NEXT:    store i64 12, ptr [[PSTOR7]], align 4
+; LE-NEXT:    [[PSTOR8:%.*]] = getelementptr i64, ptr [[PCMP]], i64 8
+; LE-NEXT:    store i64 0, ptr [[PSTOR8]], align 4
 ; LE-NEXT:    ret void
 ;
-  %p0 = getelementptr [5 x i32], [5 x i32]* @a, i64 0, i64 0
-  %p1 = bitcast i32* %p0 to i8*
-  %ip0 = ptrtoint [5 x i32]* @a to i64
+  %ip0 = ptrtoint ptr @a to i64
 
 ; Fold memrchr(a, 'a', 16) - a to 0 (3 in LE).
 
-  %pa = call i8* @memrchr(i8* %p1, i32 97, i64 16)
-  %ipa = ptrtoint i8* %pa to i64
+  %pa = call ptr @memrchr(ptr @a, i32 97, i64 16)
+  %ipa = ptrtoint ptr %pa to i64
   %offa = sub i64 %ipa, %ip0
-  %pstor0 = getelementptr i64, i64* %pcmp, i64 0
-  store i64 %offa, i64* %pstor0
+  store i64 %offa, ptr %pcmp
 
 ; Fold memrchr(a, 'b', 16) - a to 1 (2 in LE)
 
-  %pb = call i8* @memrchr(i8* %p1, i32 98, i64 16)
-  %ipb = ptrtoint i8* %pb to i64
+  %pb = call ptr @memrchr(ptr @a, i32 98, i64 16)
+  %ipb = ptrtoint ptr %pb to i64
   %offb = sub i64 %ipb, %ip0
-  %pstor1 = getelementptr i64, i64* %pcmp, i64 1
-  store i64 %offb, i64* %pstor1
+  %pstor1 = getelementptr i64, ptr %pcmp, i64 1
+  store i64 %offb, ptr %pstor1
 
 ; Fold memrchr(a, 'c', 16) - a to 2 (1 in LE)
 
-  %pc = call i8* @memrchr(i8* %p1, i32 99, i64 16)
-  %ipc = ptrtoint i8* %pc to i64
+  %pc = call ptr @memrchr(ptr @a, i32 99, i64 16)
+  %ipc = ptrtoint ptr %pc to i64
   %offc = sub i64 %ipc, %ip0
-  %pstor2 = getelementptr i64, i64* %pcmp, i64 2
-  store i64 %offc, i64* %pstor2
+  %pstor2 = getelementptr i64, ptr %pcmp, i64 2
+  store i64 %offc, ptr %pstor2
 
 ; Fold memrchr(a, 'd', 16) - a to 3 (0 in LE)
 
-  %pd = call i8* @memrchr(i8* %p1, i32 100, i64 16)
-  %ipd = ptrtoint i8* %pd to i64
+  %pd = call ptr @memrchr(ptr @a, i32 100, i64 16)
+  %ipd = ptrtoint ptr %pd to i64
   %offd = sub i64 %ipd, %ip0
-  %pstor3 = getelementptr i64, i64* %pcmp, i64 3
-  store i64 %offd, i64* %pstor3
+  %pstor3 = getelementptr i64, ptr %pcmp, i64 3
+  store i64 %offd, ptr %pstor3
 
 ; Fold memrchr(a, 'n', 16) - a to 13 (14 in LE)
 
-  %pn = call i8* @memrchr(i8* %p1, i32 110, i64 16)
-  %ipn = ptrtoint i8* %pn to i64
+  %pn = call ptr @memrchr(ptr @a, i32 110, i64 16)
+  %ipn = ptrtoint ptr %pn to i64
   %offn = sub i64 %ipn, %ip0
-  %pstor4 = getelementptr i64, i64* %pcmp, i64 4
-  store i64 %offn, i64* %pstor4
+  %pstor4 = getelementptr i64, ptr %pcmp, i64 4
+  store i64 %offn, ptr %pstor4
 
 ; Fold memrchr(a, 'o', 16) - a to 14 (13 in LE)
 
-  %po = call i8* @memrchr(i8* %p1, i32 111, i64 16)
-  %ipo = ptrtoint i8* %po to i64
+  %po = call ptr @memrchr(ptr @a, i32 111, i64 16)
+  %ipo = ptrtoint ptr %po to i64
   %offo = sub i64 %ipo, %ip0
-  %pstor6 = getelementptr i64, i64* %pcmp, i64 6
-  store i64 %offo, i64* %pstor6
+  %pstor6 = getelementptr i64, ptr %pcmp, i64 6
+  store i64 %offo, ptr %pstor6
 
 ; Fold memrchr(a, 'p', 16) - a to 15 (12 in LE)
 
-  %pp = call i8* @memrchr(i8* %p1, i32 112, i64 16)
-  %ipp = ptrtoint i8* %pp to i64
+  %pp = call ptr @memrchr(ptr @a, i32 112, i64 16)
+  %ipp = ptrtoint ptr %pp to i64
   %offp = sub i64 %ipp, %ip0
-  %pstor7 = getelementptr i64, i64* %pcmp, i64 7
-  store i64 %offp, i64* %pstor7
+  %pstor7 = getelementptr i64, ptr %pcmp, i64 7
+  store i64 %offp, ptr %pstor7
 
 ; Fold memrchr(a, 'q', 16) to null in both BE and LE.
 
-  %pq = call i8* @memrchr(i8* %p1, i32 113, i64 16)
-  %ipq = ptrtoint i8* %pq to i64
-  %pstor8 = getelementptr i64, i64* %pcmp, i64 8
-  store i64 %ipq, i64* %pstor8
+  %pq = call ptr @memrchr(ptr @a, i32 113, i64 16)
+  %ipq = ptrtoint ptr %pq to i64
+  %pstor8 = getelementptr i64, ptr %pcmp, i64 8
+  store i64 %ipq, ptr %pstor8
 
   ret void
 }
@@ -123,84 +120,82 @@ define void @fold_memrchr_a_16(i64* %pcmp) {
 
 ; Fold memrchr(a + 1, C, 12) for C in ['e', 'h'] U ['a', 'd'].
 
-define void @fold_memrchr_a_p1_16(i64* %pcmp) {
+define void @fold_memrchr_a_p1_16(ptr %pcmp) {
 ; BE-LABEL: @fold_memrchr_a_p1_16(
-; BE-NEXT:    store i64 0, i64* [[PCMP:%.*]], align 4
-; BE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, i64* [[PCMP]], i64 1
-; BE-NEXT:    store i64 1, i64* [[PSTOR1]], align 4
-; BE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, i64* [[PCMP]], i64 2
-; BE-NEXT:    store i64 2, i64* [[PSTOR2]], align 4
-; BE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, i64* [[PCMP]], i64 3
-; BE-NEXT:    store i64 3, i64* [[PSTOR3]], align 4
-; BE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, i64* [[PCMP]], i64 4
-; BE-NEXT:    store i64 0, i64* [[PSTOR4]], align 4
-; BE-NEXT:    [[PSTOR5:%.*]] = getelementptr i64, i64* [[PCMP]], i64 5
-; BE-NEXT:    store i64 0, i64* [[PSTOR5]], align 4
+; BE-NEXT:    store i64 0, ptr [[PCMP:%.*]], align 4
+; BE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, ptr [[PCMP]], i64 1
+; BE-NEXT:    store i64 1, ptr [[PSTOR1]], align 4
+; BE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, ptr [[PCMP]], i64 2
+; BE-NEXT:    store i64 2, ptr [[PSTOR2]], align 4
+; BE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, ptr [[PCMP]], i64 3
+; BE-NEXT:    store i64 3, ptr [[PSTOR3]], align 4
+; BE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, ptr [[PCMP]], i64 4
+; BE-NEXT:    store i64 0, ptr [[PSTOR4]], align 4
+; BE-NEXT:    [[PSTOR5:%.*]] = getelementptr i64, ptr [[PCMP]], i64 5
+; BE-NEXT:    store i64 0, ptr [[PSTOR5]], align 4
 ; BE-NEXT:    ret void
 ;
 ; LE-LABEL: @fold_memrchr_a_p1_16(
-; LE-NEXT:    store i64 3, i64* [[PCMP:%.*]], align 4
-; LE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, i64* [[PCMP]], i64 1
-; LE-NEXT:    store i64 2, i64* [[PSTOR1]], align 4
-; LE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, i64* [[PCMP]], i64 2
-; LE-NEXT:    store i64 1, i64* [[PSTOR2]], align 4
-; LE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, i64* [[PCMP]], i64 3
-; LE-NEXT:    store i64 0, i64* [[PSTOR3]], align 4
-; LE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, i64* [[PCMP]], i64 4
-; LE-NEXT:    store i64 0, i64* [[PSTOR4]], align 4
-; LE-NEXT:    [[PSTOR5:%.*]] = getelementptr i64, i64* [[PCMP]], i64 5
-; LE-NEXT:    store i64 0, i64* [[PSTOR5]], align 4
+; LE-NEXT:    store i64 3, ptr [[PCMP:%.*]], align 4
+; LE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, ptr [[PCMP]], i64 1
+; LE-NEXT:    store i64 2, ptr [[PSTOR1]], align 4
+; LE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, ptr [[PCMP]], i64 2
+; LE-NEXT:    store i64 1, ptr [[PSTOR2]], align 4
+; LE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, ptr [[PCMP]], i64 3
+; LE-NEXT:    store i64 0, ptr [[PSTOR3]], align 4
+; LE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, ptr [[PCMP]], i64 4
+; LE-NEXT:    store i64 0, ptr [[PSTOR4]], align 4
+; LE-NEXT:    [[PSTOR5:%.*]] = getelementptr i64, ptr [[PCMP]], i64 5
+; LE-NEXT:    store i64 0, ptr [[PSTOR5]], align 4
 ; LE-NEXT:    ret void
 ;
-  %p0 = getelementptr [5 x i32], [5 x i32]* @a, i64 0, i64 1
-  %p1 = bitcast i32* %p0 to i8*
-  %ip0 = ptrtoint i8* %p1 to i64
+  %p0 = getelementptr [5 x i32], ptr @a, i64 0, i64 1
+  %ip0 = ptrtoint ptr %p0 to i64
 
 ; Fold memrchr(a + 1, 'e', 12) - a to 0 (3 in LE).
 
-  %pe = call i8* @memrchr(i8* %p1, i32 101, i64 12)
-  %ipe = ptrtoint i8* %pe to i64
+  %pe = call ptr @memrchr(ptr %p0, i32 101, i64 12)
+  %ipe = ptrtoint ptr %pe to i64
   %offe = sub i64 %ipe, %ip0
-  %pstor0 = getelementptr i64, i64* %pcmp, i64 0
-  store i64 %offe, i64* %pstor0
+  store i64 %offe, ptr %pcmp
 
 ; Fold memrchr(a + 1, 'f', 12) - a to 1 (2 in LE).
 
-  %pf = call i8* @memrchr(i8* %p1, i32 102, i64 12)
-  %ipf = ptrtoint i8* %pf to i64
+  %pf = call ptr @memrchr(ptr %p0, i32 102, i64 12)
+  %ipf = ptrtoint ptr %pf to i64
   %offf = sub i64 %ipf, %ip0
-  %pstor1 = getelementptr i64, i64* %pcmp, i64 1
-  store i64 %offf, i64* %pstor1
+  %pstor1 = getelementptr i64, ptr %pcmp, i64 1
+  store i64 %offf, ptr %pstor1
 
 ; Fold memrchr(a + 1, 'g', 12) - a to 2 (1 in LE).
 
-  %pg = call i8* @memrchr(i8* %p1, i32 103, i64 12)
-  %ipg = ptrtoint i8* %pg to i64
+  %pg = call ptr @memrchr(ptr %p0, i32 103, i64 12)
+  %ipg = ptrtoint ptr %pg to i64
   %offg = sub i64 %ipg, %ip0
-  %pstor2 = getelementptr i64, i64* %pcmp, i64 2
-  store i64 %offg, i64* %pstor2
+  %pstor2 = getelementptr i64, ptr %pcmp, i64 2
+  store i64 %offg, ptr %pstor2
 
 ; Fold memrchr(a + 1, 'h', 12) - a to 3 (0 in LE).
 
-  %ph = call i8* @memrchr(i8* %p1, i32 104, i64 12)
-  %iph = ptrtoint i8* %ph to i64
+  %ph = call ptr @memrchr(ptr %p0, i32 104, i64 12)
+  %iph = ptrtoint ptr %ph to i64
   %offh = sub i64 %iph, %ip0
-  %pstor3 = getelementptr i64, i64* %pcmp, i64 3
-  store i64 %offh, i64* %pstor3
+  %pstor3 = getelementptr i64, ptr %pcmp, i64 3
+  store i64 %offh, ptr %pstor3
 
 ; Fold memrchr(a + 1, 'a', 12) to null in both BE and LE.
 
-  %pa = call i8* @memrchr(i8* %p1, i32 97, i64 12)
-  %ipa = ptrtoint i8* %pa to i64
-  %pstor4 = getelementptr i64, i64* %pcmp, i64 4
-  store i64 %ipa, i64* %pstor4
+  %pa = call ptr @memrchr(ptr %p0, i32 97, i64 12)
+  %ipa = ptrtoint ptr %pa to i64
+  %pstor4 = getelementptr i64, ptr %pcmp, i64 4
+  store i64 %ipa, ptr %pstor4
 
 ; Fold memrchr(a + 1, 'd', 12) to null in both BE and LE.
 
-  %pd = call i8* @memrchr(i8* %p1, i32 100, i64 12)
-  %ipd = ptrtoint i8* %pd to i64
-  %pstor5 = getelementptr i64, i64* %pcmp, i64 5
-  store i64 %ipd, i64* %pstor5
+  %pd = call ptr @memrchr(ptr %p0, i32 100, i64 12)
+  %ipd = ptrtoint ptr %pd to i64
+  %pstor5 = getelementptr i64, ptr %pcmp, i64 5
+  store i64 %ipd, ptr %pstor5
 
   ret void
 }
@@ -208,74 +203,71 @@ define void @fold_memrchr_a_p1_16(i64* %pcmp) {
 
 ; Fold memrchr(a, C, 20) for C in ['a', 'e'].
 
-define void @fold_memrchr_a_20(i64* %pcmp) {
+define void @fold_memrchr_a_20(ptr %pcmp) {
 ; BE-LABEL: @fold_memrchr_a_20(
-; BE-NEXT:    store i64 16, i64* [[PCMP:%.*]], align 4
-; BE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, i64* [[PCMP]], i64 1
-; BE-NEXT:    store i64 17, i64* [[PSTOR1]], align 4
-; BE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, i64* [[PCMP]], i64 2
-; BE-NEXT:    store i64 18, i64* [[PSTOR2]], align 4
-; BE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, i64* [[PCMP]], i64 3
-; BE-NEXT:    store i64 19, i64* [[PSTOR3]], align 4
-; BE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, i64* [[PCMP]], i64 4
-; BE-NEXT:    store i64 4, i64* [[PSTOR4]], align 4
+; BE-NEXT:    store i64 16, ptr [[PCMP:%.*]], align 4
+; BE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, ptr [[PCMP]], i64 1
+; BE-NEXT:    store i64 17, ptr [[PSTOR1]], align 4
+; BE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, ptr [[PCMP]], i64 2
+; BE-NEXT:    store i64 18, ptr [[PSTOR2]], align 4
+; BE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, ptr [[PCMP]], i64 3
+; BE-NEXT:    store i64 19, ptr [[PSTOR3]], align 4
+; BE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, ptr [[PCMP]], i64 4
+; BE-NEXT:    store i64 4, ptr [[PSTOR4]], align 4
 ; BE-NEXT:    ret void
 ;
 ; LE-LABEL: @fold_memrchr_a_20(
-; LE-NEXT:    store i64 19, i64* [[PCMP:%.*]], align 4
-; LE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, i64* [[PCMP]], i64 1
-; LE-NEXT:    store i64 18, i64* [[PSTOR1]], align 4
-; LE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, i64* [[PCMP]], i64 2
-; LE-NEXT:    store i64 17, i64* [[PSTOR2]], align 4
-; LE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, i64* [[PCMP]], i64 3
-; LE-NEXT:    store i64 16, i64* [[PSTOR3]], align 4
-; LE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, i64* [[PCMP]], i64 4
-; LE-NEXT:    store i64 7, i64* [[PSTOR4]], align 4
+; LE-NEXT:    store i64 19, ptr [[PCMP:%.*]], align 4
+; LE-NEXT:    [[PSTOR1:%.*]] = getelementptr i64, ptr [[PCMP]], i64 1
+; LE-NEXT:    store i64 18, ptr [[PSTOR1]], align 4
+; LE-NEXT:    [[PSTOR2:%.*]] = getelementptr i64, ptr [[PCMP]], i64 2
+; LE-NEXT:    store i64 17, ptr [[PSTOR2]], align 4
+; LE-NEXT:    [[PSTOR3:%.*]] = getelementptr i64, ptr [[PCMP]], i64 3
+; LE-NEXT:    store i64 16, ptr [[PSTOR3]], align 4
+; LE-NEXT:    [[PSTOR4:%.*]] = getelementptr i64, ptr [[PCMP]], i64 4
+; LE-NEXT:    store i64 7, ptr [[PSTOR4]], align 4
 ; LE-NEXT:    ret void
 ;
-  %p0 = getelementptr [5 x i32], [5 x i32]* @a, i64 0, i64 0
-  %p1 = bitcast i32* %p0 to i8*
-  %ip0 = ptrtoint i8* %p1 to i64
+  %ip0 = ptrtoint ptr @a to i64
 
 ; Fold memrchr(a, 'a', 20) - a to 16 (19 in LE).
 
-  %pa = call i8* @memrchr(i8* %p1, i32 97, i64 20)
-  %ipa = ptrtoint i8* %pa to i64
+  %pa = call ptr @memrchr(ptr @a, i32 97, i64 20)
+  %ipa = ptrtoint ptr %pa to i64
   %offa = sub i64 %ipa, %ip0
-  %pstor0 = getelementptr i64, i64* %pcmp, i64 0
-  store i64 %offa, i64* %pstor0
+  store i64 %offa, ptr %pcmp
 
 ; Fold memrchr(a, 'b', 16) - a to 17 (18 in LE)
 
-  %pb = call i8* @memrchr(i8* %p1, i32 98, i64 20)
-  %ipb = ptrtoint i8* %pb to i64
+  %pb = call ptr @memrchr(ptr @a, i32 98, i64 20)
+  %ipb = ptrtoint ptr %pb to i64
   %offb = sub i64 %ipb, %ip0
-  %pstor1 = getelementptr i64, i64* %pcmp, i64 1
-  store i64 %offb, i64* %pstor1
+  %pstor1 = getelementptr i64, ptr %pcmp, i64 1
+  store i64 %offb, ptr %pstor1
 
 ; Fold memrchr(a, 'c', 16) - a to 18 (17 in LE)
 
-  %pc = call i8* @memrchr(i8* %p1, i32 99, i64 20)
-  %ipc = ptrtoint i8* %pc to i64
+  %pc = call ptr @memrchr(ptr @a, i32 99, i64 20)
+  %ipc = ptrtoint ptr %pc to i64
   %offc = sub i64 %ipc, %ip0
-  %pstor2 = getelementptr i64, i64* %pcmp, i64 2
-  store i64 %offc, i64* %pstor2
+  %pstor2 = getelementptr i64, ptr %pcmp, i64 2
+  store i64 %offc, ptr %pstor2
 
 ; Fold memrchr(a, 'd', 16) - a to 19 (16 in LE)
 
-  %pd = call i8* @memrchr(i8* %p1, i32 100, i64 20)
-  %ipd = ptrtoint i8* %pd to i64
+  %pd = call ptr @memrchr(ptr @a, i32 100, i64 20)
+  %ipd = ptrtoint ptr %pd to i64
   %offd = sub i64 %ipd, %ip0
-  %pstor3 = getelementptr i64, i64* %pcmp, i64 3
-  store i64 %offd, i64* %pstor3
+  %pstor3 = getelementptr i64, ptr %pcmp, i64 3
+  store i64 %offd, ptr %pstor3
 
 ; Fold memrchr(a, 'e', 16) - a to 4 (7 in LE)
 
-  %pe = call i8* @memrchr(i8* %p1, i32 101, i64 20)
-  %ipe = ptrtoint i8* %pe to i64
+  %pe = call ptr @memrchr(ptr @a, i32 101, i64 20)
+  %ipe = ptrtoint ptr %pe to i64
   %offe = sub i64 %ipe, %ip0
-  %pstor4 = getelementptr i64, i64* %pcmp, i64 4
-  store i64 %offe, i64* %pstor4
+  %pstor4 = getelementptr i64, ptr %pcmp, i64 4
+  store i64 %offe, ptr %pstor4
 
   ret void
 }
index e9847eed2a17d11a4a5f05afae57529484fa7535..3e92a0db9c093c39ffe9f387d05988484f84c239 100644 (file)
@@ -5,7 +5,7 @@
 ; in equality expressions don't cause trouble and either are folded when
 ; they might be valid or not when they're provably undefined.
 
-declare i8* @memrchr(i8*, i32, i64)
+declare ptr @memrchr(ptr, i32, i64)
 
 
 @a5 = constant [5 x i8] c"12345"
@@ -20,10 +20,10 @@ define i1 @call_memrchr_ap5_c_1_eq_a(i32 %c, i64 %n) {
 ; CHECK-LABEL: @call_memrchr_ap5_c_1_eq_a(
 ; CHECK-NEXT:    ret i1
 ;
-  %pap5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %qap5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 1, i32 0
-  %q = call i8* @memrchr(i8* %pap5, i32 %c, i64 1)
-  %cmp = icmp eq i8* %q, %qap5
+  %pap5 = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %qap5 = getelementptr [5 x i8], ptr @a5, i32 1, i32 0
+  %q = call ptr @memrchr(ptr %pap5, i32 %c, i64 1)
+  %cmp = icmp eq ptr %q, %qap5
   ret i1 %cmp
 }
 
@@ -34,10 +34,10 @@ define i1 @call_memrchr_ap5_c_5_eq_a(i32 %c, i64 %n) {
 ; CHECK-LABEL: @call_memrchr_ap5_c_5_eq_a(
 ; CHECK-NEXT:    ret i1
 ;
-  %pap5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %qap5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 1, i32 0
-  %q = call i8* @memrchr(i8* %pap5, i32 %c, i64 5)
-  %cmp = icmp eq i8* %q, %qap5
+  %pap5 = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %qap5 = getelementptr [5 x i8], ptr @a5, i32 1, i32 0
+  %q = call ptr @memrchr(ptr %pap5, i32 %c, i64 5)
+  %cmp = icmp eq ptr %q, %qap5
   ret i1 %cmp
 }
 
@@ -48,10 +48,9 @@ define i1 @fold_memrchr_ap5_c_n_eq_a(i32 %c, i64 %n) {
 ; CHECK-LABEL: @fold_memrchr_ap5_c_n_eq_a(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %pa = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 0
-  %pap5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %q = call i8* @memrchr(i8* %pap5, i32 %c, i64 %n)
-  %cmp = icmp eq i8* %q, %pa
+  %pap5 = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %q = call ptr @memrchr(ptr %pap5, i32 %c, i64 %n)
+  %cmp = icmp eq ptr %q, @a5
   ret i1 %cmp
 }
 
@@ -63,9 +62,9 @@ define i1 @fold_memrchr_ap5_c_n_eqz(i32 %c, i64 %n) {
 ; CHECK-LABEL: @fold_memrchr_ap5_c_n_eqz(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %p = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %q = call i8* @memrchr(i8* %p, i32 %c, i64 %n)
-  %cmp = icmp eq i8* %q, null
+  %p = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %q = call ptr @memrchr(ptr %p, i32 %c, i64 %n)
+  %cmp = icmp eq ptr %q, null
   ret i1 %cmp
 }
 
@@ -77,8 +76,8 @@ define i1 @fold_memrchr_a_nul_n_eqz(i64 %n) {
 ; CHECK-LABEL: @fold_memrchr_a_nul_n_eqz(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %p = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %q = call i8* @memrchr(i8* %p, i32 0, i64 %n)
-  %cmp = icmp eq i8* %q, null
+  %p = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %q = call ptr @memrchr(ptr %p, i32 0, i64 %n)
+  %cmp = icmp eq ptr %q, null
   ret i1 %cmp
 }
index 4c8100a2a2cfd967014adf2128d48e8a67e75be4..dc447e67f4535b07ac3a6e462f30b94af606e6a1 100644 (file)
@@ -2,54 +2,54 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
 
-declare i8* @memrchr(i8*, i32, i32)
+declare ptr @memrchr(ptr, i32, i32)
 
-define i8* @test1(i8* %str, i32 %c, i32 %n) {
+define ptr @test1(ptr %str, i32 %c, i32 %n) {
 ; CHECK-LABEL: @test1(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @memrchr(i8* [[STR:%.*]], i32 [[C:%.*]], i32 [[N:%.*]])
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr [[STR:%.*]], i32 [[C:%.*]], i32 [[N:%.*]])
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
 
-  %ret = call i8* @memrchr(i8* %str, i32 %c, i32 %n)
-  ret i8* %ret
+  %ret = call ptr @memrchr(ptr %str, i32 %c, i32 %n)
+  ret ptr %ret
 }
 
-define i8* @test2(i8* %str, i32 %c, i32 %n) {
+define ptr @test2(ptr %str, i32 %c, i32 %n) {
 ; CHECK-LABEL: @test2(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @memrchr(i8* nonnull [[STR:%.*]], i32 [[C:%.*]], i32 [[N:%.*]])
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr nonnull [[STR:%.*]], i32 [[C:%.*]], i32 [[N:%.*]])
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
 
-  %ret = call i8* @memrchr(i8* nonnull %str, i32 %c, i32 %n)
-  ret i8* %ret
+  %ret = call ptr @memrchr(ptr nonnull %str, i32 %c, i32 %n)
+  ret ptr %ret
 }
 
-define i8* @test3(i8* %str, i32 %c) {
+define ptr @test3(ptr %str, i32 %c) {
 ; CHECK-LABEL: @test3(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @memrchr(i8* [[STR:%.*]], i32 [[C:%.*]], i32 5)
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr [[STR:%.*]], i32 [[C:%.*]], i32 5)
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
 
-  %ret = call i8* @memrchr(i8* %str, i32 %c, i32 5)
-  ret i8* %ret
+  %ret = call ptr @memrchr(ptr %str, i32 %c, i32 5)
+  ret ptr %ret
 }
 
-define i8* @test4(i8* %str, i32 %c) null_pointer_is_valid {
+define ptr @test4(ptr %str, i32 %c) null_pointer_is_valid {
 ; CHECK-LABEL: @test4(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @memrchr(i8* [[STR:%.*]], i32 [[C:%.*]], i32 5)
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr [[STR:%.*]], i32 [[C:%.*]], i32 5)
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
 
-  %ret = call i8* @memrchr(i8* %str, i32 %c, i32 5)
-  ret i8* %ret
+  %ret = call ptr @memrchr(ptr %str, i32 %c, i32 5)
+  ret ptr %ret
 }
 
-define i8* @test5(i8* %str, i32 %c) {
+define ptr @test5(ptr %str, i32 %c) {
 ; CHECK-LABEL: @test5(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @memrchr(i8* [[STR:%.*]], i32 [[C:%.*]], i32 0)
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @memrchr(ptr [[STR:%.*]], i32 [[C:%.*]], i32 0)
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
 
-  %ret = call i8* @memrchr(i8* %str, i32 %c, i32 0)
-  ret i8* %ret
+  %ret = call ptr @memrchr(ptr %str, i32 %c, i32 0)
+  ret ptr %ret
 }
index f7d025d0ebfaebc0c98219530cd92f712ad8f695..10680e7ba98ac3601cb88a75ad233d99061b4561 100644 (file)
 
 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:128:128"
 
-declare i8* @memset(i8*, i32, i32)
-declare void @llvm.memset.p0i8.i32(i8* nocapture writeonly, i8, i32, i32, i1)
-declare noalias i8* @malloc(i32) #1
+declare ptr @memset(ptr, i32, i32)
+declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i32, i1)
+declare noalias ptr @malloc(i32) #1
 
 ; Check memset(mem1, val, size) -> llvm.memset(mem1, val, size, 1).
 
-define i8* @test_simplify1(i8* %mem, i32 %val, i32 %size) {
+define ptr @test_simplify1(ptr %mem, i32 %val, i32 %size) {
 ; CHECK-LABEL: @test_simplify1(
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i32 [[VAL:%.*]] to i8
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* align 1 [[MEM:%.*]], i8 [[TMP1]], i32 [[SIZE:%.*]], i1 false)
-; CHECK-NEXT:    ret i8* [[MEM]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr align 1 [[MEM:%.*]], i8 [[TMP1]], i32 [[SIZE:%.*]], i1 false)
+; CHECK-NEXT:    ret ptr [[MEM]]
 ;
-  %ret = call i8* @memset(i8* %mem, i32 %val, i32 %size)
-  ret i8* %ret
+  %ret = call ptr @memset(ptr %mem, i32 %val, i32 %size)
+  ret ptr %ret
 }
 
-define i8* @test_simplify1_tail(i8* %mem, i32 %val, i32 %size) {
+define ptr @test_simplify1_tail(ptr %mem, i32 %val, i32 %size) {
 ; CHECK-LABEL: @test_simplify1_tail(
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i32 [[VAL:%.*]] to i8
-; CHECK-NEXT:    tail call void @llvm.memset.p0i8.i32(i8* align 1 [[MEM:%.*]], i8 [[TMP1]], i32 [[SIZE:%.*]], i1 false)
-; CHECK-NEXT:    ret i8* [[MEM]]
+; CHECK-NEXT:    tail call void @llvm.memset.p0.i32(ptr align 1 [[MEM:%.*]], i8 [[TMP1]], i32 [[SIZE:%.*]], i1 false)
+; CHECK-NEXT:    ret ptr [[MEM]]
 ;
-  %ret = tail call i8* @memset(i8* %mem, i32 %val, i32 %size)
-  ret i8* %ret
+  %ret = tail call ptr @memset(ptr %mem, i32 %val, i32 %size)
+  ret ptr %ret
 }
 
-define i8* @test_simplify1_musttail(i8* %mem, i32 %val, i32 %size) {
+define ptr @test_simplify1_musttail(ptr %mem, i32 %val, i32 %size) {
 ; CHECK-LABEL: @test_simplify1_musttail(
-; CHECK-NEXT:    %ret = musttail call i8* @memset(i8* %mem, i32 %val, i32 %size)
-; CHECK-NEXT:    ret i8* %ret
+; CHECK-NEXT:    %ret = musttail call ptr @memset(ptr %mem, i32 %val, i32 %size)
+; CHECK-NEXT:    ret ptr %ret
 ;
-  %ret = musttail call i8* @memset(i8* %mem, i32 %val, i32 %size)
-  ret i8* %ret
+  %ret = musttail call ptr @memset(ptr %mem, i32 %val, i32 %size)
+  ret ptr %ret
 }
 
 ; Malloc + memset pattern is now handled by DSE in a more general way.
 
-define i8* @pr25892_lite(i32 %size) #0 {
+define ptr @pr25892_lite(i32 %size) #0 {
 ; CHECK-LABEL: @pr25892_lite(
-; CHECK-NEXT:    [[CALL:%.*]] = call i8* @malloc(i32 [[SIZE:%.*]])
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* align 1 [[CALL]], i8 0, i32 [[SIZE]], i1 false)
+; CHECK-NEXT:    [[CALL:%.*]] = call ptr @malloc(i32 [[SIZE:%.*]])
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr align 1 [[CALL]], i8 0, i32 [[SIZE]], i1 false)
 ;
-  %call1 = call i8* @malloc(i32 %size) #1
-  %call2 = call i8* @memset(i8* %call1, i32 0, i32 %size) #1
-  ret i8* %call2
+  %call1 = call ptr @malloc(i32 %size) #1
+  %call2 = call ptr @memset(ptr %call1, i32 0, i32 %size) #1
+  ret ptr %call2
 }
 
 ; A memset intrinsic should be handled similarly to a memset() libcall.
 ; Notice that malloc + memset pattern is now handled by DSE in a more general way.
 
-define i8* @malloc_and_memset_intrinsic(i32 %n) #0 {
+define ptr @malloc_and_memset_intrinsic(i32 %n) #0 {
 ; CHECK-LABEL: @malloc_and_memset_intrinsic(
-; CHECK-NEXT:    [[CALL:%.*]] = call i8* @malloc(i32 [[N:%.*]])
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* align 1 [[CALL]], i8 0, i32 [[N]], i1 false)
-; CHECK-NEXT:    ret i8* [[CALL]]
+; CHECK-NEXT:    [[CALL:%.*]] = call ptr @malloc(i32 [[N:%.*]])
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr align 1 [[CALL]], i8 0, i32 [[N]], i1 false)
+; CHECK-NEXT:    ret ptr [[CALL]]
 ;
-  %call = call i8* @malloc(i32 %n)
-  call void @llvm.memset.p0i8.i32(i8* %call, i8 0, i32 %n, i32 1, i1 false)
-  ret i8* %call
+  %call = call ptr @malloc(i32 %n)
+  call void @llvm.memset.p0.i32(ptr %call, i8 0, i32 %n, i32 1, i1 false)
+  ret ptr %call
 }
 
 ; This should not create a calloc and should not crash the compiler.
 ; Notice that malloc + memset pattern is now handled by DSE in a more general way.
 
-define i8* @notmalloc_memset(i32 %size, i8*(i32)* %notmalloc) {
+define ptr @notmalloc_memset(i32 %size, ptr %notmalloc) {
 ; CHECK-LABEL: @notmalloc_memset(
-; CHECK-NEXT:    [[CALL1:%.*]] = call i8* [[NOTMALLOC:%.*]](i32 [[SIZE:%.*]]) [[ATTR0:#.*]]
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* align 1 [[CALL1]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
-; CHECK-NEXT:    ret i8* [[CALL1]]
+; CHECK-NEXT:    [[CALL1:%.*]] = call ptr [[NOTMALLOC:%.*]](i32 [[SIZE:%.*]]) [[ATTR0:#.*]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr align 1 [[CALL1]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
+; CHECK-NEXT:    ret ptr [[CALL1]]
 ;
-  %call1 = call i8* %notmalloc(i32 %size) #1
-  %call2 = call i8* @memset(i8* %call1, i32 0, i32 %size) #1
-  ret i8* %call2
+  %call1 = call ptr %notmalloc(i32 %size) #1
+  %call2 = call ptr @memset(ptr %call1, i32 0, i32 %size) #1
+  ret ptr %call2
 }
 
 ; This doesn't fire currently because the malloc has more than one use.
 ; Notice that malloc + memset pattern is now handled by DSE in a more general way.
 
-define float* @pr25892(i32 %size) #0 {
+define ptr @pr25892(i32 %size) #0 {
 ; CHECK-LABEL: @pr25892(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CALL:%.*]] = tail call i8* @malloc(i32 [[SIZE:%.*]]) [[ATTR0]]
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8* [[CALL]], null
+; CHECK-NEXT:    [[CALL:%.*]] = tail call ptr @malloc(i32 [[SIZE:%.*]]) [[ATTR0]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[CALL]], null
 ; CHECK-NEXT:    br i1 [[CMP]], label [[CLEANUP:%.*]], label [[IF_END:%.*]]
 ; CHECK:       if.end:
-; CHECK-NEXT:    [[BC:%.*]] = bitcast i8* [[CALL]] to float*
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* nonnull align 1 [[CALL]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr nonnull align 1 [[CALL]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
 ; CHECK-NEXT:    br label [[CLEANUP]]
 ; CHECK:       cleanup:
-; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi float* [ [[BC]], [[IF_END]] ], [ null, [[ENTRY:%.*]] ]
-; CHECK-NEXT:    ret float* [[RETVAL_0]]
+; CHECK-NEXT:    [[RETVAL_0:%.*]] = phi ptr [ [[CALL]], [[IF_END]] ], [ null, [[ENTRY:%.*]] ]
+; CHECK-NEXT:    ret ptr [[RETVAL_0]]
 ;
 entry:
-  %call = tail call i8* @malloc(i32 %size) #1
-  %cmp = icmp eq i8* %call, null
+  %call = tail call ptr @malloc(i32 %size) #1
+  %cmp = icmp eq ptr %call, null
   br i1 %cmp, label %cleanup, label %if.end
 if.end:
-  %bc = bitcast i8* %call to float*
-  %call2 = tail call i8* @memset(i8* nonnull %call, i32 0, i32 %size) #1
+  %call2 = tail call ptr @memset(ptr nonnull %call, i32 0, i32 %size) #1
   br label %cleanup
 cleanup:
-  %retval.0 = phi float* [ %bc, %if.end ], [ null, %entry ]
-  ret float* %retval.0
+  %retval.0 = phi ptr [ %call, %if.end ], [ null, %entry ]
+  ret ptr %retval.0
 }
 
 ; If there's a calloc transform, the store must also be eliminated.
 
-define i8* @buffer_is_modified_then_memset(i32 %size) {
+define ptr @buffer_is_modified_then_memset(i32 %size) {
 ; CHECK-LABEL: @buffer_is_modified_then_memset(
-; CHECK-NEXT:    [[PTR:%.*]] = tail call i8* @malloc(i32 [[SIZE:%.*]]) [[ATTR0]]
-; CHECK-NEXT:    store i8 1, i8* [[PTR]], align 1
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* nonnull align 1 [[PTR]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
-; CHECK-NEXT:    ret i8* [[PTR]]
+; CHECK-NEXT:    [[PTR:%.*]] = tail call ptr @malloc(i32 [[SIZE:%.*]]) [[ATTR0]]
+; CHECK-NEXT:    store i8 1, ptr [[PTR]], align 1
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr nonnull align 1 [[PTR]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
+; CHECK-NEXT:    ret ptr [[PTR]]
 ;
-  %ptr = tail call i8* @malloc(i32 %size) #1
-  store i8 1, i8* %ptr           ;; fdata[0] = 1;
-  %memset = tail call i8* @memset(i8* nonnull %ptr, i32 0, i32 %size) #1
-  ret i8* %memset
+  %ptr = tail call ptr @malloc(i32 %size) #1
+  store i8 1, ptr %ptr           ;; fdata[0] = 1;
+  %memset = tail call ptr @memset(ptr nonnull %ptr, i32 0, i32 %size) #1
+  ret ptr %memset
 }
 
-define i8* @memset_size_select(i1 %b, i8* %ptr) {
+define ptr @memset_size_select(i1 %b, ptr %ptr) {
 ; CHECK-LABEL: @memset_size_select(
 ; CHECK-NEXT:    [[SIZE:%.*]] = select i1 [[B:%.*]], i32 10, i32 50
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* noundef nonnull align 1 dereferenceable(10) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
-; CHECK-NEXT:    ret i8* [[PTR]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 dereferenceable(10) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
+; CHECK-NEXT:    ret ptr [[PTR]]
 ;
   %size = select i1 %b, i32 10, i32 50
-  %memset = tail call i8* @memset(i8* nonnull %ptr, i32 0, i32 %size) #1
-  ret i8* %memset
+  %memset = tail call ptr @memset(ptr nonnull %ptr, i32 0, i32 %size) #1
+  ret ptr %memset
 }
 
 
-define i8* @memset_size_select2(i1 %b, i8* %ptr) {
+define ptr @memset_size_select2(i1 %b, ptr %ptr) {
 ; CHECK-LABEL: @memset_size_select2(
 ; CHECK-NEXT:    [[SIZE:%.*]] = select i1 [[B:%.*]], i32 10, i32 50
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* noundef nonnull align 1 dereferenceable(80) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
-; CHECK-NEXT:    ret i8* [[PTR]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 dereferenceable(80) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
+; CHECK-NEXT:    ret ptr [[PTR]]
 ;
   %size = select i1 %b, i32 10, i32 50
-  %memset = tail call i8* @memset(i8* nonnull dereferenceable(80) %ptr, i32 0, i32 %size) #1
-  ret i8* %memset
+  %memset = tail call ptr @memset(ptr nonnull dereferenceable(80) %ptr, i32 0, i32 %size) #1
+  ret ptr %memset
 }
 
-define i8* @memset_size_select3(i1 %b, i8* %ptr) {
+define ptr @memset_size_select3(i1 %b, ptr %ptr) {
 ; CHECK-LABEL: @memset_size_select3(
 ; CHECK-NEXT:    [[SIZE:%.*]] = select i1 [[B:%.*]], i32 10, i32 50
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* noundef nonnull align 1 dereferenceable(40) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false)
-; CHECK-NEXT:    ret i8* [[PTR]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 dereferenceable(40) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false)
+; CHECK-NEXT:    ret ptr [[PTR]]
 ;
   %size = select i1 %b, i32 10, i32 50
-  %memset = tail call i8* @memset(i8* dereferenceable_or_null(40) %ptr, i32 0, i32 %size)
-  ret i8* %memset
+  %memset = tail call ptr @memset(ptr dereferenceable_or_null(40) %ptr, i32 0, i32 %size)
+  ret ptr %memset
 }
 
-define i8* @memset_size_select4(i1 %b, i8* %ptr) {
+define ptr @memset_size_select4(i1 %b, ptr %ptr) {
 ; CHECK-LABEL: @memset_size_select4(
 ; CHECK-NEXT:    [[SIZE:%.*]] = select i1 [[B:%.*]], i32 10, i32 50
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* noundef nonnull align 1 dereferenceable(40) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
-; CHECK-NEXT:    ret i8* [[PTR]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 dereferenceable(40) [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
+; CHECK-NEXT:    ret ptr [[PTR]]
 ;
   %size = select i1 %b, i32 10, i32 50
-  %memset = tail call i8* @memset(i8* nonnull dereferenceable_or_null(40) %ptr, i32 0, i32 %size) #1
-  ret i8* %memset
+  %memset = tail call ptr @memset(ptr nonnull dereferenceable_or_null(40) %ptr, i32 0, i32 %size) #1
+  ret ptr %memset
 }
 
-define i8* @memset_size_ashr(i1 %b, i8* %ptr, i32 %v) {
+define ptr @memset_size_ashr(i1 %b, ptr %ptr, i32 %v) {
 ; CHECK-LABEL: @memset_size_ashr(
 ; CHECK-NEXT:    [[SIZE:%.*]] = ashr i32 -2, [[V:%.*]]
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* noundef nonnull align 1 [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
-; CHECK-NEXT:    ret i8* [[PTR]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr noundef nonnull align 1 [[PTR:%.*]], i8 0, i32 [[SIZE]], i1 false) [[ATTR0]]
+; CHECK-NEXT:    ret ptr [[PTR]]
 ;
   %size = ashr i32 -2, %v
-  %memset = tail call i8* @memset(i8* nonnull %ptr, i32 0, i32 %size) #1
-  ret i8* %memset
+  %memset = tail call ptr @memset(ptr nonnull %ptr, i32 0, i32 %size) #1
+  ret ptr %memset
 }
 
-define i8* @memset_attrs1(i1 %b, i8* %ptr, i32 %size) {
+define ptr @memset_attrs1(i1 %b, ptr %ptr, i32 %size) {
 ; CHECK-LABEL: @memset_attrs1(
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* align 1 dereferenceable_or_null(40) [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) [[ATTR0]]
-; CHECK-NEXT:    ret i8* [[PTR]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr align 1 dereferenceable_or_null(40) [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) [[ATTR0]]
+; CHECK-NEXT:    ret ptr [[PTR]]
 ;
-  %memset = tail call i8* @memset(i8* dereferenceable_or_null(40) %ptr, i32 0, i32 %size) #1
-  ret i8* %memset
+  %memset = tail call ptr @memset(ptr dereferenceable_or_null(40) %ptr, i32 0, i32 %size) #1
+  ret ptr %memset
 }
 
 ; be sure to drop nonnull since size is unknown and can be 0
 ; do not change dereferenceable attribute
-define i8* @memset_attrs2(i1 %b, i8* %ptr, i32 %size) {
+define ptr @memset_attrs2(i1 %b, ptr %ptr, i32 %size) {
 ; CHECK-LABEL: @memset_attrs2(
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* nonnull align 1 dereferenceable(40) [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) [[ATTR0]]
-; CHECK-NEXT:    ret i8* [[PTR]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr nonnull align 1 dereferenceable(40) [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) [[ATTR0]]
+; CHECK-NEXT:    ret ptr [[PTR]]
 ;
-  %memset = tail call i8* @memset(i8* nonnull dereferenceable(40) %ptr, i32 0, i32 %size) #1
-  ret i8* %memset
+  %memset = tail call ptr @memset(ptr nonnull dereferenceable(40) %ptr, i32 0, i32 %size) #1
+  ret ptr %memset
 }
 
 ; size is unknown, just copy attrs, no changes in attrs
-define i8* @memset_attrs3(i1 %b, i8* %ptr, i32 %size) {
+define ptr @memset_attrs3(i1 %b, ptr %ptr, i32 %size) {
 ; CHECK-LABEL: @memset_attrs3(
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* nonnull align 1 dereferenceable_or_null(40) [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) [[ATTR0]]
-; CHECK-NEXT:    ret i8* [[PTR]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr nonnull align 1 dereferenceable_or_null(40) [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) [[ATTR0]]
+; CHECK-NEXT:    ret ptr [[PTR]]
 ;
-  %memset = tail call i8* @memset(i8* nonnull dereferenceable_or_null(40) %ptr, i32 0, i32 %size) #1
-  ret i8* %memset
+  %memset = tail call ptr @memset(ptr nonnull dereferenceable_or_null(40) %ptr, i32 0, i32 %size) #1
+  ret ptr %memset
 }
 
 ; be sure to drop nonnull since size is unknown and can be 0
-define i8* @memset_attrs4(i1 %b, i8* %ptr, i32 %size) {
+define ptr @memset_attrs4(i1 %b, ptr %ptr, i32 %size) {
 ; CHECK-LABEL: @memset_attrs4(
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* nonnull align 1 [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) [[ATTR0]]
-; CHECK-NEXT:    ret i8* [[PTR]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr nonnull align 1 [[PTR:%.*]], i8 0, i32 [[SIZE:%.*]], i1 false) [[ATTR0]]
+; CHECK-NEXT:    ret ptr [[PTR]]
 ;
-  %memset = tail call i8* @memset(i8* nonnull %ptr, i32 0, i32 %size) #1
-  ret i8* %memset
+  %memset = tail call ptr @memset(ptr nonnull %ptr, i32 0, i32 %size) #1
+  ret ptr %memset
 }
 
-define i8* @test_no_incompatible_attr(i8* %mem, i32 %val, i32 %size) {
+define ptr @test_no_incompatible_attr(ptr %mem, i32 %val, i32 %size) {
 ; CHECK-LABEL: @test_no_incompatible_attr(
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i32 [[VAL:%.*]] to i8
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* align 1 [[MEM:%.*]], i8 [[TMP1]], i32 [[SIZE:%.*]], i1 false)
-; CHECK-NEXT:    ret i8* [[MEM]]
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr align 1 [[MEM:%.*]], i8 [[TMP1]], i32 [[SIZE:%.*]], i1 false)
+; CHECK-NEXT:    ret ptr [[MEM]]
 ;
-  %ret = call dereferenceable(1) i8* @memset(i8* %mem, i32 %val, i32 %size)
-  ret i8* %ret
+  %ret = call dereferenceable(1) ptr @memset(ptr %mem, i32 %val, i32 %size)
+  ret ptr %ret
 }
 
 attributes #0 = { nounwind ssp uwtable }
index 4acd67f41bb03b75aaa671366bc774b4d0e9bfc8..184d5393b04847a7f0adb10d9541095d9bb8921b 100644 (file)
@@ -4,13 +4,13 @@
 
 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:128:128"
 
-declare i8 @memset(i8*, i32, i32)
+declare i8 @memset(ptr, i32, i32)
 
 ; Check that memset functions with the wrong prototype aren't simplified.
 
-define i8 @test_no_simplify1(i8* %mem, i32 %val, i32 %size) {
+define i8 @test_no_simplify1(ptr %mem, i32 %val, i32 %size) {
 ; CHECK-LABEL: @test_no_simplify1(
-  %ret = call i8 @memset(i8* %mem, i32 %val, i32 %size)
+  %ret = call i8 @memset(ptr %mem, i32 %val, i32 %size)
 ; CHECK: call i8 @memset
   ret i8 %ret
 ; CHECK: ret i8 %ret
index 7676ebc0435a2e229802adcf9a1c432d07bf2271..d593db040476fdba22894106221500474574cbae 100644 (file)
@@ -1,24 +1,19 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-define i32 @test([1024 x i8]* %target) {
+define i32 @test(ptr %target) {
 ; CHECK-LABEL: @test(
-; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr [1024 x i8], [1024 x i8]* [[TARGET:%.*]], i64 0, i64 0
-; CHECK-NEXT:    store i8 1, i8* [[TMP1]], align 1
-; CHECK-NEXT:    [[TMP2:%.*]] = bitcast [1024 x i8]* [[TARGET]] to i16*
-; CHECK-NEXT:    store i16 257, i16* [[TMP2]], align 2
-; CHECK-NEXT:    [[TMP3:%.*]] = bitcast [1024 x i8]* [[TARGET]] to i32*
-; CHECK-NEXT:    store i32 16843009, i32* [[TMP3]], align 4
-; CHECK-NEXT:    [[TMP4:%.*]] = bitcast [1024 x i8]* [[TARGET]] to i64*
-; CHECK-NEXT:    store i64 72340172838076673, i64* [[TMP4]], align 8
+; CHECK-NEXT:    store i8 1, ptr [[TARGET:%.*]], align 1
+; CHECK-NEXT:    store i16 257, ptr [[TARGET]], align 2
+; CHECK-NEXT:    store i32 16843009, ptr [[TARGET]], align 4
+; CHECK-NEXT:    store i64 72340172838076673, ptr [[TARGET]], align 8
 ; CHECK-NEXT:    ret i32 0
 ;
-  %target_p = getelementptr [1024 x i8], [1024 x i8]* %target, i32 0, i32 0
-  call void @llvm.memset.p0i8.i32(i8* %target_p, i8 1, i32 0, i1 false)
-  call void @llvm.memset.p0i8.i32(i8* %target_p, i8 1, i32 1, i1 false)
-  call void @llvm.memset.p0i8.i32(i8* align 2 %target_p, i8 1, i32 2, i1 false)
-  call void @llvm.memset.p0i8.i32(i8* align 4 %target_p, i8 1, i32 4, i1 false)
-  call void @llvm.memset.p0i8.i32(i8* align 8 %target_p, i8 1, i32 8, i1 false)
+  call void @llvm.memset.p0.i32(ptr %target, i8 1, i32 0, i1 false)
+  call void @llvm.memset.p0.i32(ptr %target, i8 1, i32 1, i1 false)
+  call void @llvm.memset.p0.i32(ptr align 2 %target, i8 1, i32 2, i1 false)
+  call void @llvm.memset.p0.i32(ptr align 4 %target, i8 1, i32 4, i1 false)
+  call void @llvm.memset.p0.i32(ptr align 8 %target, i8 1, i32 8, i1 false)
   ret i32 0
 }
 
@@ -28,45 +23,44 @@ define void @memset_to_constant() {
 ; CHECK-LABEL: @memset_to_constant(
 ; CHECK-NEXT:    ret void
 ;
-  %p = bitcast i128* @Unknown to i8*
-  call void @llvm.memset.p0i8.i32(i8* %p, i8 0, i32 16, i1 false)
+  call void @llvm.memset.p0.i32(ptr @Unknown, i8 0, i32 16, i1 false)
   ret void
 }
 
 ; FIXME: This is technically incorrect because it might overwrite a poison
 ; value. Stop folding it once #52930 is resolved.
-define void @memset_undef(i8* %p) {
+define void @memset_undef(ptr %p) {
 ; CHECK-LABEL: @memset_undef(
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.memset.p0i8.i32(i8* %p, i8 undef, i32 8, i1 false)
+  call void @llvm.memset.p0.i32(ptr %p, i8 undef, i32 8, i1 false)
   ret void
 }
 
-define void @memset_undef_volatile(i8* %p) {
+define void @memset_undef_volatile(ptr %p) {
 ; CHECK-LABEL: @memset_undef_volatile(
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* [[P:%.*]], i8 undef, i32 8, i1 true)
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr [[P:%.*]], i8 undef, i32 8, i1 true)
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.memset.p0i8.i32(i8* %p, i8 undef, i32 8, i1 true)
+  call void @llvm.memset.p0.i32(ptr %p, i8 undef, i32 8, i1 true)
   ret void
 }
 
-define void @memset_poison(i8* %p) {
+define void @memset_poison(ptr %p) {
 ; CHECK-LABEL: @memset_poison(
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.memset.p0i8.i32(i8* %p, i8 poison, i32 8, i1 false)
+  call void @llvm.memset.p0.i32(ptr %p, i8 poison, i32 8, i1 false)
   ret void
 }
 
-define void @memset_poison_volatile(i8* %p) {
+define void @memset_poison_volatile(ptr %p) {
 ; CHECK-LABEL: @memset_poison_volatile(
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i32(i8* [[P:%.*]], i8 poison, i32 8, i1 true)
+; CHECK-NEXT:    call void @llvm.memset.p0.i32(ptr [[P:%.*]], i8 poison, i32 8, i1 true)
 ; CHECK-NEXT:    ret void
 ;
-  call void @llvm.memset.p0i8.i32(i8* %p, i8 poison, i32 8, i1 true)
+  call void @llvm.memset.p0.i32(ptr %p, i8 poison, i32 8, i1 true)
   ret void
 }
 
-declare void @llvm.memset.p0i8.i32(i8* nocapture writeonly, i8, i32, i1) argmemonly nounwind
+declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1) argmemonly nounwind
index 23d06dd18f3f0e512d556805b9ff935cbe737091..c338105d170e040a6fff977695eff6b0cda0b15e 100644 (file)
@@ -10,11 +10,10 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 
 define void @test_no_simplify() {
 ; CHECK-LABEL: @test_no_simplify(
-  %dst = bitcast %struct.T* @t to i8*
 
-; CHECK-NEXT: call i8* @__memset_chk
-  call i8* @__memset_chk(i8* %dst, i32 0, i64 1824)
+; CHECK-NEXT: call ptr @__memset_chk
+  call ptr @__memset_chk(ptr @t, i32 0, i64 1824)
   ret void
 }
 
-declare i8* @__memset_chk(i8*, i32, i64)
+declare ptr @__memset_chk(ptr, i32, i64)
index aaecdf8e184a49a2224f3d77de0c97a94a45413d..362d5cb321a0a9e129c598cd597bd7e10c4e6043 100644 (file)
@@ -5,13 +5,13 @@ declare void @use.i1(i1)
 declare void @use.i8(i8)
 declare void @use.i16(i16)
 
-define i1 @and_test1(i16* %x) {
+define i1 @and_test1(ptr %x) {
 ; CHECK-LABEL: @and_test1(
-; CHECK-NEXT:    [[LOAD:%.*]] = load i16, i16* [[X:%.*]], align 4
+; CHECK-NEXT:    [[LOAD:%.*]] = load i16, ptr [[X:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i16 [[LOAD]], 17791
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %load = load i16, i16* %x, align 4
+  %load = load i16, ptr %x, align 4
   %trunc = trunc i16 %load to i8
   %cmp1 = icmp eq i8 %trunc, 127
   %and = and i16 %load, -256
@@ -20,13 +20,13 @@ define i1 @and_test1(i16* %x) {
   ret i1 %or
 }
 
-define i1 @and_test1_logical(i16* %x) {
+define i1 @and_test1_logical(ptr %x) {
 ; CHECK-LABEL: @and_test1_logical(
-; CHECK-NEXT:    [[LOAD:%.*]] = load i16, i16* [[X:%.*]], align 4
+; CHECK-NEXT:    [[LOAD:%.*]] = load i16, ptr [[X:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i16 [[LOAD]], 17791
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %load = load i16, i16* %x, align 4
+  %load = load i16, ptr %x, align 4
   %trunc = trunc i16 %load to i8
   %cmp1 = icmp eq i8 %trunc, 127
   %and = and i16 %load, -256
@@ -35,13 +35,13 @@ define i1 @and_test1_logical(i16* %x) {
   ret i1 %or
 }
 
-define <2 x i1> @and_test1_vector(<2 x i16>* %x) {
+define <2 x i1> @and_test1_vector(ptr %x) {
 ; CHECK-LABEL: @and_test1_vector(
-; CHECK-NEXT:    [[LOAD:%.*]] = load <2 x i16>, <2 x i16>* [[X:%.*]], align 4
+; CHECK-NEXT:    [[LOAD:%.*]] = load <2 x i16>, ptr [[X:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq <2 x i16> [[LOAD]], <i16 17791, i16 17791>
 ; CHECK-NEXT:    ret <2 x i1> [[TMP1]]
 ;
-  %load = load <2 x i16>, <2 x i16>* %x, align 4
+  %load = load <2 x i16>, ptr %x, align 4
   %trunc = trunc <2 x i16> %load to <2 x i8>
   %cmp1 = icmp eq <2 x i8> %trunc, <i8 127, i8 127>
   %and = and <2 x i16> %load, <i16 -256, i16 -256>
@@ -50,13 +50,13 @@ define <2 x i1> @and_test1_vector(<2 x i16>* %x) {
   ret <2 x i1> %or
 }
 
-define i1 @and_test2(i16* %x) {
+define i1 @and_test2(ptr %x) {
 ; CHECK-LABEL: @and_test2(
-; CHECK-NEXT:    [[LOAD:%.*]] = load i16, i16* [[X:%.*]], align 4
+; CHECK-NEXT:    [[LOAD:%.*]] = load i16, ptr [[X:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i16 [[LOAD]], 32581
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %load = load i16, i16* %x, align 4
+  %load = load i16, ptr %x, align 4
   %and = and i16 %load, -256
   %cmp1 = icmp eq i16 %and, 32512
   %trunc = trunc i16 %load to i8
@@ -65,13 +65,13 @@ define i1 @and_test2(i16* %x) {
   ret i1 %or
 }
 
-define i1 @and_test2_logical(i16* %x) {
+define i1 @and_test2_logical(ptr %x) {
 ; CHECK-LABEL: @and_test2_logical(
-; CHECK-NEXT:    [[LOAD:%.*]] = load i16, i16* [[X:%.*]], align 4
+; CHECK-NEXT:    [[LOAD:%.*]] = load i16, ptr [[X:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i16 [[LOAD]], 32581
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %load = load i16, i16* %x, align 4
+  %load = load i16, ptr %x, align 4
   %and = and i16 %load, -256
   %cmp1 = icmp eq i16 %and, 32512
   %trunc = trunc i16 %load to i8
@@ -80,13 +80,13 @@ define i1 @and_test2_logical(i16* %x) {
   ret i1 %or
 }
 
-define <2 x i1> @and_test2_vector(<2 x i16>* %x) {
+define <2 x i1> @and_test2_vector(ptr %x) {
 ; CHECK-LABEL: @and_test2_vector(
-; CHECK-NEXT:    [[LOAD:%.*]] = load <2 x i16>, <2 x i16>* [[X:%.*]], align 4
+; CHECK-NEXT:    [[LOAD:%.*]] = load <2 x i16>, ptr [[X:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq <2 x i16> [[LOAD]], <i16 32581, i16 32581>
 ; CHECK-NEXT:    ret <2 x i1> [[TMP1]]
 ;
-  %load = load <2 x i16>, <2 x i16>* %x, align 4
+  %load = load <2 x i16>, ptr %x, align 4
   %and = and <2 x i16> %load, <i16 -256, i16 -256>
   %cmp1 = icmp eq <2 x i16> %and, <i16 32512, i16 32512>
   %trunc = trunc <2 x i16> %load to <2 x i8>
index 4a68861d3f1fa74f925efe576aa9c46cba04d7bf..553bcae99356d342e5a6e6076bfaecf9ef36e184 100644 (file)
 define void @_Z4testv() {
 ; CHECK-LABEL: @_Z4testv(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[I:%.*]] = load i8, i8* @var_7, align 1
+; CHECK-NEXT:    [[I:%.*]] = load i8, ptr @var_7, align 1
 ; CHECK-NEXT:    [[I1:%.*]] = icmp eq i8 [[I]], -1
-; CHECK-NEXT:    [[I4:%.*]] = load i16, i16* @var_0, align 2
+; CHECK-NEXT:    [[I4:%.*]] = load i16, ptr @var_0, align 2
 ; CHECK-NEXT:    br i1 [[I1]], label [[BB10:%.*]], label [[BB9:%.*]]
 ; CHECK:       bb9:
 ; CHECK-NEXT:    br label [[BB12:%.*]]
 ; CHECK:       bb10:
-; CHECK-NEXT:    [[I2:%.*]] = load i32, i32* @var_1, align 4
+; CHECK-NEXT:    [[I2:%.*]] = load i32, ptr @var_1, align 4
 ; CHECK-NEXT:    [[I3:%.*]] = icmp eq i32 [[I2]], 0
-; CHECK-NEXT:    [[I6:%.*]] = load i64, i64* @var_5, align 8
+; CHECK-NEXT:    [[I6:%.*]] = load i64, ptr @var_5, align 8
 ; CHECK-NEXT:    [[I5:%.*]] = sext i16 [[I4]] to i64
 ; CHECK-NEXT:    [[I7:%.*]] = select i1 [[I3]], i64 [[I6]], i64 [[I5]]
 ; CHECK-NEXT:    [[I11:%.*]] = trunc i64 [[I7]] to i32
 ; CHECK-NEXT:    br label [[BB12]]
 ; CHECK:       bb12:
 ; CHECK-NEXT:    [[STOREMERGE1:%.*]] = phi i32 [ [[I11]], [[BB10]] ], [ 1, [[BB9]] ]
-; CHECK-NEXT:    store i32 [[STOREMERGE1]], i32* getelementptr inbounds ([0 x i32], [0 x i32]* @arr_2, i64 0, i64 0), align 4
-; CHECK-NEXT:    store i16 [[I4]], i16* getelementptr inbounds ([0 x i16], [0 x i16]* @arr_4, i64 0, i64 0), align 2
+; CHECK-NEXT:    store i32 [[STOREMERGE1]], ptr @arr_2, align 4
+; CHECK-NEXT:    store i16 [[I4]], ptr @arr_4, align 2
 ; CHECK-NEXT:    [[I8:%.*]] = sext i16 [[I4]] to i32
-; CHECK-NEXT:    store i32 [[I8]], i32* getelementptr inbounds ([8 x i32], [8 x i32]* @arr_3, i64 0, i64 0), align 16
-; CHECK-NEXT:    store i32 [[STOREMERGE1]], i32* getelementptr inbounds ([0 x i32], [0 x i32]* @arr_2, i64 0, i64 1), align 4
-; CHECK-NEXT:    store i16 [[I4]], i16* getelementptr inbounds ([0 x i16], [0 x i16]* @arr_4, i64 0, i64 1), align 2
-; CHECK-NEXT:    store i32 [[I8]], i32* getelementptr inbounds ([8 x i32], [8 x i32]* @arr_3, i64 0, i64 1), align 4
+; CHECK-NEXT:    store i32 [[I8]], ptr @arr_3, align 16
+; CHECK-NEXT:    store i32 [[STOREMERGE1]], ptr getelementptr inbounds ([0 x i32], ptr @arr_2, i64 0, i64 1), align 4
+; CHECK-NEXT:    store i16 [[I4]], ptr getelementptr inbounds ([0 x i16], ptr @arr_4, i64 0, i64 1), align 2
+; CHECK-NEXT:    store i32 [[I8]], ptr getelementptr inbounds ([8 x i32], ptr @arr_3, i64 0, i64 1), align 4
 ; CHECK-NEXT:    ret void
 ;
 bb:
-  %i = load i8, i8* @var_7, align 1
+  %i = load i8, ptr @var_7, align 1
   %i1 = icmp eq i8 %i, -1
-  %i2 = load i32, i32* @var_1, align 4
+  %i2 = load i32, ptr @var_1, align 4
   %i3 = icmp eq i32 %i2, 0
-  %i4 = load i16, i16* @var_0, align 2
+  %i4 = load i16, ptr @var_0, align 2
   %i5 = sext i16 %i4 to i64
-  %i6 = load i64, i64* @var_5, align 8
+  %i6 = load i64, ptr @var_5, align 8
   %i7 = select i1 %i3, i64 %i6, i64 %i5
   %i8 = sext i16 %i4 to i32
   br i1 %i1, label %bb10, label %bb9
 
 bb9:                                              ; preds = %bb
-  store i32 1, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @arr_2, i64 0, i64 0), align 4
-  store i16 %i4, i16* getelementptr inbounds ([0 x i16], [0 x i16]* @arr_4, i64 0, i64 0), align 2
-  store i32 %i8, i32* getelementptr inbounds ([8 x i32], [8 x i32]* @arr_3, i64 0, i64 0), align 4
-  store i32 1, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @arr_2, i64 0, i64 1), align 4
-  store i16 %i4, i16* getelementptr inbounds ([0 x i16], [0 x i16]* @arr_4, i64 0, i64 1), align 2
-  store i32 %i8, i32* getelementptr inbounds ([8 x i32], [8 x i32]* @arr_3, i64 0, i64 1), align 4
+  store i32 1, ptr @arr_2, align 4
+  store i16 %i4, ptr @arr_4, align 2
+  store i32 %i8, ptr @arr_3, align 4
+  store i32 1, ptr getelementptr inbounds ([0 x i32], ptr @arr_2, i64 0, i64 1), align 4
+  store i16 %i4, ptr getelementptr inbounds ([0 x i16], ptr @arr_4, i64 0, i64 1), align 2
+  store i32 %i8, ptr getelementptr inbounds ([8 x i32], ptr @arr_3, i64 0, i64 1), align 4
   br label %bb12
 
 bb10:                                             ; preds = %bb
   %i11 = trunc i64 %i7 to i32
-  store i32 %i11, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @arr_2, i64 0, i64 0), align 4
-  store i16 %i4, i16* getelementptr inbounds ([0 x i16], [0 x i16]* @arr_4, i64 0, i64 0), align 2
-  store i32 %i8, i32* getelementptr inbounds ([8 x i32], [8 x i32]* @arr_3, i64 0, i64 0), align 4
-  store i32 %i11, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @arr_2, i64 0, i64 1), align 4
-  store i16 %i4, i16* getelementptr inbounds ([0 x i16], [0 x i16]* @arr_4, i64 0, i64 1), align 2
-  store i32 %i8, i32* getelementptr inbounds ([8 x i32], [8 x i32]* @arr_3, i64 0, i64 1), align 4
+  store i32 %i11, ptr @arr_2, align 4
+  store i16 %i4, ptr @arr_4, align 2
+  store i32 %i8, ptr @arr_3, align 4
+  store i32 %i11, ptr getelementptr inbounds ([0 x i32], ptr @arr_2, i64 0, i64 1), align 4
+  store i16 %i4, ptr getelementptr inbounds ([0 x i16], ptr @arr_4, i64 0, i64 1), align 2
+  store i32 %i8, ptr getelementptr inbounds ([8 x i32], ptr @arr_3, i64 0, i64 1), align 4
   br label %bb12
 
 bb12:                                             ; preds = %bb10, %bb9
index d34a80201b70978d2232bf230d5b1e62d2c36428..db8394fa90a6722968bad17649b4272680f9f4c4 100644 (file)
@@ -8,7 +8,7 @@ define i1 @smin(i32 %other) {
 ; CHECK-NEXT:    [[TEST:%.*]] = icmp sgt i32 [[OTHER:%.*]], 0
 ; CHECK-NEXT:    ret i1 [[TEST]]
 ;
-  %positive = load i32, i32* @g, !range !{i32 1, i32 2048}
+  %positive = load i32, ptr @g, !range !{i32 1, i32 2048}
   %cmp = icmp slt i32 %positive, %other
   %sel = select i1 %cmp, i32 %positive, i32 %other
   %test = icmp sgt i32 %sel, 0
@@ -20,7 +20,7 @@ define i1 @smin_int(i32 %other) {
 ; CHECK-NEXT:    [[TEST:%.*]] = icmp sgt i32 [[OTHER:%.*]], 0
 ; CHECK-NEXT:    ret i1 [[TEST]]
 ;
-  %positive = load i32, i32* @g, !range !{i32 1, i32 2048}
+  %positive = load i32, ptr @g, !range !{i32 1, i32 2048}
   %smin = call i32 @llvm.smin.i32(i32 %positive, i32 %other)
   %test = icmp sgt i32 %smin, 0
   ret i1 %test
@@ -47,7 +47,7 @@ define i1 @smin_commute(i32 %other) {
 ; CHECK-NEXT:    [[TEST:%.*]] = icmp sgt i32 [[OTHER:%.*]], 0
 ; CHECK-NEXT:    ret i1 [[TEST]]
 ;
-  %positive = load i32, i32* @g, !range !{i32 1, i32 2048}
+  %positive = load i32, ptr @g, !range !{i32 1, i32 2048}
   %cmp = icmp slt i32 %other, %positive
   %sel = select i1 %cmp, i32 %other, i32 %positive
   %test = icmp sgt i32 %sel, 0
@@ -83,12 +83,12 @@ define <2 x i1> @smin_commute_vec_undef_elts(<2 x i32> %x, <2 x i32> %other) {
 
 define i1 @maybe_not_positive(i32 %other) {
 ; CHECK-LABEL: @maybe_not_positive(
-; CHECK-NEXT:    [[POSITIVE:%.*]] = load i32, i32* @g, align 4, !range [[RNG0:![0-9]+]]
+; CHECK-NEXT:    [[POSITIVE:%.*]] = load i32, ptr @g, align 4, !range [[RNG0:![0-9]+]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.smin.i32(i32 [[POSITIVE]], i32 [[OTHER:%.*]])
 ; CHECK-NEXT:    [[TEST:%.*]] = icmp sgt i32 [[TMP1]], 0
 ; CHECK-NEXT:    ret i1 [[TEST]]
 ;
-  %positive = load i32, i32* @g, !range !{i32 0, i32 2048}
+  %positive = load i32, ptr @g, !range !{i32 0, i32 2048}
   %cmp = icmp slt i32 %positive, %other
   %sel = select i1 %cmp, i32 %positive, i32 %other
   %test = icmp sgt i32 %sel, 0
index a3119d0726f0693b1556b0dbf4b1b71bc01067d3..890866e44e161ab9f7b6f2ff3cd18b76e95b9eea 100644 (file)
@@ -950,15 +950,15 @@ define i32 @add_umin_wrong_wrap(i32 %x) {
 
 ; Negative test
 
-define i32 @add_umin_extra_use(i32 %x, i32* %p) {
+define i32 @add_umin_extra_use(i32 %x, ptr %p) {
 ; CHECK-LABEL: @add_umin_extra_use(
 ; CHECK-NEXT:    [[A:%.*]] = add nuw i32 [[X:%.*]], 15
-; CHECK-NEXT:    store i32 [[A]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[A]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.umin.i32(i32 [[A]], i32 42)
 ; CHECK-NEXT:    ret i32 [[TMP1]]
 ;
   %a = add nuw i32 %x, 15
-  store i32 %a, i32* %p
+  store i32 %a, ptr %p
   %c = icmp ult i32 %a, 42
   %r = select i1 %c, i32 %a, i32 42
   ret i32 %r
@@ -1062,15 +1062,15 @@ define i32 @add_umax_wrong_wrap(i32 %x) {
 
 ; Negative test
 
-define i32 @add_umax_extra_use(i32 %x, i32* %p) {
+define i32 @add_umax_extra_use(i32 %x, ptr %p) {
 ; CHECK-LABEL: @add_umax_extra_use(
 ; CHECK-NEXT:    [[A:%.*]] = add nuw i32 [[X:%.*]], 15
-; CHECK-NEXT:    store i32 [[A]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[A]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.umax.i32(i32 [[A]], i32 42)
 ; CHECK-NEXT:    ret i32 [[TMP1]]
 ;
   %a = add nuw i32 %x, 15
-  store i32 %a, i32* %p
+  store i32 %a, ptr %p
   %c = icmp ugt i32 %a, 42
   %r = select i1 %c, i32 %a, i32 42
   ret i32 %r
@@ -1197,15 +1197,15 @@ define i32 @add_smin_wrong_wrap(i32 %x) {
 
 ; Negative test
 
-define i32 @add_smin_extra_use(i32 %x, i32* %p) {
+define i32 @add_smin_extra_use(i32 %x, ptr %p) {
 ; CHECK-LABEL: @add_smin_extra_use(
 ; CHECK-NEXT:    [[A:%.*]] = add nsw i32 [[X:%.*]], 15
-; CHECK-NEXT:    store i32 [[A]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[A]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.smin.i32(i32 [[A]], i32 42)
 ; CHECK-NEXT:    ret i32 [[TMP1]]
 ;
   %a = add nsw i32 %x, 15
-  store i32 %a, i32* %p
+  store i32 %a, ptr %p
   %c = icmp slt i32 %a, 42
   %r = select i1 %c, i32 %a, i32 42
   ret i32 %r
@@ -1305,15 +1305,15 @@ define i32 @add_smax_wrong_wrap(i32 %x) {
 
 ; Negative test
 
-define i32 @add_smax_extra_use(i32 %x, i32* %p) {
+define i32 @add_smax_extra_use(i32 %x, ptr %p) {
 ; CHECK-LABEL: @add_smax_extra_use(
 ; CHECK-NEXT:    [[A:%.*]] = add nsw i32 [[X:%.*]], 15
-; CHECK-NEXT:    store i32 [[A]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[A]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.smax.i32(i32 [[A]], i32 42)
 ; CHECK-NEXT:    ret i32 [[TMP1]]
 ;
   %a = add nsw i32 %x, 15
-  store i32 %a, i32* %p
+  store i32 %a, ptr %p
   %c = icmp sgt i32 %a, 42
   %r = select i1 %c, i32 %a, i32 42
   ret i32 %r
index 2f84f415f76a7973c911953865c717275ceaf57a..e4d852a3d62d3f947b0b61da4090aff6968d0d2c 100644 (file)
@@ -555,11 +555,11 @@ define i8 @smin_of_umax_and_not(i8 %x, i8 %y, i8 %z) {
 define i8 @umin_of_not_and_nontrivial_const(i8 %x) {
 ; CHECK-LABEL: @umin_of_not_and_nontrivial_const(
 ; CHECK-NEXT:    [[NOTX:%.*]] = xor i8 [[X:%.*]], -1
-; CHECK-NEXT:    [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[NOTX]], i8 ptrtoint (i8 (i8)* @umin_of_not_and_nontrivial_const to i8))
+; CHECK-NEXT:    [[M:%.*]] = call i8 @llvm.umin.i8(i8 [[NOTX]], i8 ptrtoint (ptr @umin_of_not_and_nontrivial_const to i8))
 ; CHECK-NEXT:    ret i8 [[M]]
 ;
   %notx = xor i8 %x, -1
-  %m = call i8 @llvm.umin.i8(i8 ptrtoint (i8(i8)* @umin_of_not_and_nontrivial_const to i8), i8 %notx)
+  %m = call i8 @llvm.umin.i8(i8 ptrtoint (ptr @umin_of_not_and_nontrivial_const to i8), i8 %notx)
   ret i8 %m
 }
 
@@ -2354,12 +2354,12 @@ define i8 @smin_smin_smin_reassoc_constants(i8 %x, i8 %y) {
 
 define i8 @umax_umax_reassoc_constantexpr_sink(i8 %x, i8 %y) {
 ; CHECK-LABEL: @umax_umax_reassoc_constantexpr_sink(
-; CHECK-NEXT:    [[M1:%.*]] = call i8 @llvm.umax.i8(i8 [[X:%.*]], i8 ptrtoint (i8 (i8, i8)* @umax_umax_reassoc_constantexpr_sink to i8))
+; CHECK-NEXT:    [[M1:%.*]] = call i8 @llvm.umax.i8(i8 [[X:%.*]], i8 ptrtoint (ptr @umax_umax_reassoc_constantexpr_sink to i8))
 ; CHECK-NEXT:    [[M2:%.*]] = call i8 @llvm.umax.i8(i8 [[M1]], i8 42)
 ; CHECK-NEXT:    ret i8 [[M2]]
 ;
   %m1 = call i8 @llvm.umax.i8(i8 %x, i8 42)
-  %m2 = call i8 @llvm.umax.i8(i8 %m1, i8 ptrtoint (i8 (i8, i8)* @umax_umax_reassoc_constantexpr_sink to i8))
+  %m2 = call i8 @llvm.umax.i8(i8 %m1, i8 ptrtoint (ptr @umax_umax_reassoc_constantexpr_sink to i8))
   ret i8 %m2
 }
 
@@ -2485,8 +2485,8 @@ define <3 x i8> @smin_unary_shuffle_ops_uses(<3 x i8> %x, <3 x i8> %y) {
 
 define i1 @PR57986() {
 ; CHECK-LABEL: @PR57986(
-; CHECK-NEXT:    ret i1 ptrtoint (i32* @g to i1)
+; CHECK-NEXT:    ret i1 ptrtoint (ptr @g to i1)
 ;
-  %umin = call i1 @llvm.umin.i1(i1 ptrtoint (i32* @g to i1), i1 true)
+  %umin = call i1 @llvm.umin.i1(i1 ptrtoint (ptr @g to i1), i1 true)
   ret i1 %umin
 }
index 1c86f9608d483bc7b5fcee00729606b5f8b1c635..6bb5b7a815a7bb012fc8a343a672bdf680c68037 100644 (file)
@@ -441,14 +441,14 @@ define float @reduce_precision_multi_use_0(float %x, float %y) {
 ; CHECK-LABEL: @reduce_precision_multi_use_0(
 ; CHECK-NEXT:    [[X_EXT:%.*]] = fpext float [[X:%.*]] to double
 ; CHECK-NEXT:    [[Y_EXT:%.*]] = fpext float [[Y:%.*]] to double
-; CHECK-NEXT:    store double [[X_EXT]], double* undef, align 8
+; CHECK-NEXT:    store double [[X_EXT]], ptr undef, align 8
 ; CHECK-NEXT:    [[MINNUM:%.*]] = call double @llvm.minnum.f64(double [[X_EXT]], double [[Y_EXT]])
 ; CHECK-NEXT:    [[TRUNC:%.*]] = fptrunc double [[MINNUM]] to float
 ; CHECK-NEXT:    ret float [[TRUNC]]
 ;
   %x.ext = fpext float %x to double
   %y.ext = fpext float %y to double
-  store double %x.ext, double* undef
+  store double %x.ext, ptr undef
   %minnum = call double @llvm.minnum.f64(double %x.ext, double %y.ext)
   %trunc = fptrunc double %minnum to float
   ret float %trunc
@@ -458,14 +458,14 @@ define float @reduce_precision_multi_use_1(float %x, float %y) {
 ; CHECK-LABEL: @reduce_precision_multi_use_1(
 ; CHECK-NEXT:    [[X_EXT:%.*]] = fpext float [[X:%.*]] to double
 ; CHECK-NEXT:    [[Y_EXT:%.*]] = fpext float [[Y:%.*]] to double
-; CHECK-NEXT:    store double [[Y_EXT]], double* undef, align 8
+; CHECK-NEXT:    store double [[Y_EXT]], ptr undef, align 8
 ; CHECK-NEXT:    [[MINNUM:%.*]] = call double @llvm.minnum.f64(double [[X_EXT]], double [[Y_EXT]])
 ; CHECK-NEXT:    [[TRUNC:%.*]] = fptrunc double [[MINNUM]] to float
 ; CHECK-NEXT:    ret float [[TRUNC]]
 ;
   %x.ext = fpext float %x to double
   %y.ext = fpext float %y to double
-  store double %y.ext, double* undef
+  store double %y.ext, ptr undef
   %minnum = call double @llvm.minnum.f64(double %x.ext, double %y.ext)
   %trunc = fptrunc double %minnum to float
   ret float %trunc
index 245df0e06980de3f0fd5e406874b50d34bfc17b7..8ce45406f31aba66eb6e886e90bfc3cc1cacfffc 100644 (file)
@@ -570,10 +570,10 @@ define i64 @test30(i32 %A, i32 %B) {
 @PR22087 = external global i32
 define i32 @test31(i32 %V) {
 ; CHECK-LABEL: @test31(
-; CHECK-NEXT:    [[MUL:%.*]] = shl i32 [[V:%.*]], zext (i1 icmp ne (i32* inttoptr (i64 1 to i32*), i32* @PR22087) to i32)
+; CHECK-NEXT:    [[MUL:%.*]] = shl i32 [[V:%.*]], zext (i1 icmp ne (ptr inttoptr (i64 1 to ptr), ptr @PR22087) to i32)
 ; CHECK-NEXT:    ret i32 [[MUL]]
 ;
-  %mul = mul i32 %V, shl (i32 1, i32 zext (i1 icmp ne (i32* inttoptr (i64 1 to i32*), i32* @PR22087) to i32))
+  %mul = mul i32 %V, shl (i32 1, i32 zext (i1 icmp ne (ptr inttoptr (i64 1 to ptr), ptr @PR22087) to i32))
   ret i32 %mul
 }
 
@@ -686,11 +686,11 @@ define i64 @test_mul_canonicalize_neg_is_not_undone(i64 %L1) {
 ; Check we do not undo the canonicalization of 0 - (X * Y), if Y is a constant
 ; expr.
 ; CHECK-LABEL: @test_mul_canonicalize_neg_is_not_undone(
-; CHECK-NEXT:    [[TMP1:%.*]] = mul i64 [[L1:%.*]], ptrtoint (i32* @X to i64)
+; CHECK-NEXT:    [[TMP1:%.*]] = mul i64 [[L1:%.*]], ptrtoint (ptr @X to i64)
 ; CHECK-NEXT:    [[B4:%.*]] = sub i64 0, [[TMP1]]
 ; CHECK-NEXT:    ret i64 [[B4]]
 ;
-  %v1 = ptrtoint i32* @X to i64
+  %v1 = ptrtoint ptr @X to i64
   %B8 = sub i64 0, %v1
   %B4 = mul i64 %B8, %L1
   ret i64 %B4
index a86d94a0efc1d13c49ba429b05fe674e54faf798..d2389c9ea2b2d712582b30d107100315f055d2b1 100644 (file)
@@ -616,11 +616,11 @@ define <2 x i64> @test20(<2 x i64> %A) {
 define i32 @PR20079(i32 %a) {
 ; CHECK-LABEL: @PR20079(
 ; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[A:%.*]], -1
-; CHECK-NEXT:    [[MUL:%.*]] = mul nsw i32 [[ADD]], ptrtoint (i32* @g to i32)
+; CHECK-NEXT:    [[MUL:%.*]] = mul nsw i32 [[ADD]], ptrtoint (ptr @g to i32)
 ; CHECK-NEXT:    ret i32 [[MUL]]
 ;
   %add = add i32 %a, -1
-  %mul = mul nsw i32 %add, ptrtoint (i32* @g to i32)
+  %mul = mul nsw i32 %add, ptrtoint (ptr @g to i32)
   ret i32 %mul
 }
 
@@ -944,10 +944,10 @@ define i64 @test30(i32 %A, i32 %B) {
 @PR22087 = external global i32
 define i32 @test31(i32 %V) {
 ; CHECK-LABEL: @test31(
-; CHECK-NEXT:    [[MUL:%.*]] = shl i32 [[V:%.*]], zext (i1 icmp ne (i32* inttoptr (i64 1 to i32*), i32* @PR22087) to i32)
+; CHECK-NEXT:    [[MUL:%.*]] = shl i32 [[V:%.*]], zext (i1 icmp ne (ptr inttoptr (i64 1 to ptr), ptr @PR22087) to i32)
 ; CHECK-NEXT:    ret i32 [[MUL]]
 ;
-  %mul = mul i32 %V, shl (i32 1, i32 zext (i1 icmp ne (i32* inttoptr (i64 1 to i32*), i32* @PR22087) to i32))
+  %mul = mul i32 %V, shl (i32 1, i32 zext (i1 icmp ne (ptr inttoptr (i64 1 to ptr), ptr @PR22087) to i32))
   ret i32 %mul
 }
 
@@ -1060,11 +1060,11 @@ define i64 @test_mul_canonicalize_neg_is_not_undone(i64 %L1) {
 ; Check we do not undo the canonicalization of 0 - (X * Y), if Y is a constant
 ; expr.
 ; CHECK-LABEL: @test_mul_canonicalize_neg_is_not_undone(
-; CHECK-NEXT:    [[TMP1:%.*]] = mul i64 [[L1:%.*]], ptrtoint (i32* @X to i64)
+; CHECK-NEXT:    [[TMP1:%.*]] = mul i64 [[L1:%.*]], ptrtoint (ptr @X to i64)
 ; CHECK-NEXT:    [[B4:%.*]] = sub i64 0, [[TMP1]]
 ; CHECK-NEXT:    ret i64 [[B4]]
 ;
-  %v1 = ptrtoint i32* @X to i64
+  %v1 = ptrtoint ptr @X to i64
   %B8 = sub i64 0, %v1
   %B4 = mul i64 %B8, %L1
   ret i64 %B4
index 8f54fe4bc71ce7f62782d558884029e26f8a7dbf..99eb53edab786bc0b7e9ffc1bab0e24f51d40209 100644 (file)
@@ -3,58 +3,58 @@
 target datalayout = "e-p:32:32:32-p1:64:64:64-p2:8:8:8-p3:16:16:16-p4:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:32"
 
 
-define i32 @test_as0(i32 addrspace(0)* %a) {
+define i32 @test_as0(ptr addrspace(0) %a) {
 ; CHECK-LABEL: @test_as0(
-; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr i32, i32* [[A:%.*]], i32 1
-; CHECK-NEXT:    [[Y:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr i32, ptr [[A:%.*]], i32 1
+; CHECK-NEXT:    [[Y:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
 ; CHECK-NEXT:    ret i32 [[Y]]
 ;
-  %arrayidx = getelementptr i32, i32 addrspace(0)* %a, i64 1
-  %y = load i32, i32 addrspace(0)* %arrayidx, align 4
+  %arrayidx = getelementptr i32, ptr addrspace(0) %a, i64 1
+  %y = load i32, ptr addrspace(0) %arrayidx, align 4
   ret i32 %y
 }
 
-define i32 @test_as1(i32 addrspace(1)* %a) {
+define i32 @test_as1(ptr addrspace(1) %a) {
 ; CHECK-LABEL: @test_as1(
-; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr i32, i32 addrspace(1)* [[A:%.*]], i64 1
-; CHECK-NEXT:    [[Y:%.*]] = load i32, i32 addrspace(1)* [[ARRAYIDX]], align 4
+; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr i32, ptr addrspace(1) [[A:%.*]], i64 1
+; CHECK-NEXT:    [[Y:%.*]] = load i32, ptr addrspace(1) [[ARRAYIDX]], align 4
 ; CHECK-NEXT:    ret i32 [[Y]]
 ;
-  %arrayidx = getelementptr i32, i32 addrspace(1)* %a, i32 1
-  %y = load i32, i32 addrspace(1)* %arrayidx, align 4
+  %arrayidx = getelementptr i32, ptr addrspace(1) %a, i32 1
+  %y = load i32, ptr addrspace(1) %arrayidx, align 4
   ret i32 %y
 }
 
-define i32 @test_as2(i32 addrspace(2)* %a) {
+define i32 @test_as2(ptr addrspace(2) %a) {
 ; CHECK-LABEL: @test_as2(
-; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr i32, i32 addrspace(2)* [[A:%.*]], i8 1
-; CHECK-NEXT:    [[Y:%.*]] = load i32, i32 addrspace(2)* [[ARRAYIDX]], align 4
+; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr i32, ptr addrspace(2) [[A:%.*]], i8 1
+; CHECK-NEXT:    [[Y:%.*]] = load i32, ptr addrspace(2) [[ARRAYIDX]], align 4
 ; CHECK-NEXT:    ret i32 [[Y]]
 ;
-  %arrayidx = getelementptr i32, i32 addrspace(2)* %a, i32 1
-  %y = load i32, i32 addrspace(2)* %arrayidx, align 4
+  %arrayidx = getelementptr i32, ptr addrspace(2) %a, i32 1
+  %y = load i32, ptr addrspace(2) %arrayidx, align 4
   ret i32 %y
 }
 
-define i32 @test_as3(i32 addrspace(3)* %a) {
+define i32 @test_as3(ptr addrspace(3) %a) {
 ; CHECK-LABEL: @test_as3(
-; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr i32, i32 addrspace(3)* [[A:%.*]], i16 1
-; CHECK-NEXT:    [[Y:%.*]] = load i32, i32 addrspace(3)* [[ARRAYIDX]], align 4
+; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr i32, ptr addrspace(3) [[A:%.*]], i16 1
+; CHECK-NEXT:    [[Y:%.*]] = load i32, ptr addrspace(3) [[ARRAYIDX]], align 4
 ; CHECK-NEXT:    ret i32 [[Y]]
 ;
-  %arrayidx = getelementptr i32, i32 addrspace(3)* %a, i32 1
-  %y = load i32, i32 addrspace(3)* %arrayidx, align 4
+  %arrayidx = getelementptr i32, ptr addrspace(3) %a, i32 1
+  %y = load i32, ptr addrspace(3) %arrayidx, align 4
   ret i32 %y
 }
 
-define i32 @test_combine_ptrtoint(i32 addrspace(2)* %a) {
+define i32 @test_combine_ptrtoint(ptr addrspace(2) %a) {
 ; CHECK-LABEL: @test_combine_ptrtoint(
-; CHECK-NEXT:    [[Y:%.*]] = load i32, i32 addrspace(2)* [[A:%.*]], align 4
+; CHECK-NEXT:    [[Y:%.*]] = load i32, ptr addrspace(2) [[A:%.*]], align 4
 ; CHECK-NEXT:    ret i32 [[Y]]
 ;
-  %cast = ptrtoint i32 addrspace(2)* %a to i8
-  %castback = inttoptr i8 %cast to i32 addrspace(2)*
-  %y = load i32, i32 addrspace(2)* %castback, align 4
+  %cast = ptrtoint ptr addrspace(2) %a to i8
+  %castback = inttoptr i8 %cast to ptr addrspace(2)
+  %y = load i32, ptr addrspace(2) %castback, align 4
   ret i32 %y
 }
 
@@ -62,21 +62,21 @@ define i8 @test_combine_inttoptr(i8 %a) {
 ; CHECK-LABEL: @test_combine_inttoptr(
 ; CHECK-NEXT:    ret i8 [[A:%.*]]
 ;
-  %cast = inttoptr i8 %a to i32 addrspace(2)*
-  %castback = ptrtoint i32 addrspace(2)* %cast to i8
+  %cast = inttoptr i8 %a to ptr addrspace(2)
+  %castback = ptrtoint ptr addrspace(2) %cast to i8
   ret i8 %castback
 }
 
-define i32 @test_combine_vector_ptrtoint(<2 x i32 addrspace(2)*> %a) {
+define i32 @test_combine_vector_ptrtoint(<2 x ptr addrspace(2)> %a) {
 ; CHECK-LABEL: @test_combine_vector_ptrtoint(
-; CHECK-NEXT:    [[P:%.*]] = extractelement <2 x i32 addrspace(2)*> [[A:%.*]], i64 0
-; CHECK-NEXT:    [[Y:%.*]] = load i32, i32 addrspace(2)* [[P]], align 4
+; CHECK-NEXT:    [[P:%.*]] = extractelement <2 x ptr addrspace(2)> [[A:%.*]], i64 0
+; CHECK-NEXT:    [[Y:%.*]] = load i32, ptr addrspace(2) [[P]], align 4
 ; CHECK-NEXT:    ret i32 [[Y]]
 ;
-  %cast = ptrtoint <2 x i32 addrspace(2)*> %a to <2 x i8>
-  %castback = inttoptr <2 x i8> %cast to <2 x i32 addrspace(2)*>
-  %p = extractelement <2 x i32 addrspace(2)*> %castback, i32 0
-  %y = load i32, i32 addrspace(2)* %p, align 4
+  %cast = ptrtoint <2 x ptr addrspace(2)> %a to <2 x i8>
+  %castback = inttoptr <2 x i8> %cast to <2 x ptr addrspace(2)>
+  %p = extractelement <2 x ptr addrspace(2)> %castback, i32 0
+  %y = load i32, ptr addrspace(2) %p, align 4
   ret i32 %y
 }
 
@@ -84,56 +84,56 @@ define <2 x i8> @test_combine_vector_inttoptr(<2 x i8> %a) {
 ; CHECK-LABEL: @test_combine_vector_inttoptr(
 ; CHECK-NEXT:    ret <2 x i8> [[A:%.*]]
 ;
-  %cast = inttoptr <2 x i8> %a to <2 x i32 addrspace(2)*>
-  %castback = ptrtoint <2 x i32 addrspace(2)*> %cast to <2 x i8>
+  %cast = inttoptr <2 x i8> %a to <2 x ptr addrspace(2)>
+  %castback = ptrtoint <2 x ptr addrspace(2)> %cast to <2 x i8>
   ret <2 x i8> %castback
 }
 
 ; Check that the GEP index is changed to the address space integer type (i64 -> i8)
-define i32 addrspace(2)* @shrink_gep_constant_index_64_as2(i32 addrspace(2)* %p) {
+define ptr addrspace(2) @shrink_gep_constant_index_64_as2(ptr addrspace(2) %p) {
 ; CHECK-LABEL: @shrink_gep_constant_index_64_as2(
-; CHECK-NEXT:    [[RET:%.*]] = getelementptr i32, i32 addrspace(2)* [[P:%.*]], i8 1
-; CHECK-NEXT:    ret i32 addrspace(2)* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = getelementptr i32, ptr addrspace(2) [[P:%.*]], i8 1
+; CHECK-NEXT:    ret ptr addrspace(2) [[RET]]
 ;
-  %ret = getelementptr i32, i32 addrspace(2)* %p, i64 1
-  ret i32 addrspace(2)* %ret
+  %ret = getelementptr i32, ptr addrspace(2) %p, i64 1
+  ret ptr addrspace(2) %ret
 }
 
-define i32 addrspace(2)* @shrink_gep_constant_index_32_as2(i32 addrspace(2)* %p) {
+define ptr addrspace(2) @shrink_gep_constant_index_32_as2(ptr addrspace(2) %p) {
 ; CHECK-LABEL: @shrink_gep_constant_index_32_as2(
-; CHECK-NEXT:    [[RET:%.*]] = getelementptr i32, i32 addrspace(2)* [[P:%.*]], i8 1
-; CHECK-NEXT:    ret i32 addrspace(2)* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = getelementptr i32, ptr addrspace(2) [[P:%.*]], i8 1
+; CHECK-NEXT:    ret ptr addrspace(2) [[RET]]
 ;
-  %ret = getelementptr i32, i32 addrspace(2)* %p, i32 1
-  ret i32 addrspace(2)* %ret
+  %ret = getelementptr i32, ptr addrspace(2) %p, i32 1
+  ret ptr addrspace(2) %ret
 }
 
-define i32 addrspace(3)* @shrink_gep_constant_index_64_as3(i32 addrspace(3)* %p) {
+define ptr addrspace(3) @shrink_gep_constant_index_64_as3(ptr addrspace(3) %p) {
 ; CHECK-LABEL: @shrink_gep_constant_index_64_as3(
-; CHECK-NEXT:    [[RET:%.*]] = getelementptr i32, i32 addrspace(3)* [[P:%.*]], i16 1
-; CHECK-NEXT:    ret i32 addrspace(3)* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = getelementptr i32, ptr addrspace(3) [[P:%.*]], i16 1
+; CHECK-NEXT:    ret ptr addrspace(3) [[RET]]
 ;
-  %ret = getelementptr i32, i32 addrspace(3)* %p, i64 1
-  ret i32 addrspace(3)* %ret
+  %ret = getelementptr i32, ptr addrspace(3) %p, i64 1
+  ret ptr addrspace(3) %ret
 }
 
-define i32 addrspace(2)* @shrink_gep_variable_index_64_as2(i32 addrspace(2)* %p, i64 %idx) {
+define ptr addrspace(2) @shrink_gep_variable_index_64_as2(ptr addrspace(2) %p, i64 %idx) {
 ; CHECK-LABEL: @shrink_gep_variable_index_64_as2(
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i64 [[IDX:%.*]] to i8
-; CHECK-NEXT:    [[RET:%.*]] = getelementptr i32, i32 addrspace(2)* [[P:%.*]], i8 [[TMP1]]
-; CHECK-NEXT:    ret i32 addrspace(2)* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = getelementptr i32, ptr addrspace(2) [[P:%.*]], i8 [[TMP1]]
+; CHECK-NEXT:    ret ptr addrspace(2) [[RET]]
 ;
-  %ret = getelementptr i32, i32 addrspace(2)* %p, i64 %idx
-  ret i32 addrspace(2)* %ret
+  %ret = getelementptr i32, ptr addrspace(2) %p, i64 %idx
+  ret ptr addrspace(2) %ret
 }
 
-define i32 addrspace(1)* @grow_gep_variable_index_8_as1(i32 addrspace(1)* %p, i8 %idx) {
+define ptr addrspace(1) @grow_gep_variable_index_8_as1(ptr addrspace(1) %p, i8 %idx) {
 ; CHECK-LABEL: @grow_gep_variable_index_8_as1(
 ; CHECK-NEXT:    [[TMP1:%.*]] = sext i8 [[IDX:%.*]] to i64
-; CHECK-NEXT:    [[RET:%.*]] = getelementptr i32, i32 addrspace(1)* [[P:%.*]], i64 [[TMP1]]
-; CHECK-NEXT:    ret i32 addrspace(1)* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = getelementptr i32, ptr addrspace(1) [[P:%.*]], i64 [[TMP1]]
+; CHECK-NEXT:    ret ptr addrspace(1) [[RET]]
 ;
-  %ret = getelementptr i32, i32 addrspace(1)* %p, i8 %idx
-  ret i32 addrspace(1)* %ret
+  %ret = getelementptr i32, ptr addrspace(1) %p, i8 %idx
+  ret ptr addrspace(1) %ret
 }
 
index 1ded6bba2b5afcab1c798f8bf27a7f6873627db9..583a161dc5c070e9af7f12db40ca5e5b0f4bbf66 100644 (file)
@@ -4,10 +4,10 @@
 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
 
 ; Positive test - all uses are identical casts.
-define void @t0(i1 zeroext %c0, i1 zeroext %c1, i64* nocapture readonly %src) {
+define void @t0(i1 zeroext %c0, i1 zeroext %c1, ptr nocapture readonly %src) {
 ; CHECK-LABEL: @t0(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[DATA:%.*]] = load i64, i64* [[SRC:%.*]], align 8
+; CHECK-NEXT:    [[DATA:%.*]] = load i64, ptr [[SRC:%.*]], align 8
 ; CHECK-NEXT:    br i1 [[C0:%.*]], label [[BB3:%.*]], label [[BB7:%.*]]
 ; CHECK:       bb3:
 ; CHECK-NEXT:    br i1 [[C1:%.*]], label [[BB4:%.*]], label [[BB5:%.*]]
@@ -15,18 +15,18 @@ define void @t0(i1 zeroext %c0, i1 zeroext %c1, i64* nocapture readonly %src) {
 ; CHECK-NEXT:    tail call void @abort()
 ; CHECK-NEXT:    unreachable
 ; CHECK:       bb5:
-; CHECK-NEXT:    [[PTR0:%.*]] = inttoptr i64 [[DATA]] to i32*
-; CHECK-NEXT:    tail call void @sink0(i32* [[PTR0]])
+; CHECK-NEXT:    [[PTR0:%.*]] = inttoptr i64 [[DATA]] to ptr
+; CHECK-NEXT:    tail call void @sink0(ptr [[PTR0]])
 ; CHECK-NEXT:    br label [[BB9:%.*]]
 ; CHECK:       bb7:
-; CHECK-NEXT:    [[PTR1:%.*]] = inttoptr i64 [[DATA]] to i32*
-; CHECK-NEXT:    tail call void @sink1(i32* [[PTR1]])
+; CHECK-NEXT:    [[PTR1:%.*]] = inttoptr i64 [[DATA]] to ptr
+; CHECK-NEXT:    tail call void @sink1(ptr [[PTR1]])
 ; CHECK-NEXT:    br label [[BB9]]
 ; CHECK:       bb9:
 ; CHECK-NEXT:    ret void
 ;
 bb:
-  %data = load i64, i64* %src, align 8
+  %data = load i64, ptr %src, align 8
   br i1 %c0, label %bb3, label %bb7
 
 bb3:
@@ -37,13 +37,13 @@ bb4:
   unreachable
 
 bb5:
-  %ptr0 = inttoptr i64 %data to i32*
-  tail call void @sink0(i32* %ptr0)
+  %ptr0 = inttoptr i64 %data to ptr
+  tail call void @sink0(ptr %ptr0)
   br label %bb9
 
 bb7:
-  %ptr1 = inttoptr i64 %data to i32*
-  tail call void @sink1(i32* %ptr1)
+  %ptr1 = inttoptr i64 %data to ptr
+  tail call void @sink1(ptr %ptr1)
   br label %bb9
 
 bb9:
@@ -51,10 +51,10 @@ bb9:
 }
 
 ; Negative test - all uses are casts, but non-identical ones.
-define void @n1(i1 zeroext %c0, i1 zeroext %c1, i64* nocapture readonly %src) {
+define void @n1(i1 zeroext %c0, i1 zeroext %c1, ptr nocapture readonly %src) {
 ; CHECK-LABEL: @n1(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[DATA:%.*]] = load i64, i64* [[SRC:%.*]], align 8
+; CHECK-NEXT:    [[DATA:%.*]] = load i64, ptr [[SRC:%.*]], align 8
 ; CHECK-NEXT:    br i1 [[C0:%.*]], label [[BB3:%.*]], label [[BB7:%.*]]
 ; CHECK:       bb3:
 ; CHECK-NEXT:    br i1 [[C1:%.*]], label [[BB4:%.*]], label [[BB5:%.*]]
@@ -62,8 +62,8 @@ define void @n1(i1 zeroext %c0, i1 zeroext %c1, i64* nocapture readonly %src) {
 ; CHECK-NEXT:    tail call void @abort()
 ; CHECK-NEXT:    unreachable
 ; CHECK:       bb5:
-; CHECK-NEXT:    [[PTR0:%.*]] = inttoptr i64 [[DATA]] to i32*
-; CHECK-NEXT:    tail call void @sink0(i32* [[PTR0]])
+; CHECK-NEXT:    [[PTR0:%.*]] = inttoptr i64 [[DATA]] to ptr
+; CHECK-NEXT:    tail call void @sink0(ptr [[PTR0]])
 ; CHECK-NEXT:    br label [[BB9:%.*]]
 ; CHECK:       bb7:
 ; CHECK-NEXT:    [[VEC:%.*]] = bitcast i64 [[DATA]] to <2 x i32>
@@ -73,7 +73,7 @@ define void @n1(i1 zeroext %c0, i1 zeroext %c1, i64* nocapture readonly %src) {
 ; CHECK-NEXT:    ret void
 ;
 bb:
-  %data = load i64, i64* %src, align 8
+  %data = load i64, ptr %src, align 8
   br i1 %c0, label %bb3, label %bb7
 
 bb3:
@@ -84,8 +84,8 @@ bb4:
   unreachable
 
 bb5:
-  %ptr0 = inttoptr i64 %data to i32*
-  tail call void @sink0(i32* %ptr0)
+  %ptr0 = inttoptr i64 %data to ptr
+  tail call void @sink0(ptr %ptr0)
   br label %bb9
 
 bb7:
@@ -98,10 +98,10 @@ bb9:
 }
 
 ; Negative test - have non-cast users.
-define void @n2(i1 zeroext %c0, i1 zeroext %c1, i64* nocapture readonly %src) {
+define void @n2(i1 zeroext %c0, i1 zeroext %c1, ptr nocapture readonly %src) {
 ; CHECK-LABEL: @n2(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[DATA:%.*]] = load i64, i64* [[SRC:%.*]], align 8
+; CHECK-NEXT:    [[DATA:%.*]] = load i64, ptr [[SRC:%.*]], align 8
 ; CHECK-NEXT:    br i1 [[C0:%.*]], label [[BB3:%.*]], label [[BB7:%.*]]
 ; CHECK:       bb3:
 ; CHECK-NEXT:    br i1 [[C1:%.*]], label [[BB4:%.*]], label [[BB5:%.*]]
@@ -109,8 +109,8 @@ define void @n2(i1 zeroext %c0, i1 zeroext %c1, i64* nocapture readonly %src) {
 ; CHECK-NEXT:    tail call void @abort()
 ; CHECK-NEXT:    unreachable
 ; CHECK:       bb5:
-; CHECK-NEXT:    [[PTR0:%.*]] = inttoptr i64 [[DATA]] to i32*
-; CHECK-NEXT:    tail call void @sink0(i32* [[PTR0]])
+; CHECK-NEXT:    [[PTR0:%.*]] = inttoptr i64 [[DATA]] to ptr
+; CHECK-NEXT:    tail call void @sink0(ptr [[PTR0]])
 ; CHECK-NEXT:    br label [[BB9:%.*]]
 ; CHECK:       bb7:
 ; CHECK-NEXT:    tail call void @sink3(i64 [[DATA]])
@@ -119,7 +119,7 @@ define void @n2(i1 zeroext %c0, i1 zeroext %c1, i64* nocapture readonly %src) {
 ; CHECK-NEXT:    ret void
 ;
 bb:
-  %data = load i64, i64* %src, align 8
+  %data = load i64, ptr %src, align 8
   br i1 %c0, label %bb3, label %bb7
 
 bb3:
@@ -130,8 +130,8 @@ bb4:
   unreachable
 
 bb5:
-  %ptr0 = inttoptr i64 %data to i32*
-  tail call void @sink0(i32* %ptr0)
+  %ptr0 = inttoptr i64 %data to ptr
+  tail call void @sink0(ptr %ptr0)
   br label %bb9
 
 bb7:
@@ -144,9 +144,9 @@ bb9:
 
 declare void @abort()
 
-declare void @sink0(i32*)
+declare void @sink0(ptr)
 
-declare void @sink1(i32*)
+declare void @sink1(ptr)
 
 declare void @sink2(<2 x i32>)
 
index 2c382d287864846af7f6e56c1c86ddf1cdc2b92e..c2dfb302f42173f3592e93f8ac0dc654f781f24f 100644 (file)
@@ -1,30 +1,27 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -passes=instcombine -S -data-layout="E-m:e-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64" | FileCheck %s
 
-define void @PR35618(i64* %st1, double* %st2) {
+define void @PR35618(ptr %st1, ptr %st2) {
 ; CHECK-LABEL: @PR35618(
 ; CHECK-NEXT:    [[Y1:%.*]] = alloca double, align 8
 ; CHECK-NEXT:    [[Z1:%.*]] = alloca double, align 8
-; CHECK-NEXT:    [[LD1:%.*]] = load double, double* [[Y1]], align 8
-; CHECK-NEXT:    [[LD2:%.*]] = load double, double* [[Z1]], align 8
+; CHECK-NEXT:    [[LD1:%.*]] = load double, ptr [[Y1]], align 8
+; CHECK-NEXT:    [[LD2:%.*]] = load double, ptr [[Z1]], align 8
 ; CHECK-NEXT:    [[TMP10:%.*]] = fcmp olt double [[LD1]], [[LD2]]
 ; CHECK-NEXT:    [[TMP121:%.*]] = select i1 [[TMP10]], double [[LD1]], double [[LD2]]
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i64* [[ST1:%.*]] to double*
-; CHECK-NEXT:    store double [[TMP121]], double* [[TMP1]], align 8
-; CHECK-NEXT:    store double [[TMP121]], double* [[ST2:%.*]], align 8
+; CHECK-NEXT:    store double [[TMP121]], ptr [[ST1:%.*]], align 8
+; CHECK-NEXT:    store double [[TMP121]], ptr [[ST2:%.*]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %y1 = alloca double
   %z1 = alloca double
-  %ld1 = load double, double* %y1
-  %ld2 = load double, double* %z1
+  %ld1 = load double, ptr %y1
+  %ld2 = load double, ptr %z1
   %tmp10 = fcmp olt double %ld1, %ld2
-  %sel = select i1 %tmp10, double* %y1, double* %z1
-  %tmp11 = bitcast double* %sel to i64*
-  %tmp12 = load i64, i64* %tmp11
-  store i64 %tmp12, i64* %st1
-  %bc = bitcast double* %st2 to i64*
-  store i64 %tmp12, i64* %bc
+  %sel = select i1 %tmp10, ptr %y1, ptr %z1
+  %tmp12 = load i64, ptr %sel
+  store i64 %tmp12, ptr %st1
+  store i64 %tmp12, ptr %st2
   ret void
 }
 
index 2e8e3a7b9c2586553747f0dd68310bed2e03bd2e..f79940af1646a6e1885e28d207d1ebbf0a3f98d7 100644 (file)
@@ -5,24 +5,24 @@
 ; alone.
 
 define i32 @call_thunk(i32 %x, i32 %y) {
-  %r = call i32 bitcast (void (i32, ...)* @inc_first_arg_thunk to i32 (i32, i32)*)(i32 %x, i32 %y)
+  %r = call i32 @inc_first_arg_thunk(i32 %x, i32 %y)
   ret i32 %r
 }
 
 ; CHECK-LABEL: define i32 @call_thunk(i32 %x, i32 %y)
-; CHECK:   %r = call i32 bitcast (void (i32, ...)* @inc_first_arg_thunk to i32 (i32, i32)*)(i32 %x, i32 %y)
+; CHECK:   %r = call i32 @inc_first_arg_thunk(i32 %x, i32 %y)
 ; CHECK:   ret i32 %r
 
 define internal void @inc_first_arg_thunk(i32 %arg1, ...) #0 {
 entry:
   %inc = add i32 %arg1, 1
-  musttail call void (i32, ...) bitcast (i32 (i32, i32)* @plus to void (i32, ...)*)(i32 %inc, ...)
+  musttail call void (i32, ...) @plus(i32 %inc, ...)
   ret void
 }
 
 ; CHECK-LABEL: define internal void @inc_first_arg_thunk(i32 %arg1, ...) #0
 ; CHECK:   %inc = add i32 %arg1, 1
-; CHECK:   musttail call void (i32, ...) bitcast (i32 (i32, i32)* @plus to void (i32, ...)*)(i32 %inc, ...)
+; CHECK:   musttail call void (i32, ...) @plus(i32 %inc, ...)
 ; CHECK:   ret void
 
 define internal i32 @plus(i32 %x, i32 %y) {
index 8b5ca47fa263da0bdfbe9f5ef506e5b734da1b07..5468df38dad185ae55f1539079f6e1237be896df 100644 (file)
@@ -189,23 +189,23 @@ entry:
   ]
 
 sw.bb:                                            ; preds = %entry
-  store i32 90, i32* %retval, align 4
+  store i32 90, ptr %retval, align 4
   br label %return
 
 sw.bb1:                                           ; preds = %entry
-  store i32 91, i32* %retval, align 4
+  store i32 91, ptr %retval, align 4
   br label %return
 
 sw.bb2:                                           ; preds = %entry
-  store i32 92, i32* %retval, align 4
+  store i32 92, ptr %retval, align 4
   br label %return
 
 sw.epilog:                                        ; preds = %entry
-  store i32 113, i32* %retval, align 4
+  store i32 113, ptr %retval, align 4
   br label %return
 
 return:                                           ; preds = %sw.epilog, %sw.bb2,
-  %rval = load i32, i32* %retval, align 4
+  %rval = load i32, ptr %retval, align 4
   ret i32 %rval
 }
 
@@ -229,7 +229,7 @@ define void @PR29009() {
   br label %1
 
 ; <label>:1:                                      ; preds = %10, %0
-  %2 = load volatile i32, i32* @njob, align 4
+  %2 = load volatile i32, ptr @njob, align 4
   %3 = icmp ne i32 %2, 0
   br i1 %3, label %4, label %11
 
@@ -242,15 +242,15 @@ define void @PR29009() {
   ]
 
 ; <label>:7:                                      ; preds = %4
-  store i32 6, i32* @a, align 4
+  store i32 6, ptr @a, align 4
   br label %10
 
 ; <label>:8:                                      ; preds = %4
-  store i32 1, i32* @a, align 4
+  store i32 1, ptr @a, align 4
   br label %10
 
 ; <label>:9:                                      ; preds = %4
-  store i32 2, i32* @a, align 4
+  store i32 2, ptr @a, align 4
   br label %10
 
 ; <label>:10:                                     ; preds = %13, %12, %11, %10, %9, %8, %7
index 439851841bcf875dfe6886e6b0ab3e96273df960..9e4670b51ad139aca4d56a301dc3eaff0dbb477a 100644 (file)
@@ -101,7 +101,7 @@ define <2 x i32> @shrink_and_vec(<2 x i33> %a) {
 ; This is based on an 'any_of' loop construct.
 ; By narrowing the phi and logic op, we simplify away the zext and the final icmp.
 
-define i1 @searchArray1(i32 %needle, i32* %haystack) {
+define i1 @searchArray1(i32 %needle, ptr %haystack) {
 ; CHECK-LABEL: @searchArray1(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[LOOP:%.*]]
@@ -109,8 +109,8 @@ define i1 @searchArray1(i32 %needle, i32* %haystack) {
 ; CHECK-NEXT:    [[INDVAR:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INDVAR_NEXT:%.*]], [[LOOP]] ]
 ; CHECK-NEXT:    [[FOUND:%.*]] = phi i8 [ 0, [[ENTRY]] ], [ [[OR:%.*]], [[LOOP]] ]
 ; CHECK-NEXT:    [[TMP0:%.*]] = sext i32 [[INDVAR]] to i64
-; CHECK-NEXT:    [[IDX:%.*]] = getelementptr i32, i32* [[HAYSTACK:%.*]], i64 [[TMP0]]
-; CHECK-NEXT:    [[LD:%.*]] = load i32, i32* [[IDX]], align 4
+; CHECK-NEXT:    [[IDX:%.*]] = getelementptr i32, ptr [[HAYSTACK:%.*]], i64 [[TMP0]]
+; CHECK-NEXT:    [[LD:%.*]] = load i32, ptr [[IDX]], align 4
 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 [[LD]], [[NEEDLE:%.*]]
 ; CHECK-NEXT:    [[ZEXT:%.*]] = zext i1 [[CMP1]] to i8
 ; CHECK-NEXT:    [[OR]] = or i8 [[FOUND]], [[ZEXT]]
@@ -127,8 +127,8 @@ entry:
 loop:
   %indvar = phi i32 [ 0, %entry ], [ %indvar.next, %loop ]
   %found = phi i8 [ 0, %entry ], [ %or, %loop ]
-  %idx = getelementptr i32, i32* %haystack, i32 %indvar
-  %ld = load i32, i32* %idx
+  %idx = getelementptr i32, ptr %haystack, i32 %indvar
+  %ld = load i32, ptr %idx
   %cmp1 = icmp eq i32 %ld, %needle
   %zext = zext i1 %cmp1 to i8
   %or = or i8 %found, %zext
@@ -145,15 +145,15 @@ exit:
 ; This is based on an 'all_of' loop construct.
 ; By narrowing the phi and logic op, we simplify away the zext and the final icmp.
 
-define i1 @searchArray2(i32 %hay, i32* %haystack) {
+define i1 @searchArray2(i32 %hay, ptr %haystack) {
 ; CHECK-LABEL: @searchArray2(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[LOOP:%.*]]
 ; CHECK:       loop:
 ; CHECK-NEXT:    [[INDVAR:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVAR_NEXT:%.*]], [[LOOP]] ]
 ; CHECK-NEXT:    [[FOUND:%.*]] = phi i8 [ 1, [[ENTRY]] ], [ [[AND:%.*]], [[LOOP]] ]
-; CHECK-NEXT:    [[IDX:%.*]] = getelementptr i32, i32* [[HAYSTACK:%.*]], i64 [[INDVAR]]
-; CHECK-NEXT:    [[LD:%.*]] = load i32, i32* [[IDX]], align 4
+; CHECK-NEXT:    [[IDX:%.*]] = getelementptr i32, ptr [[HAYSTACK:%.*]], i64 [[INDVAR]]
+; CHECK-NEXT:    [[LD:%.*]] = load i32, ptr [[IDX]], align 4
 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 [[LD]], [[HAY:%.*]]
 ; CHECK-NEXT:    [[ZEXT:%.*]] = zext i1 [[CMP1]] to i8
 ; CHECK-NEXT:    [[AND]] = and i8 [[FOUND]], [[ZEXT]]
@@ -170,8 +170,8 @@ entry:
 loop:
   %indvar = phi i64 [ 0, %entry ], [ %indvar.next, %loop ]
   %found = phi i8 [ 1, %entry ], [ %and, %loop ]
-  %idx = getelementptr i32, i32* %haystack, i64 %indvar
-  %ld = load i32, i32* %idx
+  %idx = getelementptr i32, ptr %haystack, i64 %indvar
+  %ld = load i32, ptr %idx
   %cmp1 = icmp eq i32 %ld, %hay
   %zext = zext i1 %cmp1 to i8
   %and = and i8 %found, %zext
index f3effe1022793c741348d4170c83741b1fd6f692..96d41d7febfa9fcca018931f0b863bc41c5a16d0 100644 (file)
@@ -1,6 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
-declare void @use(i32 *)
+declare void @use(ptr)
 
 define void @foo(i64 %X) {
 ; Currently we cannot handle expressions of the form Offset - X * Scale.
@@ -8,14 +8,12 @@ define void @foo(i64 %X) {
 ; CHECK-NEXT:    [[TMP1:%.*]] = shl i64 [[X:%.*]], 2
 ; CHECK-NEXT:    [[TMP2:%.*]] = sub i64 24, [[TMP1]]
 ; CHECK-NEXT:    [[TMP3:%.*]] = alloca i8, i64 [[TMP2]], align 4
-; CHECK-NEXT:    [[TMP4:%.*]] = bitcast i8* [[TMP3]] to i32*
-; CHECK-NEXT:    call void @use(i32* nonnull [[TMP4]])
+; CHECK-NEXT:    call void @use(ptr nonnull [[TMP3]])
 ; CHECK-NEXT:    ret void
 ;
   %1 = mul nsw i64 %X, -4
   %2 = add nsw i64 %1, 24
   %3 = alloca i8, i64 %2, align 4
-  %4 = bitcast i8* %3 to i32*
-  call void @use(i32 *%4)
+  call void @use(ptr %3)
   ret void
 }
index 64d09c1cf0d79120c3d445cbeaabeeef7f767b9a..e23b7d8eb213e7be64fa3021cae660f17fb229b2 100644 (file)
@@ -12,47 +12,47 @@ target datalayout = "p:32:32"
 
 
 ; operator new(size_t = unsigned int)
-declare i8* @_Znwj(%size_t)
+declare ptr @_Znwj(%size_t)
 
 ; operator new[](size_t = unsigned int)
-declare i8* @_Znaj(%size_t)
+declare ptr @_Znaj(%size_t)
 
 ; operator new(size_t = unsigned int, std::align_val_t)
-declare i8* @_ZnwjSt11align_val_t(%size_t, %size_t)
+declare ptr @_ZnwjSt11align_val_t(%size_t, %size_t)
 
 ; operator new[](size_t = unsigned int, std::align_val_t)
-declare i8* @_ZnajSt11align_val_t(%size_t, %size_t)
+declare ptr @_ZnajSt11align_val_t(%size_t, %size_t)
 
 ; operator new(size_t = unsigned int, std::align_val_t, const std::nothrow_t&)
-declare i8* @_ZnwjSt11align_val_tRKSt9nothrow_t(%size_t, %size_t, %nothrow_t*)
+declare ptr @_ZnwjSt11align_val_tRKSt9nothrow_t(%size_t, %size_t, ptr)
 
 ; operator new[](size_t = unsigned int, std::align_val_t, const std::nothrow_t&)
-declare i8* @_ZnajSt11align_val_tRKSt9nothrow_t(%size_t, %size_t, %nothrow_t*)
+declare ptr @_ZnajSt11align_val_tRKSt9nothrow_t(%size_t, %size_t, ptr)
 
 
-; operator delete(void*, size_t = unsigned int)
-declare void @_ZdlPvj(i8*, %size_t)
+; operator delete(ptr, size_t = unsigned int)
+declare void @_ZdlPvj(ptr, %size_t)
 
-; operator delete[](void*, size_t = unsigned int)
-declare void @_ZdaPvj(i8*, %size_t)
+; operator delete[](ptr, size_t = unsigned int)
+declare void @_ZdaPvj(ptr, %size_t)
 
-; operator delete(void*, std::align_val_t)
-declare void @_ZdlPvSt11align_val_t(i8*, %align_val_t)
+; operator delete(ptr, std::align_val_t)
+declare void @_ZdlPvSt11align_val_t(ptr, %align_val_t)
 
-; operator delete[](void*, std::align_val_t)
-declare void @_ZdaPvSt11align_val_t(i8*, %align_val_t)
+; operator delete[](ptr, std::align_val_t)
+declare void @_ZdaPvSt11align_val_t(ptr, %align_val_t)
 
-; operator delete(void*, size_t = unsigned int, std::align_val_t)
-declare void @_ZdlPvjSt11align_val_t(i8*, %size_t, %align_val_t)
+; operator delete(ptr, size_t = unsigned int, std::align_val_t)
+declare void @_ZdlPvjSt11align_val_t(ptr, %size_t, %align_val_t)
 
-; operator delete[](void*, size_t = unsigned int, std::align_val_t)
-declare void @_ZdaPvjSt11align_val_t(i8*, %size_t, %align_val_t)
+; operator delete[](ptr, size_t = unsigned int, std::align_val_t)
+declare void @_ZdaPvjSt11align_val_t(ptr, %size_t, %align_val_t)
 
-; operator delete(void*, std::align_val_t, const std::nothrow_t&)
-declare void @_ZdlPvSt11align_val_tRKSt9nothrow_t(i8*, %align_val_t, %nothrow_t*)
+; operator delete(ptr, std::align_val_t, const std::nothrow_t&)
+declare void @_ZdlPvSt11align_val_tRKSt9nothrow_t(ptr, %align_val_t, ptr)
 
-; operator delete[](void*, std::align_val_t, const std::nothrow_t&)
-declare void @_ZdaPvSt11align_val_tRKSt9nothrow_t(i8*, %align_val_t, %nothrow_t*)
+; operator delete[](ptr, std::align_val_t, const std::nothrow_t&)
+declare void @_ZdaPvSt11align_val_tRKSt9nothrow_t(ptr, %align_val_t, ptr)
 
 declare void @llvm.assume(i1)
 
@@ -65,36 +65,36 @@ define void @elim_new_delete_pairs() {
 ;
   %nt = alloca %nothrow_t
 
-  %nwj = call i8* @_Znwj(%size_t 32)
-  call void @_ZdlPvj(i8* %nwj, %size_t 32)
+  %nwj = call ptr @_Znwj(%size_t 32)
+  call void @_ZdlPvj(ptr %nwj, %size_t 32)
 
-  %naj = call i8* @_Znaj(%size_t 32)
-  call void @_ZdaPvj(i8* %naj, %size_t 32)
+  %naj = call ptr @_Znaj(%size_t 32)
+  call void @_ZdaPvj(ptr %naj, %size_t 32)
 
-  %nwja = call i8* @_ZnwjSt11align_val_t(%size_t 32, %size_t 8)
-  call void @_ZdlPvSt11align_val_t(i8* %nwja, %size_t 8)
+  %nwja = call ptr @_ZnwjSt11align_val_t(%size_t 32, %size_t 8)
+  call void @_ZdlPvSt11align_val_t(ptr %nwja, %size_t 8)
 
-  %naja = call i8* @_ZnajSt11align_val_t(%size_t 32, %size_t 8)
-  call void @_ZdaPvSt11align_val_t(i8* %naja, i32 8)
+  %naja = call ptr @_ZnajSt11align_val_t(%size_t 32, %size_t 8)
+  call void @_ZdaPvSt11align_val_t(ptr %naja, i32 8)
 
-  %nwjat = call i8* @_ZnwjSt11align_val_tRKSt9nothrow_t(%size_t 32, %size_t 8, %nothrow_t* %nt)
-  call void @_ZdlPvSt11align_val_tRKSt9nothrow_t(i8* %nwjat, %size_t 8, %nothrow_t* %nt)
+  %nwjat = call ptr @_ZnwjSt11align_val_tRKSt9nothrow_t(%size_t 32, %size_t 8, ptr %nt)
+  call void @_ZdlPvSt11align_val_tRKSt9nothrow_t(ptr %nwjat, %size_t 8, ptr %nt)
 
-  %najat = call i8* @_ZnajSt11align_val_tRKSt9nothrow_t(%size_t 32, %size_t 8, %nothrow_t* %nt)
-  call void @_ZdaPvSt11align_val_tRKSt9nothrow_t(i8* %najat, i32 8, %nothrow_t* %nt)
+  %najat = call ptr @_ZnajSt11align_val_tRKSt9nothrow_t(%size_t 32, %size_t 8, ptr %nt)
+  call void @_ZdaPvSt11align_val_tRKSt9nothrow_t(ptr %najat, i32 8, ptr %nt)
 
-  %nwja2 = call i8* @_ZnwjSt11align_val_t(%size_t 32, %size_t 8)
-  call void @_ZdlPvjSt11align_val_t(i8* %nwja2, %size_t 32, %size_t 8)
+  %nwja2 = call ptr @_ZnwjSt11align_val_t(%size_t 32, %size_t 8)
+  call void @_ZdlPvjSt11align_val_t(ptr %nwja2, %size_t 32, %size_t 8)
 
-  %naja2 = call i8* @_ZnajSt11align_val_t(%size_t 32, %size_t 8)
-  call void @_ZdaPvjSt11align_val_t(i8* %naja2, %size_t 32, %size_t 8)
+  %naja2 = call ptr @_ZnajSt11align_val_t(%size_t 32, %size_t 8)
+  call void @_ZdaPvjSt11align_val_t(ptr %naja2, %size_t 32, %size_t 8)
 
   ; Check that the alignment assume does not prevent the removal.
-  %nwa3 = call i8* @_ZnajSt11align_val_t(%size_t 32, %size_t 16)
+  %nwa3 = call ptr @_ZnajSt11align_val_t(%size_t 32, %size_t 16)
 
-  call void @llvm.assume(i1 true) [ "align"(i8* %nwa3, i32 16) ]
+  call void @llvm.assume(i1 true) [ "align"(ptr %nwa3, i32 16) ]
 
-  call void @_ZdaPvjSt11align_val_t(i8* %nwa3, %size_t 32, %size_t 16)
+  call void @_ZdaPvjSt11align_val_t(ptr %nwa3, %size_t 32, %size_t 16)
 
   ret void
 }
index 1d13b0bffdd18df5560d199130f3407ce1aa3091..373c97dc391d8deb505e4994ce02557573213206 100644 (file)
 ; PR1201
 
 ; 'if (p) delete p;' cannot result in a call to 'operator delete(0)'.
-define void @test6a(i8* %foo) minsize {
+define void @test6a(ptr %foo) minsize {
 ; CHECK-LABEL: @test6a(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq i8* [[FOO:%.*]], null
+; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq ptr [[FOO:%.*]], null
 ; CHECK-NEXT:    br i1 [[TOBOOL]], label [[IF_END:%.*]], label [[IF_THEN:%.*]]
 ; CHECK:       if.then:
-; CHECK-NEXT:    tail call void @_ZdlPv(i8* [[FOO]]) #[[ATTR5:[0-9]+]]
+; CHECK-NEXT:    tail call void @_ZdlPv(ptr [[FOO]]) #[[ATTR5:[0-9]+]]
 ; CHECK-NEXT:    br label [[IF_END]]
 ; CHECK:       if.end:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %tobool = icmp eq i8* %foo, null
+  %tobool = icmp eq ptr %foo, null
   br i1 %tobool, label %if.end, label %if.then
 
 if.then:                                          ; preds = %entry
-  tail call void @_ZdlPv(i8* %foo) builtin
+  tail call void @_ZdlPv(ptr %foo) builtin
   br label %if.end
 
 if.end:                                           ; preds = %entry, %if.then
   ret void
 }
 
-declare i8* @_ZnwmRKSt9nothrow_t(i64, i8*) nobuiltin
-declare void @_ZdlPvRKSt9nothrow_t(i8*, i8*) nobuiltin
+declare ptr @_ZnwmRKSt9nothrow_t(i64, ptr) nobuiltin
+declare void @_ZdlPvRKSt9nothrow_t(ptr, ptr) nobuiltin
 declare i32 @__gxx_personality_v0(...)
-declare void @_ZN1AC2Ev(i8* %this)
+declare void @_ZN1AC2Ev(ptr %this)
 
-define void @test7() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define void @test7() personality ptr @__gxx_personality_v0 {
 ; CHECK-LABEL: @test7(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    invoke void @_ZN1AC2Ev(i8* undef)
+; CHECK-NEXT:    invoke void @_ZN1AC2Ev(ptr undef)
 ; CHECK-NEXT:    to label [[DOTNOEXC_I:%.*]] unwind label [[LPAD_I:%.*]]
 ; CHECK:       .noexc.i:
 ; CHECK-NEXT:    unreachable
 ; CHECK:       lpad.i:
-; CHECK-NEXT:    [[TMP0:%.*]] = landingpad { i8*, i32 }
+; CHECK-NEXT:    [[TMP0:%.*]] = landingpad { ptr, i32 }
 ; CHECK-NEXT:    cleanup
-; CHECK-NEXT:    resume { i8*, i32 } [[TMP0]]
+; CHECK-NEXT:    resume { ptr, i32 } [[TMP0]]
 ;
 entry:
   %nt = alloca i8
-  %call.i = tail call i8* @_ZnwmRKSt9nothrow_t(i64 1, i8* %nt) builtin nounwind
-  invoke void @_ZN1AC2Ev(i8* undef)
+  %call.i = tail call ptr @_ZnwmRKSt9nothrow_t(i64 1, ptr %nt) builtin nounwind
+  invoke void @_ZN1AC2Ev(ptr undef)
   to label %.noexc.i unwind label %lpad.i
 
 .noexc.i:                                         ; preds = %entry
   unreachable
 
 lpad.i:                                           ; preds = %entry
-  %0 = landingpad { i8*, i32 } cleanup
-  call void @_ZdlPvRKSt9nothrow_t(i8* %call.i, i8* %nt) builtin nounwind
-  resume { i8*, i32 } %0
+  %0 = landingpad { ptr, i32 } cleanup
+  call void @_ZdlPvRKSt9nothrow_t(ptr %call.i, ptr %nt) builtin nounwind
+  resume { ptr, i32 } %0
 }
 
-declare i8* @_Znwm(i64) nobuiltin
-define i8* @_Znwj(i32 %n) nobuiltin {
+declare ptr @_Znwm(i64) nobuiltin
+define ptr @_Znwj(i32 %n) nobuiltin {
 ; CHECK-LABEL: @_Znwj(
 ; CHECK-NEXT:    [[Z:%.*]] = zext i32 [[N:%.*]] to i64
-; CHECK-NEXT:    [[M:%.*]] = call i8* @_Znwm(i64 [[Z]])
-; CHECK-NEXT:    ret i8* [[M]]
+; CHECK-NEXT:    [[M:%.*]] = call ptr @_Znwm(i64 [[Z]])
+; CHECK-NEXT:    ret ptr [[M]]
 ;
   %z = zext i32 %n to i64
-  %m = call i8* @_Znwm(i64 %z)
-  ret i8* %m
+  %m = call ptr @_Znwm(i64 %z)
+  ret ptr %m
 }
-declare i8* @_Znam(i64) nobuiltin
-declare i8* @_Znaj(i32) nobuiltin
-declare void @_ZdlPv(i8*) nobuiltin
-declare void @_ZdaPv(i8*) nobuiltin
+declare ptr @_Znam(i64) nobuiltin
+declare ptr @_Znaj(i32) nobuiltin
+declare void @_ZdlPv(ptr) nobuiltin
+declare void @_ZdaPv(ptr) nobuiltin
 
-define linkonce void @_ZdlPvm(i8* %p, i64) nobuiltin {
+define linkonce void @_ZdlPvm(ptr %p, i64) nobuiltin {
 ; CHECK-LABEL: @_ZdlPvm(
-; CHECK-NEXT:    call void @_ZdlPv(i8* [[P:%.*]])
+; CHECK-NEXT:    call void @_ZdlPv(ptr [[P:%.*]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @_ZdlPv(i8* %p)
+  call void @_ZdlPv(ptr %p)
   ret void
 }
-define linkonce void @_ZdlPvj(i8* %p, i32) nobuiltin {
+define linkonce void @_ZdlPvj(ptr %p, i32) nobuiltin {
 ; CHECK-LABEL: @_ZdlPvj(
-; CHECK-NEXT:    call void @_ZdlPv(i8* [[P:%.*]])
+; CHECK-NEXT:    call void @_ZdlPv(ptr [[P:%.*]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @_ZdlPv(i8* %p)
+  call void @_ZdlPv(ptr %p)
   ret void
 }
-define linkonce void @_ZdaPvm(i8* %p, i64) nobuiltin {
+define linkonce void @_ZdaPvm(ptr %p, i64) nobuiltin {
 ; CHECK-LABEL: @_ZdaPvm(
-; CHECK-NEXT:    call void @_ZdaPv(i8* [[P:%.*]])
+; CHECK-NEXT:    call void @_ZdaPv(ptr [[P:%.*]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @_ZdaPv(i8* %p)
+  call void @_ZdaPv(ptr %p)
   ret void
 }
-define linkonce void @_ZdaPvj(i8* %p, i32) nobuiltin {
+define linkonce void @_ZdaPvj(ptr %p, i32) nobuiltin {
 ; CHECK-LABEL: @_ZdaPvj(
-; CHECK-NEXT:    call void @_ZdaPv(i8* [[P:%.*]])
+; CHECK-NEXT:    call void @_ZdaPv(ptr [[P:%.*]])
 ; CHECK-NEXT:    ret void
 ;
-  call void @_ZdaPv(i8* %p)
+  call void @_ZdaPv(ptr %p)
   ret void
 }
 
 
 ; new(size_t, align_val_t)
-declare i8* @_ZnwmSt11align_val_t(i64, i64) nobuiltin
+declare ptr @_ZnwmSt11align_val_t(i64, i64) nobuiltin
 ; new[](size_t, align_val_t)
-declare i8* @_ZnamSt11align_val_t(i64, i64) nobuiltin
+declare ptr @_ZnamSt11align_val_t(i64, i64) nobuiltin
 ; new(size_t, align_val_t, nothrow)
-declare i8* @_ZnwmSt11align_val_tRKSt9nothrow_t(i64, i64, i8*) nobuiltin
+declare ptr @_ZnwmSt11align_val_tRKSt9nothrow_t(i64, i64, ptr) nobuiltin
 ; new[](size_t, align_val_t, nothrow)
-declare i8* @_ZnamSt11align_val_tRKSt9nothrow_t(i64, i64, i8*) nobuiltin
-; delete(void*, align_val_t)
-declare void @_ZdlPvSt11align_val_t(i8*, i64) nobuiltin
-; delete[](void*, align_val_t)
-declare void @_ZdaPvSt11align_val_t(i8*, i64) nobuiltin
-; delete(void*, align_val_t, nothrow)
-declare void @_ZdlPvSt11align_val_tRKSt9nothrow_t(i8*, i64, i8*) nobuiltin
-; delete[](void*, align_val_t, nothrow)
-declare void @_ZdaPvSt11align_val_tRKSt9nothrow_t(i8*, i64, i8*) nobuiltin
-; delete(void*, unsigned long, align_val_t)
-declare void @_ZdlPvmSt11align_val_t(i8*, i64, i64) nobuiltin
-; delete[](void*, unsigned long, align_val_t)
-declare void @_ZdaPvmSt11align_val_t(i8*, i64, i64) nobuiltin
+declare ptr @_ZnamSt11align_val_tRKSt9nothrow_t(i64, i64, ptr) nobuiltin
+; delete(ptr, align_val_t)
+declare void @_ZdlPvSt11align_val_t(ptr, i64) nobuiltin
+; delete[](ptr, align_val_t)
+declare void @_ZdaPvSt11align_val_t(ptr, i64) nobuiltin
+; delete(ptr, align_val_t, nothrow)
+declare void @_ZdlPvSt11align_val_tRKSt9nothrow_t(ptr, i64, ptr) nobuiltin
+; delete[](ptr, align_val_t, nothrow)
+declare void @_ZdaPvSt11align_val_tRKSt9nothrow_t(ptr, i64, ptr) nobuiltin
+; delete(ptr, unsigned long, align_val_t)
+declare void @_ZdlPvmSt11align_val_t(ptr, i64, i64) nobuiltin
+; delete[](ptr, unsigned long, align_val_t)
+declare void @_ZdaPvmSt11align_val_t(ptr, i64, i64) nobuiltin
 
 declare void @llvm.assume(i1)
 
@@ -137,66 +137,66 @@ define void @test8() {
 ; CHECK-NEXT:    ret void
 ;
   %nt = alloca i8
-  %nw = call i8* @_Znwm(i64 32) builtin
-  call void @_ZdlPv(i8* %nw) builtin
-  %na = call i8* @_Znam(i64 32) builtin
-  call void @_ZdaPv(i8* %na) builtin
-  %nwm = call i8* @_Znwm(i64 32) builtin
-  call void @_ZdlPvm(i8* %nwm, i64 32) builtin
-  %nam = call i8* @_Znam(i64 32) builtin
-  call void @_ZdaPvm(i8* %nam, i64 32) builtin
-  %nwa = call i8* @_ZnwmSt11align_val_t(i64 32, i64 8) builtin
-  call void @_ZdlPvSt11align_val_t(i8* %nwa, i64 8) builtin
-  %naa = call i8* @_ZnamSt11align_val_t(i64 32, i64 8) builtin
-  call void @_ZdaPvSt11align_val_t(i8* %naa, i64 8) builtin
-  %nwat = call i8* @_ZnwmSt11align_val_tRKSt9nothrow_t(i64 32, i64 8, i8* %nt) builtin
-  call void @_ZdlPvSt11align_val_tRKSt9nothrow_t(i8* %nwat, i64 8, i8* %nt) builtin
-  %naat = call i8* @_ZnamSt11align_val_tRKSt9nothrow_t(i64 32, i64 8, i8* %nt) builtin
-  call void @_ZdaPvSt11align_val_tRKSt9nothrow_t(i8* %naat, i64 8, i8* %nt) builtin
-  %nwa2 = call i8* @_ZnwmSt11align_val_t(i64 32, i64 8) builtin
-  call void @_ZdlPvmSt11align_val_t(i8* %nwa2, i64 32, i64 8) builtin
-  %naa2 = call i8* @_ZnamSt11align_val_t(i64 32, i64 8) builtin
-  call void @_ZdaPvmSt11align_val_t(i8* %naa2, i64 32, i64 8) builtin
+  %nw = call ptr @_Znwm(i64 32) builtin
+  call void @_ZdlPv(ptr %nw) builtin
+  %na = call ptr @_Znam(i64 32) builtin
+  call void @_ZdaPv(ptr %na) builtin
+  %nwm = call ptr @_Znwm(i64 32) builtin
+  call void @_ZdlPvm(ptr %nwm, i64 32) builtin
+  %nam = call ptr @_Znam(i64 32) builtin
+  call void @_ZdaPvm(ptr %nam, i64 32) builtin
+  %nwa = call ptr @_ZnwmSt11align_val_t(i64 32, i64 8) builtin
+  call void @_ZdlPvSt11align_val_t(ptr %nwa, i64 8) builtin
+  %naa = call ptr @_ZnamSt11align_val_t(i64 32, i64 8) builtin
+  call void @_ZdaPvSt11align_val_t(ptr %naa, i64 8) builtin
+  %nwat = call ptr @_ZnwmSt11align_val_tRKSt9nothrow_t(i64 32, i64 8, ptr %nt) builtin
+  call void @_ZdlPvSt11align_val_tRKSt9nothrow_t(ptr %nwat, i64 8, ptr %nt) builtin
+  %naat = call ptr @_ZnamSt11align_val_tRKSt9nothrow_t(i64 32, i64 8, ptr %nt) builtin
+  call void @_ZdaPvSt11align_val_tRKSt9nothrow_t(ptr %naat, i64 8, ptr %nt) builtin
+  %nwa2 = call ptr @_ZnwmSt11align_val_t(i64 32, i64 8) builtin
+  call void @_ZdlPvmSt11align_val_t(ptr %nwa2, i64 32, i64 8) builtin
+  %naa2 = call ptr @_ZnamSt11align_val_t(i64 32, i64 8) builtin
+  call void @_ZdaPvmSt11align_val_t(ptr %naa2, i64 32, i64 8) builtin
 
   ; Check that the alignment assume does not prevent the removal.
-  %nwa3 = call i8* @_ZnwmSt11align_val_t(i64 32, i64 16) builtin
-  call void @llvm.assume(i1 true) [ "align"(i8* %nwa3, i64 16) ]
-  call void @_ZdlPvmSt11align_val_t(i8* %nwa3, i64 32, i64 16) builtin
+  %nwa3 = call ptr @_ZnwmSt11align_val_t(i64 32, i64 16) builtin
+  call void @llvm.assume(i1 true) [ "align"(ptr %nwa3, i64 16) ]
+  call void @_ZdlPvmSt11align_val_t(ptr %nwa3, i64 32, i64 16) builtin
 
   ret void
 }
 
 define void @test10()  {
 ; CHECK-LABEL: @test10(
-; CHECK-NEXT:    call void @_ZdlPv(i8* null)
+; CHECK-NEXT:    call void @_ZdlPv(ptr null)
 ; CHECK-NEXT:    ret void
 ;
-  call void @_ZdlPv(i8* null)
+  call void @_ZdlPv(ptr null)
   ret void
 }
 
 define void @test11() {
 ; CHECK-LABEL: @test11(
-; CHECK-NEXT:    [[CALL:%.*]] = call dereferenceable_or_null(8) i8* @_Znwm(i64 8) #[[ATTR5]]
-; CHECK-NEXT:    call void @_ZdlPv(i8* [[CALL]])
+; CHECK-NEXT:    [[CALL:%.*]] = call dereferenceable_or_null(8) ptr @_Znwm(i64 8) #[[ATTR5]]
+; CHECK-NEXT:    call void @_ZdlPv(ptr [[CALL]])
 ; CHECK-NEXT:    ret void
 ;
-  %call = call i8* @_Znwm(i64 8) builtin
-  call void @_ZdlPv(i8* %call)
+  %call = call ptr @_Znwm(i64 8) builtin
+  call void @_ZdlPv(ptr %call)
   ret void
 }
 
-declare i8* @llvm.launder.invariant.group(i8*)
-declare i8* @llvm.strip.invariant.group(i8*)
+declare ptr @llvm.launder.invariant.group(ptr)
+declare ptr @llvm.strip.invariant.group(ptr)
 
 define void @test17() {
 ; CHECK-LABEL: @test17(
 ; CHECK-NEXT:    ret void
 ;
-  %nw1 = call i8* @_Znwm(i64 32) builtin
-  %nw2 = call i8* @llvm.launder.invariant.group(i8* %nw1)
-  %nw3 = call i8* @llvm.strip.invariant.group(i8* %nw2)
-  store i8 1, i8* %nw3
-  call void @_ZdlPv(i8* %nw2) builtin
+  %nw1 = call ptr @_Znwm(i64 32) builtin
+  %nw2 = call ptr @llvm.launder.invariant.group(ptr %nw1)
+  %nw3 = call ptr @llvm.strip.invariant.group(ptr %nw2)
+  store i8 1, ptr %nw3
+  call void @_ZdlPv(ptr %nw2) builtin
   ret void
 }
index 369dbbd7ec09ddd67ac88e428b56cc33cb6ed012..2db9b1ce09b17c211b3afd160ff5d69a96eb24c2 100644 (file)
@@ -3,15 +3,15 @@
 ; REQUIRES: x86-registered-target
 ; PR1201
 
-declare noalias i8* @"\01??2@YAPEAX_K@Z"(i64) nobuiltin
-declare void @"\01??3@YAXPEAX@Z"(i8*) nobuiltin
+declare noalias ptr @"\01??2@YAPEAX_K@Z"(i64) nobuiltin
+declare void @"\01??3@YAXPEAX@Z"(ptr) nobuiltin
 
 define void @test9() {
 ; CHECK-LABEL: @test9(
 ; CHECK-NEXT:    ret void
 ;
-  %new_long_long = call noalias i8* @"\01??2@YAPEAX_K@Z"(i64 32) builtin
-  call void @"\01??3@YAXPEAX@Z"(i8* %new_long_long) builtin
+  %new_long_long = call noalias ptr @"\01??2@YAPEAX_K@Z"(i64 32) builtin
+  call void @"\01??3@YAXPEAX@Z"(ptr %new_long_long) builtin
   ret void
 }
 
index 712ae638d49e9c05e53da236085840c3fca99c3a..e62b00554830d7a0c3310fe635f4b630b77e1ecb 100644 (file)
@@ -9,22 +9,22 @@ target triple = "i386-apple-darwin9.8"
 ; CHECK: ret
 define double @mysqrt(double %x) nounwind {
 entry:
-  %x_addr = alloca double                         ; <double*> [#uses=2]
-  %retval = alloca double, align 8                ; <double*> [#uses=2]
-  %0 = alloca double, align 8                     ; <double*> [#uses=2]
+  %x_addr = alloca double                         ; <ptr> [#uses=2]
+  %retval = alloca double, align 8                ; <ptr> [#uses=2]
+  %0 = alloca double, align 8                     ; <ptr> [#uses=2]
   %"alloca point" = bitcast i32 0 to i32          ; <i32> [#uses=0]
-  store double %x, double* %x_addr
-  %1 = load double, double* %x_addr, align 8              ; <double> [#uses=1]
+  store double %x, ptr %x_addr
+  %1 = load double, ptr %x_addr, align 8              ; <double> [#uses=1]
   %2 = call double @fabs(double %1) nounwind readnone ; <double> [#uses=1]
   %3 = call double @sqrt(double %2) nounwind readonly ; <double> [#uses=1]
   %4 = fadd double %3, 0.000000e+00               ; <double> [#uses=1]
-  store double %4, double* %0, align 8
-  %5 = load double, double* %0, align 8                   ; <double> [#uses=1]
-  store double %5, double* %retval, align 8
+  store double %4, ptr %0, align 8
+  %5 = load double, ptr %0, align 8                   ; <double> [#uses=1]
+  store double %5, ptr %retval, align 8
   br label %return
 
 return:                                           ; preds = %entry
-  %retval1 = load double, double* %retval                 ; <double> [#uses=1]
+  %retval1 = load double, ptr %retval                 ; <double> [#uses=1]
   ret double %retval1
 }
 
index 71e14060cc7faa1c1b0c05c1ed694a0f2d224598..98b610af3da26a8b707b83a819cb9732080ff805 100644 (file)
@@ -10,7 +10,7 @@ entry:
   unreachable
 }
 
-define dso_local void @test() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define dso_local void @test() personality ptr @__gxx_personality_v0 {
 entry:
 ; CHECK: define dso_local void @test()
 ; CHECK-NEXT: entry:
@@ -24,13 +24,13 @@ invoke.cont:
   ret void
 
 lpad:
-  %0 = landingpad { i8*, i32 }
+  %0 = landingpad { ptr, i32 }
           cleanup
-  call void (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
-  resume { i8*, i32 } %0
+  call void (ptr, ...) @printf(ptr @.str.2)
+  resume { ptr, i32 } %0
 
 }
 
 declare dso_local i32 @__gxx_personality_v0(...)
 
-declare dso_local void @printf(i8*, ...)
+declare dso_local void @printf(ptr, ...)
index 449d574720f12798de823f00ccd0c684e05cce31..be3c33e528c542e34774c1271b2cff599b7e38c3 100644 (file)
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-define void @test01(i8* %ptr0, i8* %ptr1) {
+define void @test01(ptr %ptr0, ptr %ptr1) {
 ; CHECK-LABEL: @test01(
-; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1
-; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1
+; CHECK-NEXT:    store i8 42, ptr [[PTR0:%.*]], align 1
+; CHECK-NEXT:    store i8 43, ptr [[PTR1:%.*]], align 1
 ; CHECK-NEXT:    ret void
 ;
   call void @llvm.experimental.noalias.scope.decl(metadata !0)
-  store i8 42, i8* %ptr0
-  store i8 43, i8* %ptr1
+  store i8 42, ptr %ptr0
+  store i8 43, ptr %ptr1
   ret void
 }
 
-define void @test02_keep(i8* %ptr0, i8* %ptr1) {
+define void @test02_keep(ptr %ptr0, ptr %ptr1) {
 ; CHECK-LABEL: @test02_keep(
 ; CHECK-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata !0)
-; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !0
-; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !3
+; CHECK-NEXT:    store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !0
+; CHECK-NEXT:    store i8 43, ptr [[PTR1:%.*]], align 1, !noalias !3
 ; CHECK-NEXT:    ret void
 ;
   call void @llvm.experimental.noalias.scope.decl(metadata !0)
-  store i8 42, i8* %ptr0, !alias.scope !0
-  store i8 43, i8* %ptr1, !noalias !5
+  store i8 42, ptr %ptr0, !alias.scope !0
+  store i8 43, ptr %ptr1, !noalias !5
   ret void
 }
 
-define void @test03(i8* %ptr0, i8* %ptr1) {
+define void @test03(ptr %ptr0, ptr %ptr1) {
 ; CHECK-LABEL: @test03(
-; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !5
-; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !3
+; CHECK-NEXT:    store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !5
+; CHECK-NEXT:    store i8 43, ptr [[PTR1:%.*]], align 1, !noalias !3
 ; CHECK-NEXT:    ret void
 ;
   call void @llvm.experimental.noalias.scope.decl(metadata !0)
-  store i8 42, i8* %ptr0, !alias.scope !3
-  store i8 43, i8* %ptr1, !noalias !5
+  store i8 42, ptr %ptr0, !alias.scope !3
+  store i8 43, ptr %ptr1, !noalias !5
   ret void
 }
 
-define void @test04_keep(i8* %ptr0, i8* %ptr1) {
+define void @test04_keep(ptr %ptr0, ptr %ptr1) {
 ; CHECK-LABEL: @test04_keep(
 ; CHECK-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata !0)
-; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !3
-; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !3
+; CHECK-NEXT:    store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !3
+; CHECK-NEXT:    store i8 43, ptr [[PTR1:%.*]], align 1, !noalias !3
 ; CHECK-NEXT:    ret void
 ;
   call void @llvm.experimental.noalias.scope.decl(metadata !0)
-  store i8 42, i8* %ptr0, !alias.scope !5
-  store i8 43, i8* %ptr1, !noalias !5
+  store i8 42, ptr %ptr0, !alias.scope !5
+  store i8 43, ptr %ptr1, !noalias !5
   ret void
 }
 
-define void @test05_keep(i8* %ptr0, i8* %ptr1) {
+define void @test05_keep(ptr %ptr0, ptr %ptr1) {
 ; CHECK-LABEL: @test05_keep(
 ; CHECK-NEXT:    call void @llvm.experimental.noalias.scope.decl(metadata !0)
-; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !3
-; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !0
+; CHECK-NEXT:    store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !3
+; CHECK-NEXT:    store i8 43, ptr [[PTR1:%.*]], align 1, !noalias !0
 ; CHECK-NEXT:    ret void
 ;
   call void @llvm.experimental.noalias.scope.decl(metadata !0)
-  store i8 42, i8* %ptr0, !alias.scope !5
-  store i8 43, i8* %ptr1, !noalias !0
+  store i8 42, ptr %ptr0, !alias.scope !5
+  store i8 43, ptr %ptr1, !noalias !0
   ret void
 }
 
-define void @test06(i8* %ptr0, i8* %ptr1) {
+define void @test06(ptr %ptr0, ptr %ptr1) {
 ; CHECK-LABEL: @test06(
-; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !3
-; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !5
+; CHECK-NEXT:    store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !3
+; CHECK-NEXT:    store i8 43, ptr [[PTR1:%.*]], align 1, !noalias !5
 ; CHECK-NEXT:    ret void
 ;
   call void @llvm.experimental.noalias.scope.decl(metadata !0)
-  store i8 42, i8* %ptr0, !alias.scope !5
-  store i8 43, i8* %ptr1, !noalias !3
+  store i8 42, ptr %ptr0, !alias.scope !5
+  store i8 43, ptr %ptr1, !noalias !3
   ret void
 }
 
-define void @test07(i8* %ptr0, i8* %ptr1) {
+define void @test07(ptr %ptr0, ptr %ptr1) {
 ; CHECK-LABEL: @test07(
-; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !0
-; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !5
+; CHECK-NEXT:    store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !0
+; CHECK-NEXT:    store i8 43, ptr [[PTR1:%.*]], align 1, !noalias !5
 ; CHECK-NEXT:    ret void
 ;
   call void @llvm.experimental.noalias.scope.decl(metadata !0)
-  store i8 42, i8* %ptr0, !alias.scope !0
-  store i8 43, i8* %ptr1, !noalias !3
+  store i8 42, ptr %ptr0, !alias.scope !0
+  store i8 43, ptr %ptr1, !noalias !3
   ret void
 }
 
-define void @test08(i8* %ptr0, i8* %ptr1) {
+define void @test08(ptr %ptr0, ptr %ptr1) {
 ; CHECK-LABEL: @test08(
-; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !5
-; CHECK-NEXT:    store i8 43, i8* [[PTR1:%.*]], align 1, !noalias !0
+; CHECK-NEXT:    store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !5
+; CHECK-NEXT:    store i8 43, ptr [[PTR1:%.*]], align 1, !noalias !0
 ; CHECK-NEXT:    ret void
 ;
   call void @llvm.experimental.noalias.scope.decl(metadata !0)
-  store i8 42, i8* %ptr0, !alias.scope !3
-  store i8 43, i8* %ptr1, !noalias !0
+  store i8 42, ptr %ptr0, !alias.scope !3
+  store i8 43, ptr %ptr1, !noalias !0
   ret void
 }
 
-define void @test11(i8* %ptr0) {
+define void @test11(ptr %ptr0) {
 ; CHECK-LABEL: @test11(
-; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !0
+; CHECK-NEXT:    store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !0
 ; CHECK-NEXT:    ret void
 ;
   call void @llvm.experimental.noalias.scope.decl(metadata !0)
-  store i8 42, i8* %ptr0, !alias.scope !0
+  store i8 42, ptr %ptr0, !alias.scope !0
   ret void
 }
 
-define void @test12(i8* %ptr0) {
+define void @test12(ptr %ptr0) {
 ; CHECK-LABEL: @test12(
-; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !5
+; CHECK-NEXT:    store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !5
 ; CHECK-NEXT:    ret void
 ;
   call void @llvm.experimental.noalias.scope.decl(metadata !0)
-  store i8 42, i8* %ptr0, !alias.scope !3
+  store i8 42, ptr %ptr0, !alias.scope !3
   ret void
 }
 
-define void @test13(i8* %ptr0) {
+define void @test13(ptr %ptr0) {
 ; CHECK-LABEL: @test13(
-; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !alias.scope !3
+; CHECK-NEXT:    store i8 42, ptr [[PTR0:%.*]], align 1, !alias.scope !3
 ; CHECK-NEXT:    ret void
 ;
   call void @llvm.experimental.noalias.scope.decl(metadata !0)
-  store i8 42, i8* %ptr0, !alias.scope !5
+  store i8 42, ptr %ptr0, !alias.scope !5
   ret void
 }
 
-define void @test14(i8* %ptr0) {
+define void @test14(ptr %ptr0) {
 ; CHECK-LABEL: @test14(
-; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !noalias !0
+; CHECK-NEXT:    store i8 42, ptr [[PTR0:%.*]], align 1, !noalias !0
 ; CHECK-NEXT:    ret void
 ;
   call void @llvm.experimental.noalias.scope.decl(metadata !0)
-  store i8 42, i8* %ptr0, !noalias !0
+  store i8 42, ptr %ptr0, !noalias !0
   ret void
 }
 
-define void @test15(i8* %ptr0) {
+define void @test15(ptr %ptr0) {
 ; CHECK-LABEL: @test15(
-; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !noalias !5
+; CHECK-NEXT:    store i8 42, ptr [[PTR0:%.*]], align 1, !noalias !5
 ; CHECK-NEXT:    ret void
 ;
   call void @llvm.experimental.noalias.scope.decl(metadata !0)
-  store i8 42, i8* %ptr0, !noalias !3
+  store i8 42, ptr %ptr0, !noalias !3
   ret void
 }
 
-define void @test16(i8* %ptr0) {
+define void @test16(ptr %ptr0) {
 ; CHECK-LABEL: @test16(
-; CHECK-NEXT:    store i8 42, i8* [[PTR0:%.*]], align 1, !noalias !3
+; CHECK-NEXT:    store i8 42, ptr [[PTR0:%.*]], align 1, !noalias !3
 ; CHECK-NEXT:    ret void
 ;
   call void @llvm.experimental.noalias.scope.decl(metadata !0)
-  store i8 42, i8* %ptr0, !noalias !5
+  store i8 42, ptr %ptr0, !noalias !5
   ret void
 }
 
index cb5d083c73cc82d0b969ef17441b63eb4fd2fb19..350d6f11cb9ff26eff5540158cd837a355494000 100644 (file)
@@ -6,14 +6,14 @@
 @as0 = external global i32
 @as1 = external addrspace(1) global i32
 
-declare void @addrspace0(i32*)
-declare void @addrspace1(i32 addrspace(1)*)
+declare void @addrspace0(ptr)
+declare void @addrspace1(ptr addrspace(1))
 
-; CHECK: call void @addrspace0(i32* nonnull @as0)
-; CHECK: call void @addrspace1(i32 addrspace(1)* @as1)
+; CHECK: call void @addrspace0(ptr nonnull @as0)
+; CHECK: call void @addrspace1(ptr addrspace(1) @as1)
 
 define void @test() {
-  call void @addrspace0(i32* @as0)
-  call void @addrspace1(i32 addrspace(1)* @as1)
+  call void @addrspace0(ptr @as0)
+  call void @addrspace1(ptr addrspace(1) @as1)
   ret void
 }
index 02d0ff80f716b41e9b5b2183b0290ff5c53e4c31..3fab2dfb41a4280a5be40136eac3a2dc770e4744 100644 (file)
 
 ; Passing select(cond, null, v) as nonnull should be optimized to passing v
 
-define nonnull i32* @pr48975(i32** %.0) {
+define nonnull ptr @pr48975(ptr %.0) {
 ; CHECK-LABEL: @pr48975(
-; CHECK-NEXT:    [[DOT1:%.*]] = load i32*, i32** [[DOT0:%.*]], align 8
-; CHECK-NEXT:    [[DOT2:%.*]] = icmp eq i32* [[DOT1]], null
-; CHECK-NEXT:    [[DOT3:%.*]] = bitcast i32** [[DOT0]] to i32*
-; CHECK-NEXT:    [[DOT4:%.*]] = select i1 [[DOT2]], i32* null, i32* [[DOT3]]
-; CHECK-NEXT:    ret i32* [[DOT4]]
+; CHECK-NEXT:    [[DOT1:%.*]] = load ptr, ptr [[DOT0:%.*]], align 8
+; CHECK-NEXT:    [[DOT2:%.*]] = icmp eq ptr [[DOT1]], null
+; CHECK-NEXT:    [[DOT4:%.*]] = select i1 [[DOT2]], ptr null, ptr [[DOT0]]
+; CHECK-NEXT:    ret ptr [[DOT4]]
 ;
-  %.1 = load i32*, i32** %.0, align 8
-  %.2 = icmp eq i32* %.1, null
-  %.3 = bitcast i32** %.0 to i32*
-  %.4 = select i1 %.2, i32* null, i32* %.3
-  ret i32* %.4
+  %.1 = load ptr, ptr %.0, align 8
+  %.2 = icmp eq ptr %.1, null
+  %.4 = select i1 %.2, ptr null, ptr %.0
+  ret ptr %.4
 }
 
-define nonnull i32* @nonnull_ret(i1 %cond, i32* %p) {
+define nonnull ptr @nonnull_ret(i1 %cond, ptr %p) {
 ; CHECK-LABEL: @nonnull_ret(
-; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], i32* [[P:%.*]], i32* null
-; CHECK-NEXT:    ret i32* [[RES]]
+; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], ptr [[P:%.*]], ptr null
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %res = select i1 %cond, i32* %p, i32* null
-  ret i32* %res
+  %res = select i1 %cond, ptr %p, ptr null
+  ret ptr %res
 }
 
-define nonnull i32* @nonnull_ret2(i1 %cond, i32* %p) {
+define nonnull ptr @nonnull_ret2(i1 %cond, ptr %p) {
 ; CHECK-LABEL: @nonnull_ret2(
-; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], i32* null, i32* [[P:%.*]]
-; CHECK-NEXT:    ret i32* [[RES]]
+; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], ptr null, ptr [[P:%.*]]
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %res = select i1 %cond, i32* null, i32* %p
-  ret i32* %res
+  %res = select i1 %cond, ptr null, ptr %p
+  ret ptr %res
 }
 
-define nonnull noundef i32* @nonnull_noundef_ret(i1 %cond, i32* %p) {
+define nonnull noundef ptr @nonnull_noundef_ret(i1 %cond, ptr %p) {
 ; CHECK-LABEL: @nonnull_noundef_ret(
-; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], i32* [[P:%.*]], i32* null
-; CHECK-NEXT:    ret i32* [[RES]]
+; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], ptr [[P:%.*]], ptr null
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %res = select i1 %cond, i32* %p, i32* null
-  ret i32* %res
+  %res = select i1 %cond, ptr %p, ptr null
+  ret ptr %res
 }
 
-define nonnull noundef i32* @nonnull_noundef_ret2(i1 %cond, i32* %p) {
+define nonnull noundef ptr @nonnull_noundef_ret2(i1 %cond, ptr %p) {
 ; CHECK-LABEL: @nonnull_noundef_ret2(
-; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], i32* null, i32* [[P:%.*]]
-; CHECK-NEXT:    ret i32* [[RES]]
+; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], ptr null, ptr [[P:%.*]]
+; CHECK-NEXT:    ret ptr [[RES]]
 ;
-  %res = select i1 %cond, i32* null, i32* %p
-  ret i32* %res
+  %res = select i1 %cond, ptr null, ptr %p
+  ret ptr %res
 }
 
 
-define void @nonnull_call(i1 %cond, i32* %p) {
+define void @nonnull_call(i1 %cond, ptr %p) {
 ; CHECK-LABEL: @nonnull_call(
-; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], i32* [[P:%.*]], i32* null
-; CHECK-NEXT:    call void @f(i32* nonnull [[RES]])
+; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], ptr [[P:%.*]], ptr null
+; CHECK-NEXT:    call void @f(ptr nonnull [[RES]])
 ; CHECK-NEXT:    ret void
 ;
-  %res = select i1 %cond, i32* %p, i32* null
-  call void @f(i32* nonnull %res)
+  %res = select i1 %cond, ptr %p, ptr null
+  call void @f(ptr nonnull %res)
   ret void
 }
 
-define void @nonnull_call2(i1 %cond, i32* %p) {
+define void @nonnull_call2(i1 %cond, ptr %p) {
 ; CHECK-LABEL: @nonnull_call2(
-; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], i32* null, i32* [[P:%.*]]
-; CHECK-NEXT:    call void @f(i32* nonnull [[RES]])
+; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], ptr null, ptr [[P:%.*]]
+; CHECK-NEXT:    call void @f(ptr nonnull [[RES]])
 ; CHECK-NEXT:    ret void
 ;
-  %res = select i1 %cond, i32* null, i32* %p
-  call void @f(i32* nonnull %res)
+  %res = select i1 %cond, ptr null, ptr %p
+  call void @f(ptr nonnull %res)
   ret void
 }
 
-define void @nonnull_noundef_call(i1 %cond, i32* %p) {
+define void @nonnull_noundef_call(i1 %cond, ptr %p) {
 ; CHECK-LABEL: @nonnull_noundef_call(
-; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], i32* [[P:%.*]], i32* null
-; CHECK-NEXT:    call void @f(i32* noundef nonnull [[RES]])
+; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], ptr [[P:%.*]], ptr null
+; CHECK-NEXT:    call void @f(ptr noundef nonnull [[RES]])
 ; CHECK-NEXT:    ret void
 ;
-  %res = select i1 %cond, i32* %p, i32* null
-  call void @f(i32* nonnull noundef %res)
+  %res = select i1 %cond, ptr %p, ptr null
+  call void @f(ptr nonnull noundef %res)
   ret void
 }
 
-define void @nonnull_noundef_call2(i1 %cond, i32* %p) {
+define void @nonnull_noundef_call2(i1 %cond, ptr %p) {
 ; CHECK-LABEL: @nonnull_noundef_call2(
-; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], i32* null, i32* [[P:%.*]]
-; CHECK-NEXT:    call void @f(i32* noundef nonnull [[RES]])
+; CHECK-NEXT:    [[RES:%.*]] = select i1 [[COND:%.*]], ptr null, ptr [[P:%.*]]
+; CHECK-NEXT:    call void @f(ptr noundef nonnull [[RES]])
 ; CHECK-NEXT:    ret void
 ;
-  %res = select i1 %cond, i32* null, i32* %p
-  call void @f(i32* nonnull noundef %res)
+  %res = select i1 %cond, ptr null, ptr %p
+  call void @f(ptr nonnull noundef %res)
   ret void
 }
 
-declare void @f(i32*)
+declare void @f(ptr)
index e3cecd687ed9469ad01cc77b0f4879b83e43cf4e..48cd4f537a8cf686fb9d39fecee0d36845169bb2 100644 (file)
@@ -171,15 +171,15 @@ define void @pr50370(i32 %x) {
 ; CHECK-LABEL: @pr50370(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[XOR:%.*]] = xor i32 [[X:%.*]], 1
-; CHECK-NEXT:    [[B15:%.*]] = srem i32 ashr (i32 65536, i32 or (i32 zext (i1 icmp eq (i32* @g, i32* null) to i32), i32 65537)), [[XOR]]
-; CHECK-NEXT:    [[B12:%.*]] = add nuw nsw i32 [[B15]], ashr (i32 65536, i32 or (i32 zext (i1 icmp eq (i32* @g, i32* null) to i32), i32 65537))
+; CHECK-NEXT:    [[B15:%.*]] = srem i32 ashr (i32 65536, i32 or (i32 zext (i1 icmp eq (ptr @g, ptr null) to i32), i32 65537)), [[XOR]]
+; CHECK-NEXT:    [[B12:%.*]] = add nuw nsw i32 [[B15]], ashr (i32 65536, i32 or (i32 zext (i1 icmp eq (ptr @g, ptr null) to i32), i32 65537))
 ; CHECK-NEXT:    [[B:%.*]] = xor i32 [[B12]], -1
-; CHECK-NEXT:    store i32 [[B]], i32* undef, align 4
+; CHECK-NEXT:    store i32 [[B]], ptr undef, align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
   %xor = xor i32 %x, 1
-  %or4 = or i32 or (i32 zext (i1 icmp eq (i32* @g, i32* null) to i32), i32 1), 65536
+  %or4 = or i32 or (i32 zext (i1 icmp eq (ptr @g, ptr null) to i32), i32 1), 65536
   %B6 = ashr i32 65536, %or4
   %B15 = srem i32 %B6, %xor
   %B20 = sdiv i32 %or4, 2147483647
@@ -190,6 +190,6 @@ entry:
   %B2 = xor i32 %B12, %B8
   %B3 = or i32 %B12, undef
   %B = xor i32 %B2, %B3
-  store i32 %B, i32* undef, align 4
+  store i32 %B, ptr undef, align 4
   ret void
 }
index 29c779de94063ca7242d2ce17b8a0ad46b0b2b98..db49c7d0c602b1dea139d8478841c28b452e8636 100644 (file)
@@ -163,15 +163,15 @@ define i32 @not_sub(i32 %y) {
   ret i32 %r
 }
 
-define i32 @not_sub_extra_use(i32 %y, i32* %p) {
+define i32 @not_sub_extra_use(i32 %y, ptr %p) {
 ; CHECK-LABEL: @not_sub_extra_use(
 ; CHECK-NEXT:    [[S:%.*]] = sub i32 123, [[Y:%.*]]
-; CHECK-NEXT:    store i32 [[S]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[S]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = add i32 [[Y]], -124
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %s = sub i32 123, %y
-  store i32 %s, i32* %p
+  store i32 %s, ptr %p
   %r = xor i32 %s, -1
   ret i32 %r
 }
@@ -186,15 +186,15 @@ define <2 x i32> @not_sub_splat(<2 x i32> %y) {
   ret <2 x i32> %r
 }
 
-define <2 x i32> @not_sub_extra_use_splat(<2 x i32> %y, <2 x i32>* %p) {
+define <2 x i32> @not_sub_extra_use_splat(<2 x i32> %y, ptr %p) {
 ; CHECK-LABEL: @not_sub_extra_use_splat(
 ; CHECK-NEXT:    [[S:%.*]] = sub <2 x i32> <i32 123, i32 123>, [[Y:%.*]]
-; CHECK-NEXT:    store <2 x i32> [[S]], <2 x i32>* [[P:%.*]], align 8
+; CHECK-NEXT:    store <2 x i32> [[S]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[R:%.*]] = add <2 x i32> [[Y]], <i32 -124, i32 -124>
 ; CHECK-NEXT:    ret <2 x i32> [[R]]
 ;
   %s = sub <2 x i32> <i32 123, i32 123>, %y
-  store <2 x i32> %s, <2 x i32>* %p
+  store <2 x i32> %s, ptr %p
   %r = xor <2 x i32> %s, <i32 -1, i32 -1>
   ret <2 x i32> %r
 }
@@ -209,15 +209,15 @@ define <2 x i32> @not_sub_vec(<2 x i32> %y) {
   ret <2 x i32> %r
 }
 
-define <2 x i32> @not_sub_extra_use_vec(<2 x i32> %y, <2 x i32>* %p) {
+define <2 x i32> @not_sub_extra_use_vec(<2 x i32> %y, ptr %p) {
 ; CHECK-LABEL: @not_sub_extra_use_vec(
 ; CHECK-NEXT:    [[S:%.*]] = sub <2 x i32> <i32 123, i32 42>, [[Y:%.*]]
-; CHECK-NEXT:    store <2 x i32> [[S]], <2 x i32>* [[P:%.*]], align 8
+; CHECK-NEXT:    store <2 x i32> [[S]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[R:%.*]] = add <2 x i32> [[Y]], <i32 -124, i32 -43>
 ; CHECK-NEXT:    ret <2 x i32> [[R]]
 ;
   %s = sub <2 x i32> <i32 123, i32 42>, %y
-  store <2 x i32> %s, <2 x i32>* %p
+  store <2 x i32> %s, ptr %p
   %r = xor <2 x i32> %s, <i32 -1, i32 -1>
   ret <2 x i32> %r
 }
index 05a803f28fd1f4b56eea33eb2d3139b82c1f962c..cb1fb109a30951f6d246fcd7703e7346d9e968d6 100644 (file)
@@ -32,15 +32,15 @@ define i1 @shl_icmp(i64 %X) {
   ret i1 %B
 }
 
-define i64 @shl1(i64 %X, i64* %P) {
+define i64 @shl1(i64 %X, ptr %P) {
 ; CHECK-LABEL: @shl1(
 ; CHECK-NEXT:    [[A:%.*]] = and i64 [[X:%.*]], 312
-; CHECK-NEXT:    store i64 [[A]], i64* [[P:%.*]], align 4
+; CHECK-NEXT:    store i64 [[A]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[B:%.*]] = shl nuw nsw i64 [[A]], 8
 ; CHECK-NEXT:    ret i64 [[B]]
 ;
   %A = and i64 %X, 312
-  store i64 %A, i64* %P  ; multiple uses of A.
+  store i64 %A, ptr %P  ; multiple uses of A.
   %B = shl i64 %A, 8
   ret i64 %B
 }
index f7b8c83b5111e1760ac1a4cd173585eba3596132..651579d67e6305d323be44cf215724024f00926d 100644 (file)
@@ -32,15 +32,15 @@ define i1 @shl_icmp(i64 %X) {
   ret i1 %B
 }
 
-define i64 @shl1(i64 %X, i64* %P) {
+define i64 @shl1(i64 %X, ptr %P) {
 ; CHECK-LABEL: @shl1(
 ; CHECK-NEXT:    [[A:%.*]] = and i64 [[X:%.*]], 312
-; CHECK-NEXT:    store i64 [[A]], i64* [[P:%.*]], align 4
+; CHECK-NEXT:    store i64 [[A]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[B:%.*]] = shl nuw nsw i64 [[A]], 8
 ; CHECK-NEXT:    ret i64 [[B]]
 ;
   %A = and i64 %X, 312
-  store i64 %A, i64* %P  ; multiple uses of A.
+  store i64 %A, ptr %P  ; multiple uses of A.
   %B = shl i64 %A, 8
   ret i64 %B
 }
index 498d400a38a2d84e9a0fc5dbcc4a837000bba4e0..bd2a8d02fed2bf4ad39fba13948053ea7c7d0e43 100644 (file)
@@ -1,11 +1,11 @@
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-define void @test(<4 x float> *%in_ptr, <4 x float> *%out_ptr) {
-  %A = load <4 x float>, <4 x float>* %in_ptr, align 16
+define void @test(ptr %in_ptr, ptr %out_ptr) {
+  %A = load <4 x float>, ptr %in_ptr, align 16
   %B = shufflevector <4 x float> %A, <4 x float> poison, <4 x i32> <i32 0, i32 0, i32 undef, i32 undef>
   %C = shufflevector <4 x float> %B, <4 x float> %A, <4 x i32> <i32 0, i32 1, i32 4, i32 undef>
   %D = shufflevector <4 x float> %C, <4 x float> %A, <4 x i32> <i32 0, i32 1, i32 2, i32 4>
 ; CHECK:  %D = shufflevector <4 x float> %A, <4 x float> poison, <4 x i32> zeroinitializer
-  store <4 x float> %D, <4 x float> *%out_ptr
+  store <4 x float> %D, ptr %out_ptr
   ret void
 }
index 867b2de06eb689506891499fdea21e18a1ee78e7..181e75b6eb10888566ac6776cea5c60d69819256 100644 (file)
@@ -1,11 +1,11 @@
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-define void @test(<4 x float> *%in_ptr, <4 x float> *%out_ptr) {
-  %A = load <4 x float>, <4 x float>* %in_ptr, align 16
+define void @test(ptr %in_ptr, ptr %out_ptr) {
+  %A = load <4 x float>, ptr %in_ptr, align 16
   %B = shufflevector <4 x float> %A, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 undef, i32 undef>
   %C = shufflevector <4 x float> %B, <4 x float> %A, <4 x i32> <i32 0, i32 1, i32 4, i32 undef>
   %D = shufflevector <4 x float> %C, <4 x float> %A, <4 x i32> <i32 0, i32 1, i32 2, i32 4>
 ; CHECK:  %D = shufflevector <4 x float> %A, <4 x float> poison, <4 x i32> zeroinitializer
-  store <4 x float> %D, <4 x float> *%out_ptr
+  store <4 x float> %D, ptr %out_ptr
   ret void
 }
index 4280a8fe51074140041ba1116837c4f8cbd6f2cc..f04ef79c807ca129115a788d9f9f61a546d92ac4 100644 (file)
@@ -2,11 +2,10 @@
 %opaque = type opaque
 
 ; CHECK: call i64 @llvm.objectsize.i64
-define void @foo(%opaque* sret(%opaque) %in, i64* %sizeptr) {
-  %ptr = bitcast %opaque* %in to i8*
-  %size = call i64 @llvm.objectsize.i64(i8* %ptr, i1 0, i1 0, i1 0)
-  store i64 %size, i64* %sizeptr
+define void @foo(ptr sret(%opaque) %in, ptr %sizeptr) {
+  %size = call i64 @llvm.objectsize.i64(ptr %in, i1 0, i1 0, i1 0)
+  store i64 %size, ptr %sizeptr
   ret void
 }
 
-declare i64 @llvm.objectsize.i64(i8*, i1, i1, i1)
+declare i64 @llvm.objectsize.i64(ptr, i1, i1, i1)
index c97268bdaf020347e877275e00c328f024e8e2ad..b214ddae94b125d67a6e42b32ec0c0f1b6ea6231 100644 (file)
@@ -2,53 +2,53 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
 
-declare noalias i8* @malloc(i64) nounwind allockind("alloc,uninitialized") allocsize(0)
-declare noalias nonnull i8* @_Znwm(i64)  ; new(unsigned long)
+declare noalias ptr @malloc(i64) nounwind allockind("alloc,uninitialized") allocsize(0)
+declare noalias nonnull ptr @_Znwm(i64)  ; new(unsigned long)
 declare i32 @__gxx_personality_v0(...)
-declare void @__cxa_call_unexpected(i8*)
-declare i64 @llvm.objectsize.i64(i8*, i1) nounwind readonly
+declare void @__cxa_call_unexpected(ptr)
+declare i64 @llvm.objectsize.i64(ptr, i1) nounwind readonly
 
-define i64 @f1(i8 **%esc) {
+define i64 @f1(ptr %esc) {
 ; CHECK-LABEL: @f1(
-; CHECK-NEXT:    [[CALL:%.*]] = call dereferenceable_or_null(4) i8* @malloc(i64 4)
-; CHECK-NEXT:    store i8* [[CALL]], i8** [[ESC:%.*]], align 8
+; CHECK-NEXT:    [[CALL:%.*]] = call dereferenceable_or_null(4) ptr @malloc(i64 4)
+; CHECK-NEXT:    store ptr [[CALL]], ptr [[ESC:%.*]], align 8
 ; CHECK-NEXT:    ret i64 4
 ;
-  %call = call i8* @malloc(i64 4)
-  store i8* %call, i8** %esc
-  %size = call i64 @llvm.objectsize.i64(i8* %call, i1 false)
+  %call = call ptr @malloc(i64 4)
+  store ptr %call, ptr %esc
+  %size = call i64 @llvm.objectsize.i64(ptr %call, i1 false)
   ret i64 %size
 }
 
 
-define i64 @f2(i8** %esc) nounwind uwtable ssp personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define i64 @f2(ptr %esc) nounwind uwtable ssp personality ptr @__gxx_personality_v0 {
 ; CHECK-LABEL: @f2(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[CALL:%.*]] = invoke noalias dereferenceable(13) i8* @_Znwm(i64 13)
+; CHECK-NEXT:    [[CALL:%.*]] = invoke noalias dereferenceable(13) ptr @_Znwm(i64 13)
 ; CHECK-NEXT:    to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
 ; CHECK:       invoke.cont:
-; CHECK-NEXT:    store i8* [[CALL]], i8** [[ESC:%.*]], align 8
+; CHECK-NEXT:    store ptr [[CALL]], ptr [[ESC:%.*]], align 8
 ; CHECK-NEXT:    ret i64 13
 ; CHECK:       lpad:
-; CHECK-NEXT:    [[TMP0:%.*]] = landingpad { i8*, i32 }
-; CHECK-NEXT:    filter [0 x i8*] zeroinitializer
-; CHECK-NEXT:    [[TMP1:%.*]] = extractvalue { i8*, i32 } [[TMP0]], 0
-; CHECK-NEXT:    tail call void @__cxa_call_unexpected(i8* [[TMP1]]) #[[ATTR3:[0-9]+]]
+; CHECK-NEXT:    [[TMP0:%.*]] = landingpad { ptr, i32 }
+; CHECK-NEXT:    filter [0 x ptr] zeroinitializer
+; CHECK-NEXT:    [[TMP1:%.*]] = extractvalue { ptr, i32 } [[TMP0]], 0
+; CHECK-NEXT:    tail call void @__cxa_call_unexpected(ptr [[TMP1]]) #[[ATTR3:[0-9]+]]
 ; CHECK-NEXT:    unreachable
 ;
 entry:
-  %call = invoke noalias i8* @_Znwm(i64 13)
+  %call = invoke noalias ptr @_Znwm(i64 13)
   to label %invoke.cont unwind label %lpad
 
 invoke.cont:
-  store i8* %call, i8** %esc
-  %0 = tail call i64 @llvm.objectsize.i64(i8* %call, i1 false)
+  store ptr %call, ptr %esc
+  %0 = tail call i64 @llvm.objectsize.i64(ptr %call, i1 false)
   ret i64 %0
 
 lpad:
-  %1 = landingpad { i8*, i32 }
-  filter [0 x i8*] zeroinitializer
-  %2 = extractvalue { i8*, i32 } %1, 0
-  tail call void @__cxa_call_unexpected(i8* %2) noreturn nounwind
+  %1 = landingpad { ptr, i32 }
+  filter [0 x ptr] zeroinitializer
+  %2 = extractvalue { ptr, i32 } %1, 0
+  tail call void @__cxa_call_unexpected(ptr %2) noreturn nounwind
   unreachable
 }
index e406de6e24744277a32d877158e6a15ceb1e3cb3..af7670952a8c7c813c6aa9e70c9b5a0327aba179 100644 (file)
@@ -1,19 +1,19 @@
 ; RUN: opt -S -passes=instcombine -o - %s | FileCheck %s
 target datalayout = "e-p:32:32:32-p1:64:64:64-p2:8:8:8-p3:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:32"
 
-declare i32 @llvm.objectsize.i32.p0i8(i8*, i1) nounwind readonly
-declare i32 @llvm.objectsize.i32.p1i8(i8 addrspace(1)*, i1) nounwind readonly
-declare i32 @llvm.objectsize.i32.p2i8(i8 addrspace(2)*, i1) nounwind readonly
-declare i32 @llvm.objectsize.i32.p3i8(i8 addrspace(3)*, i1) nounwind readonly
-declare i16 @llvm.objectsize.i16.p3i8(i8 addrspace(3)*, i1) nounwind readonly
+declare i32 @llvm.objectsize.i32.p0(ptr, i1) nounwind readonly
+declare i32 @llvm.objectsize.i32.p1(ptr addrspace(1), i1) nounwind readonly
+declare i32 @llvm.objectsize.i32.p2(ptr addrspace(2), i1) nounwind readonly
+declare i32 @llvm.objectsize.i32.p3(ptr addrspace(3), i1) nounwind readonly
+declare i16 @llvm.objectsize.i16.p3(ptr addrspace(3), i1) nounwind readonly
 
 @array_as2 = private addrspace(2) global [60 x i8] zeroinitializer, align 4
 
-@array_as1_pointers = private global [10 x i32 addrspace(1)*] zeroinitializer, align 4
-@array_as2_pointers = private global [24 x i32 addrspace(2)*] zeroinitializer, align 4
-@array_as3_pointers = private global [42 x i32 addrspace(3)*] zeroinitializer, align 4
+@array_as1_pointers = private global [10 x ptr addrspace(1)] zeroinitializer, align 4
+@array_as2_pointers = private global [24 x ptr addrspace(2)] zeroinitializer, align 4
+@array_as3_pointers = private global [42 x ptr addrspace(3)] zeroinitializer, align 4
 
-@array_as2_as1_pointer_pointers = private global [16 x i32 addrspace(2)* addrspace(1)*] zeroinitializer, align 4
+@array_as2_as1_pointer_pointers = private global [16 x ptr addrspace(1)] zeroinitializer, align 4
 
 
 @a_as3 = private addrspace(3) global [60 x i8] zeroinitializer, align 1
@@ -21,60 +21,56 @@ declare i16 @llvm.objectsize.i16.p3i8(i8 addrspace(3)*, i1) nounwind readonly
 define i32 @foo_as3() nounwind {
 ; CHECK-LABEL: @foo_as3(
 ; CHECK-NEXT: ret i32 60
-  %1 = call i32 @llvm.objectsize.i32.p3i8(i8 addrspace(3)* getelementptr inbounds ([60 x i8], [60 x i8] addrspace(3)* @a_as3, i32 0, i32 0), i1 false)
+  %1 = call i32 @llvm.objectsize.i32.p3(ptr addrspace(3) @a_as3, i1 false)
   ret i32 %1
 }
 
 define i16 @foo_as3_i16() nounwind {
 ; CHECK-LABEL: @foo_as3_i16(
 ; CHECK-NEXT: ret i16 60
-  %1 = call i16 @llvm.objectsize.i16.p3i8(i8 addrspace(3)* getelementptr inbounds ([60 x i8], [60 x i8] addrspace(3)* @a_as3, i32 0, i32 0), i1 false)
+  %1 = call i16 @llvm.objectsize.i16.p3(ptr addrspace(3) @a_as3, i1 false)
   ret i16 %1
 }
 
-@a_alias = weak alias [60 x i8], [60 x i8] addrspace(3)* @a_as3
+@a_alias = weak alias [60 x i8], ptr addrspace(3) @a_as3
 define i32 @foo_alias() nounwind {
-  %1 = call i32 @llvm.objectsize.i32.p3i8(i8 addrspace(3)* getelementptr inbounds ([60 x i8], [60 x i8] addrspace(3)* @a_alias, i32 0, i32 0), i1 false)
+  %1 = call i32 @llvm.objectsize.i32.p3(ptr addrspace(3) @a_alias, i1 false)
   ret i32 %1
 }
 
 define i32 @array_as2_size() {
 ; CHECK-LABEL: @array_as2_size(
 ; CHECK-NEXT: ret i32 60
-  %bc = bitcast [60 x i8] addrspace(2)* @array_as2 to i8 addrspace(2)*
-  %1 = call i32 @llvm.objectsize.i32.p2i8(i8 addrspace(2)* %bc, i1 false)
+  %1 = call i32 @llvm.objectsize.i32.p2(ptr addrspace(2) @array_as2, i1 false)
   ret i32 %1
 }
 
 define i32 @pointer_array_as1() {
 ; CHECK-LABEL: @pointer_array_as1(
 ; CHECK-NEXT: ret i32 80
-  %bc = addrspacecast [10 x i32 addrspace(1)*]* @array_as1_pointers to i8 addrspace(1)*
-  %1 = call i32 @llvm.objectsize.i32.p1i8(i8 addrspace(1)* %bc, i1 false)
+  %bc = addrspacecast ptr @array_as1_pointers to ptr addrspace(1)
+  %1 = call i32 @llvm.objectsize.i32.p1(ptr addrspace(1) %bc, i1 false)
   ret i32 %1
 }
 
 define i32 @pointer_array_as2() {
 ; CHECK-LABEL: @pointer_array_as2(
 ; CHECK-NEXT: ret i32 24
-  %bc = bitcast [24 x i32 addrspace(2)*]* @array_as2_pointers to i8*
-  %1 = call i32 @llvm.objectsize.i32.p0i8(i8* %bc, i1 false)
+  %1 = call i32 @llvm.objectsize.i32.p0(ptr @array_as2_pointers, i1 false)
   ret i32 %1
 }
 
 define i32 @pointer_array_as3() {
 ; CHECK-LABEL: @pointer_array_as3(
 ; CHECK-NEXT: ret i32 84
-  %bc = bitcast [42 x i32 addrspace(3)*]* @array_as3_pointers to i8*
-  %1 = call i32 @llvm.objectsize.i32.p0i8(i8* %bc, i1 false)
+  %1 = call i32 @llvm.objectsize.i32.p0(ptr @array_as3_pointers, i1 false)
   ret i32 %1
 }
 
 define i32 @pointer_pointer_array_as2_as1() {
 ; CHECK-LABEL: @pointer_pointer_array_as2_as1(
 ; CHECK-NEXT: ret i32 128
-  %bc = bitcast [16 x i32 addrspace(2)* addrspace(1)*]* @array_as2_as1_pointer_pointers to i8*
-  %1 = call i32 @llvm.objectsize.i32.p0i8(i8* %bc, i1 false)
+  %1 = call i32 @llvm.objectsize.i32.p0(ptr @array_as2_as1_pointer_pointers, i1 false)
   ret i32 %1
 }
 
index bff9ab1e292c814524603b03ede00e02b63272e6..280213c0114ec1210929457399a4efb93d950dea 100644 (file)
@@ -6,10 +6,10 @@
 @g4 = internal constant i32 4
 
 define i32 @test() {
-  %A = load i32, i32* @g1
-  %B = load i32, i32* @g2
-  %C = load i32, i32* @g3
-  %D = load i32, i32* @g4
+  %A = load i32, ptr @g1
+  %B = load i32, ptr @g2
+  %C = load i32, ptr @g3
+  %D = load i32, ptr @g4
   
   %a = add i32 %A, %B
   %b = add i32 %a, %C
index 2613200646eb2db8cbce632ff012073035c80ebc..261e513c82b87b4f0a81762256bf1810e62dfa05 100644 (file)
@@ -612,10 +612,10 @@ define i1 @foo1_or_signbit_lshr_without_shifting_signbit_both_sides_logical(i32
 ; Extra use
 
 ; Expect to fold
-define i1 @foo1_and_extra_use_shl(i32 %k, i32 %c1, i32 %c2, i32* %p) {
+define i1 @foo1_and_extra_use_shl(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_extra_use_shl(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
-; CHECK-NEXT:    store i32 [[T0]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[T0]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[T1:%.*]] = shl i32 1, [[C2:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[T0]], [[T1]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[K:%.*]]
@@ -623,7 +623,7 @@ define i1 @foo1_and_extra_use_shl(i32 %k, i32 %c1, i32 %c2, i32* %p) {
 ; CHECK-NEXT:    ret i1 [[TMP3]]
 ;
   %t0 = shl i32 1, %c1
-  store i32 %t0, i32* %p  ; extra use of shl
+  store i32 %t0, ptr %p  ; extra use of shl
   %t1 = shl i32 1, %c2
   %t2 = and i32 %t0, %k
   %t3 = icmp eq i32 %t2, 0
@@ -633,10 +633,10 @@ define i1 @foo1_and_extra_use_shl(i32 %k, i32 %c1, i32 %c2, i32* %p) {
   ret i1 %or
 }
 
-define i1 @foo1_and_extra_use_shl_logical(i32 %k, i32 %c1, i32 %c2, i32* %p) {
+define i1 @foo1_and_extra_use_shl_logical(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_extra_use_shl_logical(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
-; CHECK-NEXT:    store i32 [[T0]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[T0]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[T1:%.*]] = shl i32 1, [[C2:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = freeze i32 [[T1]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[T0]], [[TMP1]]
@@ -645,7 +645,7 @@ define i1 @foo1_and_extra_use_shl_logical(i32 %k, i32 %c1, i32 %c2, i32* %p) {
 ; CHECK-NEXT:    ret i1 [[TMP4]]
 ;
   %t0 = shl i32 1, %c1
-  store i32 %t0, i32* %p  ; extra use of shl
+  store i32 %t0, ptr %p  ; extra use of shl
   %t1 = shl i32 1, %c2
   %t2 = and i32 %t0, %k
   %t3 = icmp eq i32 %t2, 0
@@ -656,12 +656,12 @@ define i1 @foo1_and_extra_use_shl_logical(i32 %k, i32 %c1, i32 %c2, i32* %p) {
 }
 
 ; Should not fold
-define i1 @foo1_and_extra_use_and(i32 %k, i32 %c1, i32 %c2, i32* %p) {
+define i1 @foo1_and_extra_use_and(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_extra_use_and(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = shl i32 1, [[C2:%.*]]
 ; CHECK-NEXT:    [[T2:%.*]] = and i32 [[T0]], [[K:%.*]]
-; CHECK-NEXT:    store i32 [[T2]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[T2]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[T0]], [[T1]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[K]]
 ; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i32 [[TMP2]], [[TMP1]]
@@ -670,7 +670,7 @@ define i1 @foo1_and_extra_use_and(i32 %k, i32 %c1, i32 %c2, i32* %p) {
   %t0 = shl i32 1, %c1
   %t1 = shl i32 1, %c2
   %t2 = and i32 %t0, %k
-  store i32 %t2, i32* %p  ; extra use of and
+  store i32 %t2, ptr %p  ; extra use of and
   %t3 = icmp eq i32 %t2, 0
   %t4 = and i32 %t1, %k
   %t5 = icmp eq i32 %t4, 0
@@ -678,12 +678,12 @@ define i1 @foo1_and_extra_use_and(i32 %k, i32 %c1, i32 %c2, i32* %p) {
   ret i1 %or
 }
 
-define i1 @foo1_and_extra_use_and_logical(i32 %k, i32 %c1, i32 %c2, i32* %p) {
+define i1 @foo1_and_extra_use_and_logical(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_extra_use_and_logical(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = shl i32 1, [[C2:%.*]]
 ; CHECK-NEXT:    [[T2:%.*]] = and i32 [[T0]], [[K:%.*]]
-; CHECK-NEXT:    store i32 [[T2]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[T2]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = freeze i32 [[T1]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[T0]], [[TMP1]]
 ; CHECK-NEXT:    [[TMP3:%.*]] = and i32 [[TMP2]], [[K]]
@@ -693,7 +693,7 @@ define i1 @foo1_and_extra_use_and_logical(i32 %k, i32 %c1, i32 %c2, i32* %p) {
   %t0 = shl i32 1, %c1
   %t1 = shl i32 1, %c2
   %t2 = and i32 %t0, %k
-  store i32 %t2, i32* %p  ; extra use of and
+  store i32 %t2, ptr %p  ; extra use of and
   %t3 = icmp eq i32 %t2, 0
   %t4 = and i32 %t1, %k
   %t5 = icmp eq i32 %t4, 0
@@ -702,13 +702,13 @@ define i1 @foo1_and_extra_use_and_logical(i32 %k, i32 %c1, i32 %c2, i32* %p) {
 }
 
 ; Should not fold
-define i1 @foo1_and_extra_use_cmp(i32 %k, i32 %c1, i32 %c2, i1* %p) {
+define i1 @foo1_and_extra_use_cmp(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_extra_use_cmp(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = shl i32 1, [[C2:%.*]]
 ; CHECK-NEXT:    [[T2:%.*]] = and i32 [[T0]], [[K:%.*]]
 ; CHECK-NEXT:    [[T3:%.*]] = icmp eq i32 [[T2]], 0
-; CHECK-NEXT:    store i1 [[T3]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[T3]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[T0]], [[T1]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[K]]
 ; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i32 [[TMP2]], [[TMP1]]
@@ -718,20 +718,20 @@ define i1 @foo1_and_extra_use_cmp(i32 %k, i32 %c1, i32 %c2, i1* %p) {
   %t1 = shl i32 1, %c2
   %t2 = and i32 %t0, %k
   %t3 = icmp eq i32 %t2, 0
-  store i1 %t3, i1* %p  ; extra use of cmp
+  store i1 %t3, ptr %p  ; extra use of cmp
   %t4 = and i32 %t1, %k
   %t5 = icmp eq i32 %t4, 0
   %or = or i1 %t3, %t5
   ret i1 %or
 }
 
-define i1 @foo1_and_extra_use_cmp_logical(i32 %k, i32 %c1, i32 %c2, i1* %p) {
+define i1 @foo1_and_extra_use_cmp_logical(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_extra_use_cmp_logical(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = shl i32 1, [[C2:%.*]]
 ; CHECK-NEXT:    [[T2:%.*]] = and i32 [[T0]], [[K:%.*]]
 ; CHECK-NEXT:    [[T3:%.*]] = icmp eq i32 [[T2]], 0
-; CHECK-NEXT:    store i1 [[T3]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[T3]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = freeze i32 [[T1]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[T0]], [[TMP1]]
 ; CHECK-NEXT:    [[TMP3:%.*]] = and i32 [[TMP2]], [[K]]
@@ -742,7 +742,7 @@ define i1 @foo1_and_extra_use_cmp_logical(i32 %k, i32 %c1, i32 %c2, i1* %p) {
   %t1 = shl i32 1, %c2
   %t2 = and i32 %t0, %k
   %t3 = icmp eq i32 %t2, 0
-  store i1 %t3, i1* %p  ; extra use of cmp
+  store i1 %t3, ptr %p  ; extra use of cmp
   %t4 = and i32 %t1, %k
   %t5 = icmp eq i32 %t4, 0
   %or = select i1 %t3, i1 true, i1 %t5
@@ -750,11 +750,11 @@ define i1 @foo1_and_extra_use_cmp_logical(i32 %k, i32 %c1, i32 %c2, i1* %p) {
 }
 
 ; Expect to fold
-define i1 @foo1_and_extra_use_shl2(i32 %k, i32 %c1, i32 %c2, i32* %p) {
+define i1 @foo1_and_extra_use_shl2(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_extra_use_shl2(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = shl i32 1, [[C2:%.*]]
-; CHECK-NEXT:    store i32 [[T1]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[T1]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[T0]], [[T1]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[K:%.*]]
 ; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i32 [[TMP2]], [[TMP1]]
@@ -762,7 +762,7 @@ define i1 @foo1_and_extra_use_shl2(i32 %k, i32 %c1, i32 %c2, i32* %p) {
 ;
   %t0 = shl i32 1, %c1
   %t1 = shl i32 1, %c2
-  store i32 %t1, i32* %p  ; extra use of shl
+  store i32 %t1, ptr %p  ; extra use of shl
   %t2 = and i32 %t0, %k
   %t3 = icmp eq i32 %t2, 0
   %t4 = and i32 %t1, %k
@@ -771,12 +771,12 @@ define i1 @foo1_and_extra_use_shl2(i32 %k, i32 %c1, i32 %c2, i32* %p) {
   ret i1 %or
 }
 
-define i1 @foo1_and_extra_use_shl2_logical(i32 %k, i32 %c1, i32 %c2, i32* %p) {
+define i1 @foo1_and_extra_use_shl2_logical(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_extra_use_shl2_logical(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = shl i32 1, [[C2:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = freeze i32 [[T1]]
-; CHECK-NEXT:    store i32 [[TMP1]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[TMP1]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[T0]], [[TMP1]]
 ; CHECK-NEXT:    [[TMP3:%.*]] = and i32 [[TMP2]], [[K:%.*]]
 ; CHECK-NEXT:    [[TMP4:%.*]] = icmp ne i32 [[TMP3]], [[TMP2]]
@@ -784,7 +784,7 @@ define i1 @foo1_and_extra_use_shl2_logical(i32 %k, i32 %c1, i32 %c2, i32* %p) {
 ;
   %t0 = shl i32 1, %c1
   %t1 = shl i32 1, %c2
-  store i32 %t1, i32* %p  ; extra use of shl
+  store i32 %t1, ptr %p  ; extra use of shl
   %t2 = and i32 %t0, %k
   %t3 = icmp eq i32 %t2, 0
   %t4 = and i32 %t1, %k
@@ -794,12 +794,12 @@ define i1 @foo1_and_extra_use_shl2_logical(i32 %k, i32 %c1, i32 %c2, i32* %p) {
 }
 
 ; Should not fold
-define i1 @foo1_and_extra_use_and2(i32 %k, i32 %c1, i32 %c2, i32* %p) {
+define i1 @foo1_and_extra_use_and2(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_extra_use_and2(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = shl i32 1, [[C2:%.*]]
 ; CHECK-NEXT:    [[T4:%.*]] = and i32 [[T1]], [[K:%.*]]
-; CHECK-NEXT:    store i32 [[T4]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[T4]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[T0]], [[T1]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[K]]
 ; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i32 [[TMP2]], [[TMP1]]
@@ -810,19 +810,19 @@ define i1 @foo1_and_extra_use_and2(i32 %k, i32 %c1, i32 %c2, i32* %p) {
   %t2 = and i32 %t0, %k
   %t3 = icmp eq i32 %t2, 0
   %t4 = and i32 %t1, %k
-  store i32 %t4, i32* %p  ; extra use of and
+  store i32 %t4, ptr %p  ; extra use of and
   %t5 = icmp eq i32 %t4, 0
   %or = or i1 %t3, %t5
   ret i1 %or
 }
 
-define i1 @foo1_and_extra_use_and2_logical(i32 %k, i32 %c1, i32 %c2, i32* %p) {
+define i1 @foo1_and_extra_use_and2_logical(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_extra_use_and2_logical(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = shl i32 1, [[C2:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = freeze i32 [[T1]]
 ; CHECK-NEXT:    [[T4:%.*]] = and i32 [[TMP1]], [[K:%.*]]
-; CHECK-NEXT:    store i32 [[T4]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[T4]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[T0]], [[TMP1]]
 ; CHECK-NEXT:    [[TMP3:%.*]] = and i32 [[TMP2]], [[K]]
 ; CHECK-NEXT:    [[TMP4:%.*]] = icmp ne i32 [[TMP3]], [[TMP2]]
@@ -833,20 +833,20 @@ define i1 @foo1_and_extra_use_and2_logical(i32 %k, i32 %c1, i32 %c2, i32* %p) {
   %t2 = and i32 %t0, %k
   %t3 = icmp eq i32 %t2, 0
   %t4 = and i32 %t1, %k
-  store i32 %t4, i32* %p  ; extra use of and
+  store i32 %t4, ptr %p  ; extra use of and
   %t5 = icmp eq i32 %t4, 0
   %or = select i1 %t3, i1 true, i1 %t5
   ret i1 %or
 }
 
 ; Should not fold
-define i1 @foo1_and_extra_use_cmp2(i32 %k, i32 %c1, i32 %c2, i1* %p) {
+define i1 @foo1_and_extra_use_cmp2(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_extra_use_cmp2(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = shl i32 1, [[C2:%.*]]
 ; CHECK-NEXT:    [[T4:%.*]] = and i32 [[T1]], [[K:%.*]]
 ; CHECK-NEXT:    [[T5:%.*]] = icmp eq i32 [[T4]], 0
-; CHECK-NEXT:    store i1 [[T5]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[T5]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = or i32 [[T0]], [[T1]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], [[K]]
 ; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i32 [[TMP2]], [[TMP1]]
@@ -858,19 +858,19 @@ define i1 @foo1_and_extra_use_cmp2(i32 %k, i32 %c1, i32 %c2, i1* %p) {
   %t3 = icmp eq i32 %t2, 0
   %t4 = and i32 %t1, %k
   %t5 = icmp eq i32 %t4, 0
-  store i1 %t5, i1* %p  ; extra use of cmp
+  store i1 %t5, ptr %p  ; extra use of cmp
   %or = or i1 %t3, %t5
   ret i1 %or
 }
 
-define i1 @foo1_and_extra_use_cmp2_logical(i32 %k, i32 %c1, i32 %c2, i1* %p) {
+define i1 @foo1_and_extra_use_cmp2_logical(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_extra_use_cmp2_logical(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = shl i32 1, [[C2:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = freeze i32 [[T1]]
 ; CHECK-NEXT:    [[T4:%.*]] = and i32 [[TMP1]], [[K:%.*]]
 ; CHECK-NEXT:    [[T5:%.*]] = icmp eq i32 [[T4]], 0
-; CHECK-NEXT:    store i1 [[T5]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[T5]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[TMP2:%.*]] = or i32 [[T0]], [[TMP1]]
 ; CHECK-NEXT:    [[TMP3:%.*]] = and i32 [[TMP2]], [[K]]
 ; CHECK-NEXT:    [[TMP4:%.*]] = icmp ne i32 [[TMP3]], [[TMP2]]
@@ -882,17 +882,17 @@ define i1 @foo1_and_extra_use_cmp2_logical(i32 %k, i32 %c1, i32 %c2, i1* %p) {
   %t3 = icmp eq i32 %t2, 0
   %t4 = and i32 %t1, %k
   %t5 = icmp eq i32 %t4, 0
-  store i1 %t5, i1* %p  ; extra use of cmp
+  store i1 %t5, ptr %p  ; extra use of cmp
   %or = select i1 %t3, i1 true, i1 %t5
   ret i1 %or
 }
 
 ; Shift-of-signbit replaced with 'icmp s*'
 ; Expect to fold
-define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl1(i32 %k, i32 %c1, i32 %c2, i32* %p) {
+define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl1(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl1(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
-; CHECK-NEXT:    store i32 [[T0]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[T0]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[T1:%.*]] = and i32 [[T0]], [[K:%.*]]
 ; CHECK-NEXT:    [[T2:%.*]] = icmp eq i32 [[T1]], 0
 ; CHECK-NEXT:    [[T3:%.*]] = shl i32 [[K]], [[C2:%.*]]
@@ -901,7 +901,7 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl1(i32 %k,
 ; CHECK-NEXT:    ret i1 [[OR]]
 ;
   %t0 = shl i32 1, %c1
-  store i32 %t0, i32* %p  ; extra use of shl
+  store i32 %t0, ptr %p  ; extra use of shl
   %t1 = and i32 %t0, %k
   %t2 = icmp eq i32 %t1, 0
   %t3 = shl i32 %k, %c2
@@ -910,10 +910,10 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl1(i32 %k,
   ret i1 %or
 }
 
-define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl1_logical(i32 %k, i32 %c1, i32 %c2, i32* %p) {
+define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl1_logical(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl1_logical(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
-; CHECK-NEXT:    store i32 [[T0]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[T0]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[T1:%.*]] = and i32 [[T0]], [[K:%.*]]
 ; CHECK-NEXT:    [[T2:%.*]] = icmp eq i32 [[T1]], 0
 ; CHECK-NEXT:    [[T3:%.*]] = shl i32 [[K]], [[C2:%.*]]
@@ -922,7 +922,7 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl1_logical
 ; CHECK-NEXT:    ret i1 [[OR]]
 ;
   %t0 = shl i32 1, %c1
-  store i32 %t0, i32* %p  ; extra use of shl
+  store i32 %t0, ptr %p  ; extra use of shl
   %t1 = and i32 %t0, %k
   %t2 = icmp eq i32 %t1, 0
   %t3 = shl i32 %k, %c2
@@ -932,11 +932,11 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl1_logical
 }
 
 ; Not fold
-define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_and(i32 %k, i32 %c1, i32 %c2, i32* %p) {
+define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_and(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_and(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = and i32 [[T0]], [[K:%.*]]
-; CHECK-NEXT:    store i32 [[T1]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[T1]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[T2:%.*]] = icmp eq i32 [[T1]], 0
 ; CHECK-NEXT:    [[T3:%.*]] = shl i32 [[K]], [[C2:%.*]]
 ; CHECK-NEXT:    [[T4:%.*]] = icmp sgt i32 [[T3]], -1
@@ -945,7 +945,7 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_and(i32 %k,
 ;
   %t0 = shl i32 1, %c1
   %t1 = and i32 %t0, %k
-  store i32 %t1, i32* %p  ; extra use of and
+  store i32 %t1, ptr %p  ; extra use of and
   %t2 = icmp eq i32 %t1, 0
   %t3 = shl i32 %k, %c2
   %t4 = icmp sgt i32 %t3, -1
@@ -953,11 +953,11 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_and(i32 %k,
   ret i1 %or
 }
 
-define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_and_logical(i32 %k, i32 %c1, i32 %c2, i32* %p) {
+define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_and_logical(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_and_logical(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = and i32 [[T0]], [[K:%.*]]
-; CHECK-NEXT:    store i32 [[T1]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[T1]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[T2:%.*]] = icmp eq i32 [[T1]], 0
 ; CHECK-NEXT:    [[T3:%.*]] = shl i32 [[K]], [[C2:%.*]]
 ; CHECK-NEXT:    [[T4:%.*]] = icmp sgt i32 [[T3]], -1
@@ -966,7 +966,7 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_and_logical(
 ;
   %t0 = shl i32 1, %c1
   %t1 = and i32 %t0, %k
-  store i32 %t1, i32* %p  ; extra use of and
+  store i32 %t1, ptr %p  ; extra use of and
   %t2 = icmp eq i32 %t1, 0
   %t3 = shl i32 %k, %c2
   %t4 = icmp sgt i32 %t3, -1
@@ -975,12 +975,12 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_and_logical(
 }
 
 ; Not fold
-define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp1(i32 %k, i32 %c1, i32 %c2, i1* %p) {
+define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp1(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp1(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = and i32 [[T0]], [[K:%.*]]
 ; CHECK-NEXT:    [[T2:%.*]] = icmp eq i32 [[T1]], 0
-; CHECK-NEXT:    store i1 [[T2]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[T2]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[T3:%.*]] = shl i32 [[K]], [[C2:%.*]]
 ; CHECK-NEXT:    [[T4:%.*]] = icmp sgt i32 [[T3]], -1
 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[T2]], [[T4]]
@@ -989,19 +989,19 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp1(i32 %k,
   %t0 = shl i32 1, %c1
   %t1 = and i32 %t0, %k
   %t2 = icmp eq i32 %t1, 0
-  store i1 %t2, i1* %p  ; extra use of cmp
+  store i1 %t2, ptr %p  ; extra use of cmp
   %t3 = shl i32 %k, %c2
   %t4 = icmp sgt i32 %t3, -1
   %or = or i1 %t2, %t4
   ret i1 %or
 }
 
-define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp1_logical(i32 %k, i32 %c1, i32 %c2, i1* %p) {
+define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp1_logical(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp1_logical(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = and i32 [[T0]], [[K:%.*]]
 ; CHECK-NEXT:    [[T2:%.*]] = icmp eq i32 [[T1]], 0
-; CHECK-NEXT:    store i1 [[T2]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[T2]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[T3:%.*]] = shl i32 [[K]], [[C2:%.*]]
 ; CHECK-NEXT:    [[T4:%.*]] = icmp sgt i32 [[T3]], -1
 ; CHECK-NEXT:    [[OR:%.*]] = select i1 [[T2]], i1 true, i1 [[T4]]
@@ -1010,7 +1010,7 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp1_logical
   %t0 = shl i32 1, %c1
   %t1 = and i32 %t0, %k
   %t2 = icmp eq i32 %t1, 0
-  store i1 %t2, i1* %p  ; extra use of cmp
+  store i1 %t2, ptr %p  ; extra use of cmp
   %t3 = shl i32 %k, %c2
   %t4 = icmp sgt i32 %t3, -1
   %or = select i1 %t2, i1 true, i1 %t4
@@ -1018,13 +1018,13 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp1_logical
 }
 
 ; Not fold
-define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl2(i32 %k, i32 %c1, i32 %c2, i32* %p) {
+define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl2(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl2(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = and i32 [[T0]], [[K:%.*]]
 ; CHECK-NEXT:    [[T2:%.*]] = icmp eq i32 [[T1]], 0
 ; CHECK-NEXT:    [[T3:%.*]] = shl i32 [[K]], [[C2:%.*]]
-; CHECK-NEXT:    store i32 [[T3]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[T3]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[T4:%.*]] = icmp sgt i32 [[T3]], -1
 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[T2]], [[T4]]
 ; CHECK-NEXT:    ret i1 [[OR]]
@@ -1033,19 +1033,19 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl2(i32 %k,
   %t1 = and i32 %t0, %k
   %t2 = icmp eq i32 %t1, 0
   %t3 = shl i32 %k, %c2
-  store i32 %t3, i32* %p  ; extra use of shl
+  store i32 %t3, ptr %p  ; extra use of shl
   %t4 = icmp sgt i32 %t3, -1
   %or = or i1 %t2, %t4
   ret i1 %or
 }
 
-define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl2_logical(i32 %k, i32 %c1, i32 %c2, i32* %p) {
+define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl2_logical(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl2_logical(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = and i32 [[T0]], [[K:%.*]]
 ; CHECK-NEXT:    [[T2:%.*]] = icmp eq i32 [[T1]], 0
 ; CHECK-NEXT:    [[T3:%.*]] = shl i32 [[K]], [[C2:%.*]]
-; CHECK-NEXT:    store i32 [[T3]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[T3]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[T4:%.*]] = icmp sgt i32 [[T3]], -1
 ; CHECK-NEXT:    [[OR:%.*]] = select i1 [[T2]], i1 true, i1 [[T4]]
 ; CHECK-NEXT:    ret i1 [[OR]]
@@ -1054,21 +1054,21 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_shl2_logical
   %t1 = and i32 %t0, %k
   %t2 = icmp eq i32 %t1, 0
   %t3 = shl i32 %k, %c2
-  store i32 %t3, i32* %p  ; extra use of shl
+  store i32 %t3, ptr %p  ; extra use of shl
   %t4 = icmp sgt i32 %t3, -1
   %or = select i1 %t2, i1 true, i1 %t4
   ret i1 %or
 }
 
 ; Not fold
-define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp2(i32 %k, i32 %c1, i32 %c2, i1* %p) {
+define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp2(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp2(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = and i32 [[T0]], [[K:%.*]]
 ; CHECK-NEXT:    [[T2:%.*]] = icmp eq i32 [[T1]], 0
 ; CHECK-NEXT:    [[T3:%.*]] = shl i32 [[K]], [[C2:%.*]]
 ; CHECK-NEXT:    [[T4:%.*]] = icmp sgt i32 [[T3]], -1
-; CHECK-NEXT:    store i1 [[T4]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[T4]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[OR:%.*]] = or i1 [[T2]], [[T4]]
 ; CHECK-NEXT:    ret i1 [[OR]]
 ;
@@ -1077,19 +1077,19 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp2(i32 %k,
   %t2 = icmp eq i32 %t1, 0
   %t3 = shl i32 %k, %c2
   %t4 = icmp sgt i32 %t3, -1
-  store i1 %t4, i1* %p  ; extra use of cmp
+  store i1 %t4, ptr %p  ; extra use of cmp
   %or = or i1 %t2, %t4
   ret i1 %or
 }
 
-define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp2_logical(i32 %k, i32 %c1, i32 %c2, i1* %p) {
+define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp2_logical(i32 %k, i32 %c1, i32 %c2, ptr %p) {
 ; CHECK-LABEL: @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp2_logical(
 ; CHECK-NEXT:    [[T0:%.*]] = shl i32 1, [[C1:%.*]]
 ; CHECK-NEXT:    [[T1:%.*]] = and i32 [[T0]], [[K:%.*]]
 ; CHECK-NEXT:    [[T2:%.*]] = icmp eq i32 [[T1]], 0
 ; CHECK-NEXT:    [[T3:%.*]] = shl i32 [[K]], [[C2:%.*]]
 ; CHECK-NEXT:    [[T4:%.*]] = icmp sgt i32 [[T3]], -1
-; CHECK-NEXT:    store i1 [[T4]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[T4]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[OR:%.*]] = select i1 [[T2]], i1 true, i1 [[T4]]
 ; CHECK-NEXT:    ret i1 [[OR]]
 ;
@@ -1098,7 +1098,7 @@ define i1 @foo1_and_signbit_lshr_without_shifting_signbit_extra_use_cmp2_logical
   %t2 = icmp eq i32 %t1, 0
   %t3 = shl i32 %k, %c2
   %t4 = icmp sgt i32 %t3, -1
-  store i1 %t4, i1* %p  ; extra use of cmp
+  store i1 %t4, ptr %p  ; extra use of cmp
   %or = select i1 %t2, i1 true, i1 %t4
   ret i1 %or
 }
index c1dec5e82d177f2713f2033d2179c524e4c151f4..970be839d7f2b6593dbdd020c9c7d6c8b9e697bb 100644 (file)
@@ -5,24 +5,21 @@ define ptr @bitcast_opaque_to_opaque(ptr %a) {
 ; CHECK-LABEL: @bitcast_opaque_to_opaque(
 ; CHECK-NEXT:    ret ptr [[A:%.*]]
 ;
-  %b = bitcast ptr %a to ptr
-  ret ptr %b
+  ret ptr %a
 }
 
-define ptr @bitcast_typed_to_opaque(i8* %a) {
+define ptr @bitcast_typed_to_opaque(ptr %a) {
 ; CHECK-LABEL: @bitcast_typed_to_opaque(
 ; CHECK-NEXT:    ret ptr [[A:%.*]]
 ;
-  %b = bitcast i8* %a to ptr
-  ret ptr %b
+  ret ptr %a
 }
 
-define i8* @bitcast_opaque_to_typed(ptr %a) {
+define ptr @bitcast_opaque_to_typed(ptr %a) {
 ; CHECK-LABEL: @bitcast_opaque_to_typed(
 ; CHECK-NEXT:    ret ptr [[A:%.*]]
 ;
-  %b = bitcast ptr %a to i8*
-  ret i8* %b
+  ret ptr %a
 }
 
 @g = global i8 0
@@ -30,7 +27,7 @@ define ptr @bitcast_typed_to_opaque_constexpr() {
 ; CHECK-LABEL: @bitcast_typed_to_opaque_constexpr(
 ; CHECK-NEXT:    ret ptr @g
 ;
-  ret ptr bitcast (i8* @g to ptr)
+  ret ptr @g
 }
 
 define ptr @addrspacecast_opaque_to_opaque(ptr addrspace(1) %a) {
@@ -42,22 +39,22 @@ define ptr @addrspacecast_opaque_to_opaque(ptr addrspace(1) %a) {
   ret ptr %b
 }
 
-define ptr @addrspacecast_typed_to_opaque(i8 addrspace(1)* %a) {
+define ptr @addrspacecast_typed_to_opaque(ptr addrspace(1) %a) {
 ; CHECK-LABEL: @addrspacecast_typed_to_opaque(
 ; CHECK-NEXT:    [[B:%.*]] = addrspacecast ptr addrspace(1) [[A:%.*]] to ptr
 ; CHECK-NEXT:    ret ptr [[B]]
 ;
-  %b = addrspacecast i8 addrspace(1)* %a to ptr
+  %b = addrspacecast ptr addrspace(1) %a to ptr
   ret ptr %b
 }
 
-define i8* @addrspacecast_opaque_to_typed(ptr addrspace(1) %a) {
+define ptr @addrspacecast_opaque_to_typed(ptr addrspace(1) %a) {
 ; CHECK-LABEL: @addrspacecast_opaque_to_typed(
 ; CHECK-NEXT:    [[B:%.*]] = addrspacecast ptr addrspace(1) [[A:%.*]] to ptr
 ; CHECK-NEXT:    ret ptr [[B]]
 ;
-  %b = addrspacecast ptr addrspace(1) %a to i8*
-  ret i8* %b
+  %b = addrspacecast ptr addrspace(1) %a to ptr
+  ret ptr %b
 }
 
 define ptr addrspace(1) @bitcast_and_addrspacecast_eliminable(ptr %a) {
@@ -65,8 +62,7 @@ define ptr addrspace(1) @bitcast_and_addrspacecast_eliminable(ptr %a) {
 ; CHECK-NEXT:    [[C:%.*]] = addrspacecast ptr [[A:%.*]] to ptr addrspace(1)
 ; CHECK-NEXT:    ret ptr addrspace(1) [[C]]
 ;
-  %b = bitcast ptr %a to i8*
-  %c = addrspacecast i8* %b to ptr addrspace(1)
+  %c = addrspacecast ptr %a to ptr addrspace(1)
   ret ptr addrspace(1) %c
 }
 
@@ -74,7 +70,7 @@ define ptr addrspace(1) @addrspacecast_typed_to_opaque_constexpr() {
 ; CHECK-LABEL: @addrspacecast_typed_to_opaque_constexpr(
 ; CHECK-NEXT:    ret ptr addrspace(1) addrspacecast (ptr @g to ptr addrspace(1))
 ;
-  ret ptr addrspace(1) addrspacecast (i8* @g to ptr addrspace(1))
+  ret ptr addrspace(1) addrspacecast (ptr @g to ptr addrspace(1))
 }
 
 define ptr @gep_constexpr_1(ptr %a) {
@@ -88,14 +84,14 @@ define ptr @gep_constexpr_2(ptr %a) {
 ; CHECK-LABEL: @gep_constexpr_2(
 ; CHECK-NEXT:    ret ptr getelementptr (i8, ptr @g, i64 3)
 ;
-  ret ptr getelementptr (i8, ptr bitcast (i8* @g to ptr), i32 3)
+  ret ptr getelementptr (i8, ptr @g, i32 3)
 }
 
 define ptr addrspace(1) @gep_constexpr_3(ptr %a) {
 ; CHECK-LABEL: @gep_constexpr_3(
 ; CHECK-NEXT:    ret ptr addrspace(1) getelementptr (i8, ptr addrspace(1) addrspacecast (ptr @g to ptr addrspace(1)), i64 3)
 ;
-  ret ptr addrspace(1) getelementptr ([0 x i8], ptr addrspace(1) addrspacecast (i8* @g to ptr addrspace(1)), i64 0, i32 3)
+  ret ptr addrspace(1) getelementptr ([0 x i8], ptr addrspace(1) addrspacecast (ptr @g to ptr addrspace(1)), i64 0, i32 3)
 }
 
 define ptr @load_bitcast_1(ptr %a) {
@@ -103,9 +99,8 @@ define ptr @load_bitcast_1(ptr %a) {
 ; CHECK-NEXT:    [[B1:%.*]] = load ptr, ptr [[A:%.*]], align 8
 ; CHECK-NEXT:    ret ptr [[B1]]
 ;
-  %b = load i8*, ptr %a
-  %c = bitcast i8* %b to ptr
-  ret ptr %c
+  %b = load ptr, ptr %a
+  ret ptr %b
 }
 
 define ptr @load_bitcast_2(ptr %a) {
@@ -113,10 +108,8 @@ define ptr @load_bitcast_2(ptr %a) {
 ; CHECK-NEXT:    [[C1:%.*]] = load ptr, ptr [[A:%.*]], align 8
 ; CHECK-NEXT:    ret ptr [[C1]]
 ;
-  %b = bitcast ptr %a to i8**
-  %c = load i8*, i8** %b
-  %d = bitcast i8* %c to ptr
-  ret ptr %d
+  %c = load ptr, ptr %a
+  ret ptr %c
 }
 
 define void @call(ptr %a) {
@@ -129,33 +122,30 @@ define void @call(ptr %a) {
 }
 
 declare void @varargs(...)
-define void @varargs_cast_typed_to_opaque_same_type(i32* %a) {
+define void @varargs_cast_typed_to_opaque_same_type(ptr %a) {
 ; CHECK-LABEL: @varargs_cast_typed_to_opaque_same_type(
 ; CHECK-NEXT:    call void (...) @varargs(ptr byval(i32) [[A:%.*]])
 ; CHECK-NEXT:    ret void
 ;
-  %b = bitcast i32* %a to ptr
-  call void (...) @varargs(ptr byval(i32) %b)
+  call void (...) @varargs(ptr byval(i32) %a)
   ret void
 }
 
-define void @varargs_cast_typed_to_opaque_different_type(i32* %a) {
+define void @varargs_cast_typed_to_opaque_different_type(ptr %a) {
 ; CHECK-LABEL: @varargs_cast_typed_to_opaque_different_type(
 ; CHECK-NEXT:    call void (...) @varargs(ptr byval(float) [[A:%.*]])
 ; CHECK-NEXT:    ret void
 ;
-  %b = bitcast i32* %a to ptr
-  call void (...) @varargs(ptr byval(float) %b)
+  call void (...) @varargs(ptr byval(float) %a)
   ret void
 }
 
-define void @varargs_cast_typed_to_opaque_different_size(i32* %a) {
+define void @varargs_cast_typed_to_opaque_different_size(ptr %a) {
 ; CHECK-LABEL: @varargs_cast_typed_to_opaque_different_size(
 ; CHECK-NEXT:    call void (...) @varargs(ptr byval(i64) [[A:%.*]])
 ; CHECK-NEXT:    ret void
 ;
-  %b = bitcast i32* %a to ptr
-  call void (...) @varargs(ptr byval(i64) %b)
+  call void (...) @varargs(ptr byval(i64) %a)
   ret void
 }
 
@@ -164,8 +154,7 @@ define void @varargs_cast_opaque_to_typed(ptr %a) {
 ; CHECK-NEXT:    call void (...) @varargs(ptr byval(i8) [[A:%.*]])
 ; CHECK-NEXT:    ret void
 ;
-  %b = bitcast ptr %a to i8*
-  call void (...) @varargs(i8* byval(i8) %b)
+  call void (...) @varargs(ptr byval(i8) %a)
   ret void
 }
 
index 02fd11df8a9ae12c96552facae16c7a0c4b4eaa2..6a26ded7ac12bb76597a3724c9f5877c88acf091 100644 (file)
@@ -9,23 +9,17 @@
 %Vs4Int8 = type <{ i8 }>
 %swift.type = type { i64 }
 
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i1) #8
+declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture readonly, i64, i1) #8
 
-@_swift_slowAlloc = external global i8* (i64, i64)*
+@_swift_slowAlloc = external global ptr
 
-declare i8* @rt_swift_slowAlloc(i64, i64)
+declare ptr @rt_swift_slowAlloc(i64, i64)
 
-define  %swift.opaque* @_TwTkV([24 x i8]* %dest, %swift.opaque* %src,
-%swift.type* %bios_boot_params) #0 {
+define  ptr @_TwTkV(ptr %dest, ptr %src,
+ptr %bios_boot_params) #0 {
 entry:
-  %0 = bitcast %swift.opaque* %src to %V*
-  %1 = call noalias i8* @rt_swift_slowAlloc(i64 40, i64 0) #11
-  %2 = bitcast [24 x i8]* %dest to i8**
-  store i8* %1, i8** %2, align 8
-  %3 = bitcast i8* %1 to %V*
-  %4 = bitcast %V* %3 to i8*
-  %5 = bitcast %V* %0 to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %4, i8* %5, i64 40, i1 false)
-  %6 = bitcast %V* %3 to %swift.opaque*
-  ret %swift.opaque* %6
+  %0 = call noalias ptr @rt_swift_slowAlloc(i64 40, i64 0) #11
+  store ptr %0, ptr %dest, align 8
+  call void @llvm.memcpy.p0.p0.i64(ptr %0, ptr %src, i64 40, i1 false)
+  ret ptr %0
 }
index d9bca7e4f8a28f652c47bc2b061648909fe71014..eb058a9b99ce17148dc34c9decc461a4309afb68 100644 (file)
@@ -259,17 +259,17 @@ define i37 @shl_mask_weird_type(i37 %x) {
   ret i37 %r
 }
 
-define i32 @shl_mask_extra_use(i32 %x, i32* %p) {
+define i32 @shl_mask_extra_use(i32 %x, ptr %p) {
 ; CHECK-LABEL: @shl_mask_extra_use(
 ; CHECK-NEXT:    [[Z:%.*]] = and i32 [[X:%.*]], 255
 ; CHECK-NEXT:    [[S:%.*]] = shl nuw nsw i32 [[Z]], 8
-; CHECK-NEXT:    store i32 [[S]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[S]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = or i32 [[Z]], [[S]]
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %z = and i32 %x, 255
   %s = shl i32 %z, 8
-  store i32 %s, i32* %p
+  store i32 %s, ptr %p
   %r = or i32 %z, %s
   ret i32 %r
 }
index 7f2fe3f4dc7a283a6578583356abf8e6d04a0c71..1d35332d061bbc18d9142bee2c664010756c874c 100644 (file)
@@ -106,50 +106,50 @@ define i64 @test5_commuted_x_y(i64 %x, i64 %y) {
 }
 
 
-define i8 @test5_extra_use_not(i8 %x, i8 %y, i8* %dst) {
+define i8 @test5_extra_use_not(i8 %x, i8 %y, ptr %dst) {
 ; CHECK-LABEL: @test5_extra_use_not(
 ; CHECK-NEXT:    [[NOTX:%.*]] = xor i8 [[X:%.*]], -1
-; CHECK-NEXT:    store i8 [[NOTX]], i8* [[DST:%.*]], align 1
+; CHECK-NEXT:    store i8 [[NOTX]], ptr [[DST:%.*]], align 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i8 [[X]], [[Y:%.*]]
 ; CHECK-NEXT:    [[Z:%.*]] = xor i8 [[TMP1]], -1
 ; CHECK-NEXT:    ret i8 [[Z]]
 ;
   %xor = xor i8 %x, %y
   %notx = xor i8 %x, -1
-  store i8 %notx, i8* %dst
+  store i8 %notx, ptr %dst
   %z = or i8 %notx, %xor
   ret i8 %z
 }
 
 
-define i65 @test5_extra_use_xor(i65 %x, i65 %y, i65* %dst) {
+define i65 @test5_extra_use_xor(i65 %x, i65 %y, ptr %dst) {
 ; CHECK-LABEL: @test5_extra_use_xor(
 ; CHECK-NEXT:    [[XOR:%.*]] = xor i65 [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    store i65 [[XOR]], i65* [[DST:%.*]], align 4
+; CHECK-NEXT:    store i65 [[XOR]], ptr [[DST:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i65 [[X]], [[Y]]
 ; CHECK-NEXT:    [[Z:%.*]] = xor i65 [[TMP1]], -1
 ; CHECK-NEXT:    ret i65 [[Z]]
 ;
   %xor = xor i65 %x, %y
-  store i65 %xor, i65* %dst
+  store i65 %xor, ptr %dst
   %notx = xor i65 %x, -1
   %z = or i65 %notx, %xor
   ret i65 %z
 }
 
-define i16 @test5_extra_use_not_xor(i16 %x, i16 %y, i16* %dst_not, i16* %dst_xor) {
+define i16 @test5_extra_use_not_xor(i16 %x, i16 %y, ptr %dst_not, ptr %dst_xor) {
 ; CHECK-LABEL: @test5_extra_use_not_xor(
 ; CHECK-NEXT:    [[XOR:%.*]] = xor i16 [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    store i16 [[XOR]], i16* [[DST_XOR:%.*]], align 2
+; CHECK-NEXT:    store i16 [[XOR]], ptr [[DST_XOR:%.*]], align 2
 ; CHECK-NEXT:    [[NOTX:%.*]] = xor i16 [[X]], -1
-; CHECK-NEXT:    store i16 [[NOTX]], i16* [[DST_NOT:%.*]], align 2
+; CHECK-NEXT:    store i16 [[NOTX]], ptr [[DST_NOT:%.*]], align 2
 ; CHECK-NEXT:    [[Z:%.*]] = or i16 [[XOR]], [[NOTX]]
 ; CHECK-NEXT:    ret i16 [[Z]]
 ;
   %xor = xor i16 %x, %y
-  store i16 %xor, i16* %dst_xor
+  store i16 %xor, ptr %dst_xor
   %notx = xor i16 %x, -1
-  store i16 %notx, i16* %dst_not
+  store i16 %notx, ptr %dst_not
   %z = or i16 %notx, %xor
   ret i16 %z
 }
@@ -259,29 +259,29 @@ define i32 @test10_commuted(i32 %A, i32 %B) {
   ret i32 %or
 }
 
-define i32 @test10_extrause(i32 %A, i32 %B, i32* %dst) {
+define i32 @test10_extrause(i32 %A, i32 %B, ptr %dst) {
 ; CHECK-LABEL: @test10_extrause(
 ; CHECK-NEXT:    [[NOT:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    store i32 [[NOT]], i32* [[DST:%.*]], align 4
+; CHECK-NEXT:    store i32 [[NOT]], ptr [[DST:%.*]], align 4
 ; CHECK-NEXT:    ret i32 -1
 ;
   %xor1 = xor i32 %B, %A
   %not = xor i32 %A, -1
-  store i32 %not, i32* %dst
+  store i32 %not, ptr %dst
   %xor2 = xor i32 %not, %B
   %or = or i32 %xor1, %xor2
   ret i32 %or
 }
 
-define i32 @test10_commuted_extrause(i32 %A, i32 %B, i32* %dst) {
+define i32 @test10_commuted_extrause(i32 %A, i32 %B, ptr %dst) {
 ; CHECK-LABEL: @test10_commuted_extrause(
 ; CHECK-NEXT:    [[NOT:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    store i32 [[NOT]], i32* [[DST:%.*]], align 4
+; CHECK-NEXT:    store i32 [[NOT]], ptr [[DST:%.*]], align 4
 ; CHECK-NEXT:    ret i32 -1
 ;
   %xor1 = xor i32 %B, %A
   %not = xor i32 %A, -1
-  store i32 %not, i32* %dst
+  store i32 %not, ptr %dst
   %xor2 = xor i32 %not, %B
   %or = or i32 %xor2, %xor1
   ret i32 %or
index 7dacb1877c27bc211051d0f6d5eb77f14a1cbe45..38409394654f4a17f747b0cf9b01c703b0f4cddd 100644 (file)
@@ -300,29 +300,29 @@ define i1 @and_icmp_eq_0_logical(i32 %A, i32 %B) {
   ret i1 %D
 }
 
-define i1 @test27(i32* %A, i32* %B) {
+define i1 @test27(ptr %A, ptr %B) {
 ; CHECK-LABEL: @test27(
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i32* [[A:%.*]], null
-; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32* [[B:%.*]], null
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq ptr [[A:%.*]], null
+; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq ptr [[B:%.*]], null
 ; CHECK-NEXT:    [[E:%.*]] = and i1 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i1 [[E]]
 ;
-  %C1 = ptrtoint i32* %A to i32
-  %C2 = ptrtoint i32* %B to i32
+  %C1 = ptrtoint ptr %A to i32
+  %C2 = ptrtoint ptr %B to i32
   %D = or i32 %C1, %C2
   %E = icmp eq i32 %D, 0
   ret i1 %E
 }
 
-define <2 x i1> @test27vec(<2 x i32*> %A, <2 x i32*> %B) {
+define <2 x i1> @test27vec(<2 x ptr> %A, <2 x ptr> %B) {
 ; CHECK-LABEL: @test27vec(
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq <2 x i32*> [[A:%.*]], zeroinitializer
-; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <2 x i32*> [[B:%.*]], zeroinitializer
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq <2 x ptr> [[A:%.*]], zeroinitializer
+; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq <2 x ptr> [[B:%.*]], zeroinitializer
 ; CHECK-NEXT:    [[E:%.*]] = and <2 x i1> [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret <2 x i1> [[E]]
 ;
-  %C1 = ptrtoint <2 x i32*> %A to <2 x i32>
-  %C2 = ptrtoint <2 x i32*> %B to <2 x i32>
+  %C1 = ptrtoint <2 x ptr> %A to <2 x i32>
+  %C2 = ptrtoint <2 x ptr> %B to <2 x i32>
   %D = or <2 x i32> %C1, %C2
   %E = icmp eq <2 x i32> %D, zeroinitializer
   ret <2 x i1> %E
@@ -356,29 +356,29 @@ define i1 @test28_logical(i32 %A, i32 %B) {
   ret i1 %D
 }
 
-define i1 @test29(i32* %A, i32* %B) {
+define i1 @test29(ptr %A, ptr %B) {
 ; CHECK-LABEL: @test29(
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne i32* [[A:%.*]], null
-; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i32* [[B:%.*]], null
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne ptr [[A:%.*]], null
+; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne ptr [[B:%.*]], null
 ; CHECK-NEXT:    [[E:%.*]] = or i1 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i1 [[E]]
 ;
-  %C1 = ptrtoint i32* %A to i32
-  %C2 = ptrtoint i32* %B to i32
+  %C1 = ptrtoint ptr %A to i32
+  %C2 = ptrtoint ptr %B to i32
   %D = or i32 %C1, %C2
   %E = icmp ne i32 %D, 0
   ret i1 %E
 }
 
-define <2 x i1> @test29vec(<2 x i32*> %A, <2 x i32*> %B) {
+define <2 x i1> @test29vec(<2 x ptr> %A, <2 x ptr> %B) {
 ; CHECK-LABEL: @test29vec(
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne <2 x i32*> [[A:%.*]], zeroinitializer
-; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne <2 x i32*> [[B:%.*]], zeroinitializer
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne <2 x ptr> [[A:%.*]], zeroinitializer
+; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne <2 x ptr> [[B:%.*]], zeroinitializer
 ; CHECK-NEXT:    [[E:%.*]] = or <2 x i1> [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret <2 x i1> [[E]]
 ;
-  %C1 = ptrtoint <2 x i32*> %A to <2 x i32>
-  %C2 = ptrtoint <2 x i32*> %B to <2 x i32>
+  %C1 = ptrtoint <2 x ptr> %A to <2 x i32>
+  %C2 = ptrtoint <2 x ptr> %B to <2 x i32>
   %D = or <2 x i32> %C1, %C2
   %E = icmp ne <2 x i32> %D, zeroinitializer
   ret <2 x i1> %E
index 22f14127d76fba480d77cae416ade883dc2d7a49..b8ab8001421dac6368fd0c68fbc35cf2caaec563 100644 (file)
@@ -6,25 +6,25 @@
 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:128:128-n8:16:32-S128"
 target triple = "i386-apple-macosx10.7.2"
 
-%struct.__sFILE = type { i8*, i32, i32, i16, i16, %struct.__sbuf, i32, i8*, i32 (i8*)*, i32 (i8*, i8*, i32)*, i64 (i8*, i64, i32)*, i32 (i8*, i8*, i32)*, %struct.__sbuf, %struct.__sFILEX*, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }
-%struct.__sbuf = type { i8*, i32 }
+%struct.__sFILE = type { ptr, i32, i32, i16, i16, %struct.__sbuf, i32, ptr, ptr, ptr, ptr, ptr, %struct.__sbuf, ptr, i32, [3 x i8], [1 x i8], %struct.__sbuf, i32, i64 }
+%struct.__sbuf = type { ptr, i32 }
 %struct.__sFILEX = type opaque
 
 @.str = private unnamed_addr constant [13 x i8] c"Hello world\0A\00", align 1
 @.str2 = private unnamed_addr constant [3 x i8] c"%s\00", align 1
 
-define void @test1(%struct.__sFILE* %stream) nounwind {
+define void @test1(ptr %stream) nounwind {
 ; CHECK-LABEL: define void @test1(
 ; CHECK: call i32 @"fwrite$UNIX2003"
-  %call = tail call i32 (%struct.__sFILE*, i8*, ...) @fprintf(%struct.__sFILE* %stream, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0)) nounwind
+  %call = tail call i32 (ptr, ptr, ...) @fprintf(ptr %stream, ptr @.str) nounwind
   ret void
 }
 
-define void @test2(%struct.__sFILE* %stream, i8* %str) nounwind ssp {
+define void @test2(ptr %stream, ptr %str) nounwind ssp {
 ; CHECK-LABEL: define void @test2(
 ; CHECK: call i32 @"fputs$UNIX2003"
-  %call = tail call i32 (%struct.__sFILE*, i8*, ...) @fprintf(%struct.__sFILE* %stream, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str2, i32 0, i32 0), i8* %str) nounwind
+  %call = tail call i32 (ptr, ptr, ...) @fprintf(ptr %stream, ptr @.str2, ptr %str) nounwind
   ret void
 }
 
-declare i32 @fprintf(%struct.__sFILE*, i8*, ...) nounwind
+declare i32 @fprintf(ptr, ptr, ...) nounwind
index f698da75f293a8b26627d3482dcbcc878bffe9ce..ba379710635b614ee16da2a97e7e5a46db0cdc1a 100644 (file)
@@ -189,11 +189,11 @@ define <4 x i32> @pr20113(<4 x i16> %a, <4 x i16> %b) {
 @pr21445_data = external global i32
 define i1 @pr21445(i8 %a) {
 ; CHECK-LABEL: @pr21445(
-; CHECK-NEXT:  %[[umul:.*]] = call { i8, i1 } @llvm.umul.with.overflow.i8(i8 %a, i8 ptrtoint (i32* @pr21445_data to i8))
+; CHECK-NEXT:  %[[umul:.*]] = call { i8, i1 } @llvm.umul.with.overflow.i8(i8 %a, i8 ptrtoint (ptr @pr21445_data to i8))
 ; CHECK-NEXT:  %[[cmp:.*]] = extractvalue { i8, i1 } %[[umul]], 1
 ; CHECK-NEXT:  ret i1 %[[cmp]]
   %ext = zext i8 %a to i32
-  %mul = mul i32 %ext, zext (i8 ptrtoint (i32* @pr21445_data to i8) to i32)
+  %mul = mul i32 %ext, zext (i8 ptrtoint (ptr @pr21445_data to i8) to i32)
   %and = and i32 %mul, 255
   %cmp = icmp ne i32 %mul, %and
   ret i1 %cmp
index 331d95f70e4fb920e3f9f8c7e0ae7771589351b7..a8969a5ed02c36ea47c485fcf58bc1dadd7a725c 100644 (file)
@@ -38,14 +38,14 @@ if.end:
 ; promote it since the add.off instruction has another use, and 2) it is unsafe
 ; because the add-with-off makes the high bits of the original add live.
 
-define i32 @test2(i32 %a, i32 %b, i64* %P) nounwind ssp {
+define i32 @test2(i32 %a, i32 %b, ptr %P) nounwind ssp {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[CONV:%.*]] = sext i32 [[A:%.*]] to i64
 ; CHECK-NEXT:    [[CONV2:%.*]] = sext i32 [[B:%.*]] to i64
 ; CHECK-NEXT:    [[ADD:%.*]] = add nsw i64 [[CONV2]], [[CONV]]
 ; CHECK-NEXT:    [[ADD_OFF:%.*]] = add nsw i64 [[ADD]], 2147483648
-; CHECK-NEXT:    store i64 [[ADD_OFF]], i64* [[P:%.*]], align 4
+; CHECK-NEXT:    store i64 [[ADD_OFF]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[TMP0:%.*]] = icmp ugt i64 [[ADD_OFF]], 4294967295
 ; CHECK-NEXT:    br i1 [[TMP0]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
 ; CHECK:       if.then:
@@ -60,7 +60,7 @@ entry:
   %conv2 = sext i32 %b to i64
   %add = add nsw i64 %conv2, %conv
   %add.off = add i64 %add, 2147483648
-  store i64 %add.off, i64* %P
+  store i64 %add.off, ptr %P
   %0 = icmp ugt i64 %add.off, 4294967295
   br i1 %0, label %if.then, label %if.end
 
index 4df1fbbc5e12e6e56d0fcadee60606eac3e6152d..c29190d0d94427a48baf370dccef8eeb072b869c 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
 ; Most basic case, fully identical PHI nodes
-define void @test0(i32 %v0, i32 %v1, i1 %c, i32* %d0, i32* %d1) {
+define void @test0(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) {
 ; CHECK-LABEL: @test0(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
@@ -12,8 +12,8 @@ define void @test0(i32 %v0, i32 %v1, i1 %c, i32* %d0, i32* %d1) {
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
 ; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
-; CHECK-NEXT:    store i32 [[I1]], i32* [[D0:%.*]], align 4
-; CHECK-NEXT:    store i32 [[I1]], i32* [[D1:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I1]], ptr [[D0:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
@@ -28,13 +28,13 @@ b1:
 end:
   %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
   %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
-  store i32 %i0, i32* %d0
-  store i32 %i1, i32* %d1
+  store i32 %i0, ptr %d0
+  store i32 %i1, ptr %d1
   ret void
 }
 
 ; Fully identical PHI nodes, but order of operands differs
-define void @test1(i32 %v0, i32 %v1, i1 %c, i32* %d0, i32* %d1) {
+define void @test1(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
@@ -44,8 +44,8 @@ define void @test1(i32 %v0, i32 %v1, i1 %c, i32* %d0, i32* %d1) {
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
 ; CHECK-NEXT:    [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
-; CHECK-NEXT:    store i32 [[I0]], i32* [[D0:%.*]], align 4
-; CHECK-NEXT:    store i32 [[I0]], i32* [[D1:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I0]], ptr [[D0:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I0]], ptr [[D1:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
@@ -60,13 +60,13 @@ b1:
 end:
   %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
   %i1 = phi i32 [ %v1, %b1 ], [ %v0, %b0 ]
-  store i32 %i0, i32* %d0
-  store i32 %i1, i32* %d1
+  store i32 %i0, ptr %d0
+  store i32 %i1, ptr %d1
   ret void
 }
 
 ; Different incoming values in second PHI
-define void @negative_test2(i32 %v0, i32 %v1, i32 %v2, i1 %c, i32* %d0, i32* %d1) {
+define void @negative_test2(i32 %v0, i32 %v1, i32 %v2, i1 %c, ptr %d0, ptr %d1) {
 ; CHECK-LABEL: @negative_test2(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
@@ -77,8 +77,8 @@ define void @negative_test2(i32 %v0, i32 %v1, i32 %v2, i1 %c, i32* %d0, i32* %d1
 ; CHECK:       end:
 ; CHECK-NEXT:    [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
 ; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V0]], [[B0]] ], [ [[V2:%.*]], [[B1]] ]
-; CHECK-NEXT:    store i32 [[I0]], i32* [[D0:%.*]], align 4
-; CHECK-NEXT:    store i32 [[I1]], i32* [[D1:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I0]], ptr [[D0:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
@@ -93,11 +93,11 @@ b1:
 end:
   %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
   %i1 = phi i32 [ %v0, %b0 ], [ %v2, %b1 ] ; from %b0 takes %v2 instead of %v1
-  store i32 %i0, i32* %d0
-  store i32 %i1, i32* %d1
+  store i32 %i0, ptr %d0
+  store i32 %i1, ptr %d1
   ret void
 }
-define void @negative_test3(i32 %v0, i32 %v1, i32 %v2, i1 %c, i32* %d0, i32* %d1) {
+define void @negative_test3(i32 %v0, i32 %v1, i32 %v2, i1 %c, ptr %d0, ptr %d1) {
 ; CHECK-LABEL: @negative_test3(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
@@ -108,8 +108,8 @@ define void @negative_test3(i32 %v0, i32 %v1, i32 %v2, i1 %c, i32* %d0, i32* %d1
 ; CHECK:       end:
 ; CHECK-NEXT:    [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
 ; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V0]], [[B0]] ], [ [[V2:%.*]], [[B1]] ]
-; CHECK-NEXT:    store i32 [[I0]], i32* [[D0:%.*]], align 4
-; CHECK-NEXT:    store i32 [[I1]], i32* [[D1:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I0]], ptr [[D0:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
@@ -124,11 +124,11 @@ b1:
 end:
   %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
   %i1 = phi i32 [ %v2, %b1 ], [ %v0, %b0 ] ; from %b0 takes %v2 instead of %v1
-  store i32 %i0, i32* %d0
-  store i32 %i1, i32* %d1
+  store i32 %i0, ptr %d0
+  store i32 %i1, ptr %d1
   ret void
 }
-define void @negative_test4(i32 %v0, i32 %v1, i1 %c, i32* %d0, i32* %d1) {
+define void @negative_test4(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) {
 ; CHECK-LABEL: @negative_test4(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
@@ -138,8 +138,8 @@ define void @negative_test4(i32 %v0, i32 %v1, i1 %c, i32* %d0, i32* %d1) {
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
 ; CHECK-NEXT:    [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
-; CHECK-NEXT:    store i32 [[I0]], i32* [[D0:%.*]], align 4
-; CHECK-NEXT:    store i32 [[I0]], i32* [[D1:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I0]], ptr [[D0:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I0]], ptr [[D1:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
@@ -154,13 +154,13 @@ b1:
 end:
   %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
   %i1 = phi i32 [ %v1, %b1 ], [ %v0, %b0 ] ; incoming values are swapped
-  store i32 %i0, i32* %d0
-  store i32 %i1, i32* %d1
+  store i32 %i0, ptr %d0
+  store i32 %i1, ptr %d1
   ret void
 }
 
 ; Both PHI's are identical, but the first one has no uses, so ignore it.
-define void @test5(i32 %v0, i32 %v1, i1 %c, i32* %d0, i32* %d1) {
+define void @test5(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) {
 ; CHECK-LABEL: @test5(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
@@ -170,7 +170,7 @@ define void @test5(i32 %v0, i32 %v1, i1 %c, i32* %d0, i32* %d1) {
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
 ; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
-; CHECK-NEXT:    store i32 [[I1]], i32* [[D1:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
@@ -185,11 +185,11 @@ b1:
 end:
   %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] ; unused
   %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
-  store i32 %i1, i32* %d1
+  store i32 %i1, ptr %d1
   ret void
 }
 ; Second PHI has no uses
-define void @test6(i32 %v0, i32 %v1, i1 %c, i32* %d0, i32* %d1) {
+define void @test6(i32 %v0, i32 %v1, i1 %c, ptr %d0, ptr %d1) {
 ; CHECK-LABEL: @test6(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
@@ -199,7 +199,7 @@ define void @test6(i32 %v0, i32 %v1, i1 %c, i32* %d0, i32* %d1) {
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
 ; CHECK-NEXT:    [[I0:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
-; CHECK-NEXT:    store i32 [[I0]], i32* [[D0:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I0]], ptr [[D0:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
@@ -214,12 +214,12 @@ b1:
 end:
   %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
   %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ] ; unused
-  store i32 %i0, i32* %d0
+  store i32 %i0, ptr %d0
   ret void
 }
 
 ; Non-matching PHI node should be ignored without terminating CSE.
-define void @test7(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, i32* %d0, i32* %d1, i16* %d2) {
+define void @test7(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, ptr %d0, ptr %d1, ptr %d2) {
 ; CHECK-LABEL: @test7(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
@@ -230,9 +230,9 @@ define void @test7(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, i32* %d0, i32* %d1
 ; CHECK:       end:
 ; CHECK-NEXT:    [[IBAD:%.*]] = phi i16 [ [[V2:%.*]], [[B0]] ], [ [[V3:%.*]], [[B1]] ]
 ; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
-; CHECK-NEXT:    store i32 [[I1]], i32* [[D0:%.*]], align 4
-; CHECK-NEXT:    store i32 [[I1]], i32* [[D1:%.*]], align 4
-; CHECK-NEXT:    store i16 [[IBAD]], i16* [[D2:%.*]], align 2
+; CHECK-NEXT:    store i32 [[I1]], ptr [[D0:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
+; CHECK-NEXT:    store i16 [[IBAD]], ptr [[D2:%.*]], align 2
 ; CHECK-NEXT:    ret void
 ;
 entry:
@@ -248,12 +248,12 @@ end:
   %iBAD = phi i16 [ %v2, %b0 ], [ %v3, %b1 ]
   %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
   %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
-  store i32 %i0, i32* %d0
-  store i32 %i1, i32* %d1
-  store i16 %iBAD, i16* %d2
+  store i32 %i0, ptr %d0
+  store i32 %i1, ptr %d1
+  store i16 %iBAD, ptr %d2
   ret void
 }
-define void @test8(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, i32* %d0, i32* %d1, i16* %d2) {
+define void @test8(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, ptr %d0, ptr %d1, ptr %d2) {
 ; CHECK-LABEL: @test8(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
@@ -264,9 +264,9 @@ define void @test8(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, i32* %d0, i32* %d1
 ; CHECK:       end:
 ; CHECK-NEXT:    [[IBAD:%.*]] = phi i16 [ [[V2:%.*]], [[B0]] ], [ [[V3:%.*]], [[B1]] ]
 ; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
-; CHECK-NEXT:    store i32 [[I1]], i32* [[D0:%.*]], align 4
-; CHECK-NEXT:    store i32 [[I1]], i32* [[D1:%.*]], align 4
-; CHECK-NEXT:    store i16 [[IBAD]], i16* [[D2:%.*]], align 2
+; CHECK-NEXT:    store i32 [[I1]], ptr [[D0:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
+; CHECK-NEXT:    store i16 [[IBAD]], ptr [[D2:%.*]], align 2
 ; CHECK-NEXT:    ret void
 ;
 entry:
@@ -282,12 +282,12 @@ end:
   %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
   %iBAD = phi i16 [ %v2, %b0 ], [ %v3, %b1 ]
   %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
-  store i32 %i0, i32* %d0
-  store i32 %i1, i32* %d1
-  store i16 %iBAD, i16* %d2
+  store i32 %i0, ptr %d0
+  store i32 %i1, ptr %d1
+  store i16 %iBAD, ptr %d2
   ret void
 }
-define void @test9(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, i32* %d0, i32* %d1, i16* %d2) {
+define void @test9(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, ptr %d0, ptr %d1, ptr %d2) {
 ; CHECK-LABEL: @test9(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
@@ -298,9 +298,9 @@ define void @test9(i32 %v0, i32 %v1, i16 %v2, i16 %v3, i1 %c, i32* %d0, i32* %d1
 ; CHECK:       end:
 ; CHECK-NEXT:    [[I1:%.*]] = phi i32 [ [[V0:%.*]], [[B0]] ], [ [[V1:%.*]], [[B1]] ]
 ; CHECK-NEXT:    [[IBAD:%.*]] = phi i16 [ [[V2:%.*]], [[B0]] ], [ [[V3:%.*]], [[B1]] ]
-; CHECK-NEXT:    store i32 [[I1]], i32* [[D0:%.*]], align 4
-; CHECK-NEXT:    store i32 [[I1]], i32* [[D1:%.*]], align 4
-; CHECK-NEXT:    store i16 [[IBAD]], i16* [[D2:%.*]], align 2
+; CHECK-NEXT:    store i32 [[I1]], ptr [[D0:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I1]], ptr [[D1:%.*]], align 4
+; CHECK-NEXT:    store i16 [[IBAD]], ptr [[D2:%.*]], align 2
 ; CHECK-NEXT:    ret void
 ;
 entry:
@@ -316,8 +316,8 @@ end:
   %i0 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
   %i1 = phi i32 [ %v0, %b0 ], [ %v1, %b1 ]
   %iBAD = phi i16 [ %v2, %b0 ], [ %v3, %b1 ]
-  store i32 %i0, i32* %d0
-  store i32 %i1, i32* %d1
-  store i16 %iBAD, i16* %d2
+  store i32 %i0, ptr %d0
+  store i32 %i1, ptr %d1
+  store i16 %iBAD, ptr %d2
   ret void
 }
index 11c674295c23c58d3acace95674573a54b3bc998..731a4c7897b593fa16cff3601e32878b867c41fb 100644 (file)
@@ -4,54 +4,51 @@
 ; Make sure GVN won't undo the transformation:
 ; RUN: opt -passes=instcombine,gvn -S < %s | FileCheck %s --check-prefixes=ALL,INSTCOMBINEGVN
 
-declare i8* @get_ptr.i8()
-declare i32* @get_ptr.i32()
-declare void @foo.i8(i8*)
-declare void @foo.i32(i32*)
+declare ptr @get_ptr.i8()
+declare ptr @get_ptr.i32()
+declare void @foo.i8(ptr)
+declare void @foo.i32(ptr)
 
 define i32 @test_gep_and_bitcast(i1 %cond, i1 %cond2) {
 ; ALL-LABEL: @test_gep_and_bitcast(
 ; ALL-NEXT:  entry:
-; ALL-NEXT:    [[OBJ:%.*]] = call i8* @get_ptr.i8()
+; ALL-NEXT:    [[OBJ:%.*]] = call ptr @get_ptr.i8()
 ; ALL-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; ALL:       bb1:
 ; ALL-NEXT:    br label [[EXIT:%.*]]
 ; ALL:       bb2:
 ; ALL-NEXT:    br label [[EXIT]]
 ; ALL:       exit:
-; ALL-NEXT:    [[PTR_TYPED_IN:%.*]] = getelementptr inbounds i8, i8* [[OBJ]], i64 16
-; ALL-NEXT:    [[PTR_TYPED:%.*]] = bitcast i8* [[PTR_TYPED_IN]] to i32*
-; ALL-NEXT:    [[RES_PHI:%.*]] = load i32, i32* [[PTR_TYPED]], align 4
-; ALL-NEXT:    store i32 1, i32* [[PTR_TYPED]], align 4
+; ALL-NEXT:    [[PTR_TYPED_IN:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 16
+; ALL-NEXT:    [[RES_PHI:%.*]] = load i32, ptr [[PTR_TYPED_IN]], align 4
+; ALL-NEXT:    store i32 1, ptr [[PTR_TYPED_IN]], align 4
 ; ALL-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], i32 [[RES_PHI]], i32 1
 ; ALL-NEXT:    ret i32 [[RES]]
 ;
 entry:
-  %obj = call i8* @get_ptr.i8()
+  %obj = call ptr @get_ptr.i8()
   br i1 %cond, label %bb1, label %bb2
 
 bb1:
-  %ptr1 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr1.typed = bitcast i8* %ptr1 to i32*
-  %res1 = load i32, i32* %ptr1.typed
+  %ptr1 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res1 = load i32, ptr %ptr1
   br label %exit
 
 bb2:
-  %ptr2 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr2.typed = bitcast i8* %ptr2 to i32*
-  %res2 = load i32, i32* %ptr2.typed
+  %ptr2 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res2 = load i32, ptr %ptr2
   br label %exit
 
 exit:
-  %ptr.typed = phi i32* [ %ptr1.typed, %bb1 ], [ %ptr2.typed, %bb2 ]
+  %ptr.typed = phi ptr [ %ptr1, %bb1 ], [ %ptr2, %bb2 ]
   %res.phi = phi i32 [ %res1, %bb1 ], [ %res2, %bb2 ]
-  store i32 1, i32* %ptr.typed
-  %res.load = load i32, i32* %ptr.typed
+  store i32 1, ptr %ptr.typed
+  %res.load = load i32, ptr %ptr.typed
   %res = select i1 %cond2, i32 %res.phi, i32 %res.load
   ret i32 %res
 }
 
-define i32 @test_gep_and_bitcast_arg(i8* %obj, i1 %cond, i1 %cond2) {
+define i32 @test_gep_and_bitcast_arg(ptr %obj, i1 %cond, i1 %cond2) {
 ; ALL-LABEL: @test_gep_and_bitcast_arg(
 ; ALL-NEXT:  entry:
 ; ALL-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
@@ -60,10 +57,9 @@ define i32 @test_gep_and_bitcast_arg(i8* %obj, i1 %cond, i1 %cond2) {
 ; ALL:       bb2:
 ; ALL-NEXT:    br label [[EXIT]]
 ; ALL:       exit:
-; ALL-NEXT:    [[PTR_TYPED_IN:%.*]] = getelementptr inbounds i8, i8* [[OBJ:%.*]], i64 16
-; ALL-NEXT:    [[PTR_TYPED:%.*]] = bitcast i8* [[PTR_TYPED_IN]] to i32*
-; ALL-NEXT:    [[RES_PHI:%.*]] = load i32, i32* [[PTR_TYPED]], align 4
-; ALL-NEXT:    store i32 1, i32* [[PTR_TYPED]], align 4
+; ALL-NEXT:    [[PTR_TYPED_IN:%.*]] = getelementptr inbounds i8, ptr [[OBJ:%.*]], i64 16
+; ALL-NEXT:    [[RES_PHI:%.*]] = load i32, ptr [[PTR_TYPED_IN]], align 4
+; ALL-NEXT:    store i32 1, ptr [[PTR_TYPED_IN]], align 4
 ; ALL-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], i32 [[RES_PHI]], i32 1
 ; ALL-NEXT:    ret i32 [[RES]]
 ;
@@ -71,22 +67,20 @@ entry:
   br i1 %cond, label %bb1, label %bb2
 
 bb1:
-  %ptr1 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr1.typed = bitcast i8* %ptr1 to i32*
-  %res1 = load i32, i32* %ptr1.typed
+  %ptr1 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res1 = load i32, ptr %ptr1
   br label %exit
 
 bb2:
-  %ptr2 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr2.typed = bitcast i8* %ptr2 to i32*
-  %res2 = load i32, i32* %ptr2.typed
+  %ptr2 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res2 = load i32, ptr %ptr2
   br label %exit
 
 exit:
-  %ptr.typed = phi i32* [ %ptr1.typed, %bb1 ], [ %ptr2.typed, %bb2 ]
+  %ptr.typed = phi ptr [ %ptr1, %bb1 ], [ %ptr2, %bb2 ]
   %res.phi = phi i32 [ %res1, %bb1 ], [ %res2, %bb2 ]
-  store i32 1, i32* %ptr.typed
-  %res.load = load i32, i32* %ptr.typed
+  store i32 1, ptr %ptr.typed
+  %res.load = load i32, ptr %ptr.typed
   %res = select i1 %cond2, i32 %res.phi, i32 %res.load
   ret i32 %res
 }
@@ -96,26 +90,24 @@ define i32 @test_gep_and_bitcast_phi(i1 %cond, i1 %cond2, i1 %cond3) {
 ; ALL-NEXT:  entry:
 ; ALL-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; ALL:       bb1:
-; ALL-NEXT:    [[OBJ1:%.*]] = call i8* @get_ptr.i8()
+; ALL-NEXT:    [[OBJ1:%.*]] = call ptr @get_ptr.i8()
 ; ALL-NEXT:    br label [[MERGE:%.*]]
 ; ALL:       bb2:
-; ALL-NEXT:    [[OBJ2_TYPED:%.*]] = call i32* @get_ptr.i32()
-; ALL-NEXT:    [[OBJ2:%.*]] = bitcast i32* [[OBJ2_TYPED]] to i8*
+; ALL-NEXT:    [[OBJ2_TYPED:%.*]] = call ptr @get_ptr.i32()
 ; ALL-NEXT:    br label [[MERGE]]
 ; ALL:       merge:
-; ALL-NEXT:    [[OBJ:%.*]] = phi i8* [ [[OBJ1]], [[BB1]] ], [ [[OBJ2]], [[BB2]] ]
-; ALL-NEXT:    [[ANOTHER_PHI:%.*]] = phi i8* [ [[OBJ1]], [[BB1]] ], [ null, [[BB2]] ]
-; ALL-NEXT:    call void @foo.i8(i8* [[ANOTHER_PHI]])
+; ALL-NEXT:    [[OBJ:%.*]] = phi ptr [ [[OBJ1]], [[BB1]] ], [ [[OBJ2_TYPED]], [[BB2]] ]
+; ALL-NEXT:    [[ANOTHER_PHI:%.*]] = phi ptr [ [[OBJ1]], [[BB1]] ], [ null, [[BB2]] ]
+; ALL-NEXT:    call void @foo.i8(ptr [[ANOTHER_PHI]])
 ; ALL-NEXT:    br i1 [[COND2:%.*]], label [[BB3:%.*]], label [[BB4:%.*]]
 ; ALL:       bb3:
 ; ALL-NEXT:    br label [[EXIT:%.*]]
 ; ALL:       bb4:
 ; ALL-NEXT:    br label [[EXIT]]
 ; ALL:       exit:
-; ALL-NEXT:    [[PTR_TYPED_IN:%.*]] = getelementptr inbounds i8, i8* [[OBJ]], i64 16
-; ALL-NEXT:    [[PTR_TYPED:%.*]] = bitcast i8* [[PTR_TYPED_IN]] to i32*
-; ALL-NEXT:    [[RES_PHI:%.*]] = load i32, i32* [[PTR_TYPED]], align 4
-; ALL-NEXT:    store i32 1, i32* [[PTR_TYPED]], align 4
+; ALL-NEXT:    [[PTR_TYPED_IN:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 16
+; ALL-NEXT:    [[RES_PHI:%.*]] = load i32, ptr [[PTR_TYPED_IN]], align 4
+; ALL-NEXT:    store i32 1, ptr [[PTR_TYPED_IN]], align 4
 ; ALL-NEXT:    [[RES:%.*]] = select i1 [[COND3:%.*]], i32 [[RES_PHI]], i32 1
 ; ALL-NEXT:    ret i32 [[RES]]
 ;
@@ -123,37 +115,34 @@ entry:
   br i1 %cond, label %bb1, label %bb2
 
 bb1:
-  %obj1 = call i8* @get_ptr.i8()
+  %obj1 = call ptr @get_ptr.i8()
   br label %merge
 
 bb2:
-  %obj2.typed = call i32* @get_ptr.i32()
-  %obj2 = bitcast i32* %obj2.typed to i8*
+  %obj2.typed = call ptr @get_ptr.i32()
   br label %merge
 
 merge:
-  %obj = phi i8* [ %obj1, %bb1 ], [ %obj2, %bb2 ]
-  %another_phi = phi i8* [ %obj1, %bb1 ], [ null, %bb2 ]
-  call void @foo.i8(i8* %another_phi)
+  %obj = phi ptr [ %obj1, %bb1 ], [ %obj2.typed, %bb2 ]
+  %another_phi = phi ptr [ %obj1, %bb1 ], [ null, %bb2 ]
+  call void @foo.i8(ptr %another_phi)
   br i1 %cond2, label %bb3, label %bb4
 
 bb3:
-  %ptr1 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr1.typed = bitcast i8* %ptr1 to i32*
-  %res1 = load i32, i32* %ptr1.typed
+  %ptr1 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res1 = load i32, ptr %ptr1
   br label %exit
 
 bb4:
-  %ptr2 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr2.typed = bitcast i8* %ptr2 to i32*
-  %res2 = load i32, i32* %ptr2.typed
+  %ptr2 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res2 = load i32, ptr %ptr2
   br label %exit
 
 exit:
-  %ptr.typed = phi i32* [ %ptr1.typed, %bb3 ], [ %ptr2.typed, %bb4 ]
+  %ptr.typed = phi ptr [ %ptr1, %bb3 ], [ %ptr2, %bb4 ]
   %res.phi = phi i32 [ %res1, %bb3 ], [ %res2, %bb4 ]
-  store i32 1, i32* %ptr.typed
-  %res.load = load i32, i32* %ptr.typed
+  store i32 1, ptr %ptr.typed
+  %res.load = load i32, ptr %ptr.typed
   %res = select i1 %cond3, i32 %res.phi, i32 %res.load
   ret i32 %res
 }
@@ -161,38 +150,38 @@ exit:
 define i32 @test_gep_i32ptr(i1 %cond, i1 %cond2) {
 ; ALL-LABEL: @test_gep_i32ptr(
 ; ALL-NEXT:  entry:
-; ALL-NEXT:    [[OBJ:%.*]] = call i32* @get_ptr.i32()
+; ALL-NEXT:    [[OBJ:%.*]] = call ptr @get_ptr.i32()
 ; ALL-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; ALL:       bb1:
 ; ALL-NEXT:    br label [[EXIT:%.*]]
 ; ALL:       bb2:
 ; ALL-NEXT:    br label [[EXIT]]
 ; ALL:       exit:
-; ALL-NEXT:    [[PTR_TYPED:%.*]] = getelementptr inbounds i32, i32* [[OBJ]], i64 16
-; ALL-NEXT:    [[RES_PHI:%.*]] = load i32, i32* [[PTR_TYPED]], align 4
-; ALL-NEXT:    store i32 1, i32* [[PTR_TYPED]], align 4
+; ALL-NEXT:    [[PTR_TYPED:%.*]] = getelementptr inbounds i32, ptr [[OBJ]], i64 16
+; ALL-NEXT:    [[RES_PHI:%.*]] = load i32, ptr [[PTR_TYPED]], align 4
+; ALL-NEXT:    store i32 1, ptr [[PTR_TYPED]], align 4
 ; ALL-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], i32 [[RES_PHI]], i32 1
 ; ALL-NEXT:    ret i32 [[RES]]
 ;
 entry:
-  %obj = call i32* @get_ptr.i32()
+  %obj = call ptr @get_ptr.i32()
   br i1 %cond, label %bb1, label %bb2
 
 bb1:
-  %ptr1.typed = getelementptr inbounds i32, i32* %obj, i64 16
-  %res1 = load i32, i32* %ptr1.typed
+  %ptr1.typed = getelementptr inbounds i32, ptr %obj, i64 16
+  %res1 = load i32, ptr %ptr1.typed
   br label %exit
 
 bb2:
-  %ptr2.typed = getelementptr inbounds i32, i32* %obj, i64 16
-  %res2 = load i32, i32* %ptr2.typed
+  %ptr2.typed = getelementptr inbounds i32, ptr %obj, i64 16
+  %res2 = load i32, ptr %ptr2.typed
   br label %exit
 
 exit:
-  %ptr.typed = phi i32* [ %ptr1.typed, %bb1 ], [ %ptr2.typed, %bb2 ]
+  %ptr.typed = phi ptr [ %ptr1.typed, %bb1 ], [ %ptr2.typed, %bb2 ]
   %res.phi = phi i32 [ %res1, %bb1 ], [ %res2, %bb2 ]
-  store i32 1, i32* %ptr.typed
-  %res.load = load i32, i32* %ptr.typed
+  store i32 1, ptr %ptr.typed
+  %res.load = load i32, ptr %ptr.typed
   %res = select i1 %cond2, i32 %res.phi, i32 %res.load
   ret i32 %res
 }
@@ -200,42 +189,39 @@ exit:
 define i32 @test_gep_and_bitcast_gep_base_ptr(i1 %cond, i1 %cond2) {
 ; ALL-LABEL: @test_gep_and_bitcast_gep_base_ptr(
 ; ALL-NEXT:  entry:
-; ALL-NEXT:    [[OBJ0:%.*]] = call i8* @get_ptr.i8()
+; ALL-NEXT:    [[OBJ0:%.*]] = call ptr @get_ptr.i8()
 ; ALL-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; ALL:       bb1:
 ; ALL-NEXT:    br label [[EXIT:%.*]]
 ; ALL:       bb2:
 ; ALL-NEXT:    br label [[EXIT]]
 ; ALL:       exit:
-; ALL-NEXT:    [[PTR_TYPED_IN:%.*]] = getelementptr inbounds i8, i8* [[OBJ0]], i64 32
-; ALL-NEXT:    [[PTR_TYPED:%.*]] = bitcast i8* [[PTR_TYPED_IN]] to i32*
-; ALL-NEXT:    [[RES_PHI:%.*]] = load i32, i32* [[PTR_TYPED]], align 4
-; ALL-NEXT:    store i32 1, i32* [[PTR_TYPED]], align 4
+; ALL-NEXT:    [[PTR_TYPED_IN:%.*]] = getelementptr inbounds i8, ptr [[OBJ0]], i64 32
+; ALL-NEXT:    [[RES_PHI:%.*]] = load i32, ptr [[PTR_TYPED_IN]], align 4
+; ALL-NEXT:    store i32 1, ptr [[PTR_TYPED_IN]], align 4
 ; ALL-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], i32 [[RES_PHI]], i32 1
 ; ALL-NEXT:    ret i32 [[RES]]
 ;
 entry:
-  %obj0 = call i8* @get_ptr.i8()
-  %obj = getelementptr inbounds i8, i8* %obj0, i64 16
+  %obj0 = call ptr @get_ptr.i8()
+  %obj = getelementptr inbounds i8, ptr %obj0, i64 16
   br i1 %cond, label %bb1, label %bb2
 
 bb1:
-  %ptr1 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr1.typed = bitcast i8* %ptr1 to i32*
-  %res1 = load i32, i32* %ptr1.typed
+  %ptr1 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res1 = load i32, ptr %ptr1
   br label %exit
 
 bb2:
-  %ptr2 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr2.typed = bitcast i8* %ptr2 to i32*
-  %res2 = load i32, i32* %ptr2.typed
+  %ptr2 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res2 = load i32, ptr %ptr2
   br label %exit
 
 exit:
-  %ptr.typed = phi i32* [ %ptr1.typed, %bb1 ], [ %ptr2.typed, %bb2 ]
+  %ptr.typed = phi ptr [ %ptr1, %bb1 ], [ %ptr2, %bb2 ]
   %res.phi = phi i32 [ %res1, %bb1 ], [ %res2, %bb2 ]
-  store i32 1, i32* %ptr.typed
-  %res.load = load i32, i32* %ptr.typed
+  store i32 1, ptr %ptr.typed
+  %res.load = load i32, ptr %ptr.typed
   %res = select i1 %cond2, i32 %res.phi, i32 %res.load
   ret i32 %res
 }
@@ -243,36 +229,33 @@ exit:
 define i32 @test_gep_and_bitcast_same_bb(i1 %cond, i1 %cond2) {
 ; ALL-LABEL: @test_gep_and_bitcast_same_bb(
 ; ALL-NEXT:  entry:
-; ALL-NEXT:    [[OBJ:%.*]] = call i8* @get_ptr.i8()
+; ALL-NEXT:    [[OBJ:%.*]] = call ptr @get_ptr.i8()
 ; ALL-NEXT:    br i1 [[COND:%.*]], label [[EXIT:%.*]], label [[BB2:%.*]]
 ; ALL:       bb2:
 ; ALL-NEXT:    br label [[EXIT]]
 ; ALL:       exit:
-; ALL-NEXT:    [[PTR_TYPED_IN:%.*]] = getelementptr inbounds i8, i8* [[OBJ]], i64 16
-; ALL-NEXT:    [[PTR_TYPED:%.*]] = bitcast i8* [[PTR_TYPED_IN]] to i32*
-; ALL-NEXT:    [[RES_PHI:%.*]] = load i32, i32* [[PTR_TYPED]], align 4
-; ALL-NEXT:    store i32 1, i32* [[PTR_TYPED]], align 4
+; ALL-NEXT:    [[PTR_TYPED_IN:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 16
+; ALL-NEXT:    [[RES_PHI:%.*]] = load i32, ptr [[PTR_TYPED_IN]], align 4
+; ALL-NEXT:    store i32 1, ptr [[PTR_TYPED_IN]], align 4
 ; ALL-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], i32 [[RES_PHI]], i32 1
 ; ALL-NEXT:    ret i32 [[RES]]
 ;
 entry:
-  %obj = call i8* @get_ptr.i8()
-  %ptr1 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr1.typed = bitcast i8* %ptr1 to i32*
-  %res1 = load i32, i32* %ptr1.typed
+  %obj = call ptr @get_ptr.i8()
+  %ptr1 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res1 = load i32, ptr %ptr1
   br i1 %cond, label %exit, label %bb2
 
 bb2:
-  %ptr2 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr2.typed = bitcast i8* %ptr2 to i32*
-  %res2 = load i32, i32* %ptr2.typed
+  %ptr2 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res2 = load i32, ptr %ptr2
   br label %exit
 
 exit:
-  %ptr.typed = phi i32* [ %ptr1.typed, %entry ], [ %ptr2.typed, %bb2 ]
+  %ptr.typed = phi ptr [ %ptr1, %entry ], [ %ptr2, %bb2 ]
   %res.phi = phi i32 [ %res1, %entry ], [ %res2, %bb2 ]
-  store i32 1, i32* %ptr.typed
-  %res.load = load i32, i32* %ptr.typed
+  store i32 1, ptr %ptr.typed
+  %res.load = load i32, ptr %ptr.typed
   %res = select i1 %cond2, i32 %res.phi, i32 %res.load
   ret i32 %res
 }
@@ -280,56 +263,51 @@ exit:
 define i32 @test_gep_and_bitcast_same_bb_and_extra_use(i1 %cond, i1 %cond2) {
 ; INSTCOMBINE-LABEL: @test_gep_and_bitcast_same_bb_and_extra_use(
 ; INSTCOMBINE-NEXT:  entry:
-; INSTCOMBINE-NEXT:    [[OBJ:%.*]] = call i8* @get_ptr.i8()
-; INSTCOMBINE-NEXT:    [[PTR1:%.*]] = getelementptr inbounds i8, i8* [[OBJ]], i64 16
-; INSTCOMBINE-NEXT:    [[PTR1_TYPED:%.*]] = bitcast i8* [[PTR1]] to i32*
-; INSTCOMBINE-NEXT:    call void @foo.i32(i32* nonnull [[PTR1_TYPED]])
+; INSTCOMBINE-NEXT:    [[OBJ:%.*]] = call ptr @get_ptr.i8()
+; INSTCOMBINE-NEXT:    [[PTR1:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 16
+; INSTCOMBINE-NEXT:    call void @foo.i32(ptr nonnull [[PTR1]])
 ; INSTCOMBINE-NEXT:    br i1 [[COND:%.*]], label [[EXIT:%.*]], label [[BB2:%.*]]
 ; INSTCOMBINE:       bb2:
-; INSTCOMBINE-NEXT:    [[PTR2:%.*]] = getelementptr inbounds i8, i8* [[OBJ]], i64 16
-; INSTCOMBINE-NEXT:    [[PTR2_TYPED:%.*]] = bitcast i8* [[PTR2]] to i32*
+; INSTCOMBINE-NEXT:    [[PTR2:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 16
 ; INSTCOMBINE-NEXT:    br label [[EXIT]]
 ; INSTCOMBINE:       exit:
-; INSTCOMBINE-NEXT:    [[PTR_TYPED:%.*]] = phi i32* [ [[PTR1_TYPED]], [[ENTRY:%.*]] ], [ [[PTR2_TYPED]], [[BB2]] ]
-; INSTCOMBINE-NEXT:    [[RES_PHI:%.*]] = load i32, i32* [[PTR_TYPED]], align 4
-; INSTCOMBINE-NEXT:    store i32 1, i32* [[PTR_TYPED]], align 4
+; INSTCOMBINE-NEXT:    [[PTR_TYPED:%.*]] = phi ptr [ [[PTR1]], [[ENTRY:%.*]] ], [ [[PTR2]], [[BB2]] ]
+; INSTCOMBINE-NEXT:    [[RES_PHI:%.*]] = load i32, ptr [[PTR_TYPED]], align 4
+; INSTCOMBINE-NEXT:    store i32 1, ptr [[PTR_TYPED]], align 4
 ; INSTCOMBINE-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], i32 [[RES_PHI]], i32 1
 ; INSTCOMBINE-NEXT:    ret i32 [[RES]]
 ;
 ; INSTCOMBINEGVN-LABEL: @test_gep_and_bitcast_same_bb_and_extra_use(
 ; INSTCOMBINEGVN-NEXT:  entry:
-; INSTCOMBINEGVN-NEXT:    [[OBJ:%.*]] = call i8* @get_ptr.i8()
-; INSTCOMBINEGVN-NEXT:    [[PTR1:%.*]] = getelementptr inbounds i8, i8* [[OBJ]], i64 16
-; INSTCOMBINEGVN-NEXT:    [[PTR1_TYPED:%.*]] = bitcast i8* [[PTR1]] to i32*
-; INSTCOMBINEGVN-NEXT:    call void @foo.i32(i32* nonnull [[PTR1_TYPED]])
+; INSTCOMBINEGVN-NEXT:    [[OBJ:%.*]] = call ptr @get_ptr.i8()
+; INSTCOMBINEGVN-NEXT:    [[PTR1:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 16
+; INSTCOMBINEGVN-NEXT:    call void @foo.i32(ptr nonnull [[PTR1]])
 ; INSTCOMBINEGVN-NEXT:    br i1 [[COND:%.*]], label [[EXIT:%.*]], label [[BB2:%.*]]
 ; INSTCOMBINEGVN:       bb2:
 ; INSTCOMBINEGVN-NEXT:    br label [[EXIT]]
 ; INSTCOMBINEGVN:       exit:
-; INSTCOMBINEGVN-NEXT:    [[RES_PHI:%.*]] = load i32, i32* [[PTR1_TYPED]], align 4
-; INSTCOMBINEGVN-NEXT:    store i32 1, i32* [[PTR1_TYPED]], align 4
+; INSTCOMBINEGVN-NEXT:    [[RES_PHI:%.*]] = load i32, ptr [[PTR1]], align 4
+; INSTCOMBINEGVN-NEXT:    store i32 1, ptr [[PTR1]], align 4
 ; INSTCOMBINEGVN-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], i32 [[RES_PHI]], i32 1
 ; INSTCOMBINEGVN-NEXT:    ret i32 [[RES]]
 ;
 entry:
-  %obj = call i8* @get_ptr.i8()
-  %ptr1 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr1.typed = bitcast i8* %ptr1 to i32*
-  call void @foo.i32(i32* %ptr1.typed)
-  %res1 = load i32, i32* %ptr1.typed
+  %obj = call ptr @get_ptr.i8()
+  %ptr1 = getelementptr inbounds i8, ptr %obj, i64 16
+  call void @foo.i32(ptr %ptr1)
+  %res1 = load i32, ptr %ptr1
   br i1 %cond, label %exit, label %bb2
 
 bb2:
-  %ptr2 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr2.typed = bitcast i8* %ptr2 to i32*
-  %res2 = load i32, i32* %ptr2.typed
+  %ptr2 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res2 = load i32, ptr %ptr2
   br label %exit
 
 exit:
-  %ptr.typed = phi i32* [ %ptr1.typed, %entry ], [ %ptr2.typed, %bb2 ]
+  %ptr.typed = phi ptr [ %ptr1, %entry ], [ %ptr2, %bb2 ]
   %res.phi = phi i32 [ %res1, %entry ], [ %res2, %bb2 ]
-  store i32 1, i32* %ptr.typed
-  %res.load = load i32, i32* %ptr.typed
+  store i32 1, ptr %ptr.typed
+  %res.load = load i32, ptr %ptr.typed
   %res = select i1 %cond2, i32 %res.phi, i32 %res.load
   ret i32 %res
 }
@@ -337,38 +315,38 @@ exit:
 define i8 @test_gep(i1 %cond, i1 %cond2) {
 ; ALL-LABEL: @test_gep(
 ; ALL-NEXT:  entry:
-; ALL-NEXT:    [[OBJ:%.*]] = call i8* @get_ptr.i8()
+; ALL-NEXT:    [[OBJ:%.*]] = call ptr @get_ptr.i8()
 ; ALL-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; ALL:       bb1:
 ; ALL-NEXT:    br label [[EXIT:%.*]]
 ; ALL:       bb2:
 ; ALL-NEXT:    br label [[EXIT]]
 ; ALL:       exit:
-; ALL-NEXT:    [[PTR_TYPED:%.*]] = getelementptr inbounds i8, i8* [[OBJ]], i64 16
-; ALL-NEXT:    [[RES_PHI:%.*]] = load i8, i8* [[PTR_TYPED]], align 1
-; ALL-NEXT:    store i8 1, i8* [[PTR_TYPED]], align 1
+; ALL-NEXT:    [[PTR_TYPED:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 16
+; ALL-NEXT:    [[RES_PHI:%.*]] = load i8, ptr [[PTR_TYPED]], align 1
+; ALL-NEXT:    store i8 1, ptr [[PTR_TYPED]], align 1
 ; ALL-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], i8 [[RES_PHI]], i8 1
 ; ALL-NEXT:    ret i8 [[RES]]
 ;
 entry:
-  %obj = call i8* @get_ptr.i8()
+  %obj = call ptr @get_ptr.i8()
   br i1 %cond, label %bb1, label %bb2
 
 bb1:
-  %ptr1 = getelementptr inbounds i8, i8* %obj, i64 16
-  %res1 = load i8, i8* %ptr1
+  %ptr1 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res1 = load i8, ptr %ptr1
   br label %exit
 
 bb2:
-  %ptr2 = getelementptr inbounds i8, i8* %obj, i64 16
-  %res2 = load i8, i8* %ptr2
+  %ptr2 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res2 = load i8, ptr %ptr2
   br label %exit
 
 exit:
-  %ptr.typed = phi i8* [ %ptr1, %bb1 ], [ %ptr2, %bb2 ]
+  %ptr.typed = phi ptr [ %ptr1, %bb1 ], [ %ptr2, %bb2 ]
   %res.phi = phi i8 [ %res1, %bb1 ], [ %res2, %bb2 ]
-  store i8 1, i8* %ptr.typed
-  %res.load = load i8, i8* %ptr.typed
+  store i8 1, ptr %ptr.typed
+  %res.load = load i8, ptr %ptr.typed
   %res = select i1 %cond2, i8 %res.phi, i8 %res.load
   ret i8 %res
 }
@@ -376,50 +354,46 @@ exit:
 define i32 @test_extra_uses(i1 %cond, i1 %cond2) {
 ; ALL-LABEL: @test_extra_uses(
 ; ALL-NEXT:  entry:
-; ALL-NEXT:    [[OBJ:%.*]] = call i8* @get_ptr.i8()
+; ALL-NEXT:    [[OBJ:%.*]] = call ptr @get_ptr.i8()
 ; ALL-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; ALL:       bb1:
-; ALL-NEXT:    [[PTR1:%.*]] = getelementptr inbounds i8, i8* [[OBJ]], i64 16
-; ALL-NEXT:    [[PTR1_TYPED:%.*]] = bitcast i8* [[PTR1]] to i32*
-; ALL-NEXT:    [[RES1:%.*]] = load i32, i32* [[PTR1_TYPED]], align 4
-; ALL-NEXT:    call void @foo.i32(i32* nonnull [[PTR1_TYPED]])
+; ALL-NEXT:    [[PTR1:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 16
+; ALL-NEXT:    [[RES1:%.*]] = load i32, ptr [[PTR1]], align 4
+; ALL-NEXT:    call void @foo.i32(ptr nonnull [[PTR1]])
 ; ALL-NEXT:    br label [[EXIT:%.*]]
 ; ALL:       bb2:
-; ALL-NEXT:    [[PTR2:%.*]] = getelementptr inbounds i8, i8* [[OBJ]], i64 16
-; ALL-NEXT:    [[PTR2_TYPED:%.*]] = bitcast i8* [[PTR2]] to i32*
-; ALL-NEXT:    [[RES2:%.*]] = load i32, i32* [[PTR2_TYPED]], align 4
-; ALL-NEXT:    call void @foo.i32(i32* nonnull [[PTR2_TYPED]])
+; ALL-NEXT:    [[PTR2:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 16
+; ALL-NEXT:    [[RES2:%.*]] = load i32, ptr [[PTR2]], align 4
+; ALL-NEXT:    call void @foo.i32(ptr nonnull [[PTR2]])
 ; ALL-NEXT:    br label [[EXIT]]
 ; ALL:       exit:
-; ALL-NEXT:    [[PTR_TYPED:%.*]] = phi i32* [ [[PTR1_TYPED]], [[BB1]] ], [ [[PTR2_TYPED]], [[BB2]] ]
+; ALL-NEXT:    [[PTR_TYPED:%.*]] = phi ptr [ [[PTR1]], [[BB1]] ], [ [[PTR2]], [[BB2]] ]
 ; ALL-NEXT:    [[RES_PHI:%.*]] = phi i32 [ [[RES1]], [[BB1]] ], [ [[RES2]], [[BB2]] ]
-; ALL-NEXT:    store i32 1, i32* [[PTR_TYPED]], align 4
+; ALL-NEXT:    store i32 1, ptr [[PTR_TYPED]], align 4
 ; ALL-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], i32 [[RES_PHI]], i32 1
 ; ALL-NEXT:    ret i32 [[RES]]
 ;
 entry:
-  %obj = call i8* @get_ptr.i8()
+  %obj = call ptr @get_ptr.i8()
   br i1 %cond, label %bb1, label %bb2
 
 bb1:
-  %ptr1 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr1.typed = bitcast i8* %ptr1 to i32*
-  %res1 = load i32, i32* %ptr1.typed
-  call void @foo.i32(i32* %ptr1.typed)
+  %ptr1 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res1 = load i32, ptr %ptr1
+  call void @foo.i32(ptr %ptr1)
   br label %exit
 
 bb2:
-  %ptr2 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr2.typed = bitcast i8* %ptr2 to i32*
-  %res2 = load i32, i32* %ptr2.typed
-  call void @foo.i32(i32* %ptr2.typed)
+  %ptr2 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res2 = load i32, ptr %ptr2
+  call void @foo.i32(ptr %ptr2)
   br label %exit
 
 exit:
-  %ptr.typed = phi i32* [ %ptr1.typed, %bb1 ], [ %ptr2.typed, %bb2 ]
+  %ptr.typed = phi ptr [ %ptr1, %bb1 ], [ %ptr2, %bb2 ]
   %res.phi = phi i32 [ %res1, %bb1 ], [ %res2, %bb2 ]
-  store i32 1, i32* %ptr.typed
-  %res.load = load i32, i32* %ptr.typed
+  store i32 1, ptr %ptr.typed
+  %res.load = load i32, ptr %ptr.typed
   %res = select i1 %cond2, i32 %res.phi, i32 %res.load
   ret i32 %res
 }
@@ -427,50 +401,46 @@ exit:
 define i32 @test_extra_uses_non_inbounds(i1 %cond, i1 %cond2) {
 ; ALL-LABEL: @test_extra_uses_non_inbounds(
 ; ALL-NEXT:  entry:
-; ALL-NEXT:    [[OBJ:%.*]] = call i8* @get_ptr.i8()
+; ALL-NEXT:    [[OBJ:%.*]] = call ptr @get_ptr.i8()
 ; ALL-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; ALL:       bb1:
-; ALL-NEXT:    [[PTR1:%.*]] = getelementptr i8, i8* [[OBJ]], i64 16
-; ALL-NEXT:    [[PTR1_TYPED:%.*]] = bitcast i8* [[PTR1]] to i32*
-; ALL-NEXT:    [[RES1:%.*]] = load i32, i32* [[PTR1_TYPED]], align 4
-; ALL-NEXT:    call void @foo.i32(i32* nonnull [[PTR1_TYPED]])
+; ALL-NEXT:    [[PTR1:%.*]] = getelementptr i8, ptr [[OBJ]], i64 16
+; ALL-NEXT:    [[RES1:%.*]] = load i32, ptr [[PTR1]], align 4
+; ALL-NEXT:    call void @foo.i32(ptr nonnull [[PTR1]])
 ; ALL-NEXT:    br label [[EXIT:%.*]]
 ; ALL:       bb2:
-; ALL-NEXT:    [[PTR2:%.*]] = getelementptr i8, i8* [[OBJ]], i64 16
-; ALL-NEXT:    [[PTR2_TYPED:%.*]] = bitcast i8* [[PTR2]] to i32*
-; ALL-NEXT:    [[RES2:%.*]] = load i32, i32* [[PTR2_TYPED]], align 4
-; ALL-NEXT:    call void @foo.i32(i32* nonnull [[PTR2_TYPED]])
+; ALL-NEXT:    [[PTR2:%.*]] = getelementptr i8, ptr [[OBJ]], i64 16
+; ALL-NEXT:    [[RES2:%.*]] = load i32, ptr [[PTR2]], align 4
+; ALL-NEXT:    call void @foo.i32(ptr nonnull [[PTR2]])
 ; ALL-NEXT:    br label [[EXIT]]
 ; ALL:       exit:
-; ALL-NEXT:    [[PTR_TYPED:%.*]] = phi i32* [ [[PTR1_TYPED]], [[BB1]] ], [ [[PTR2_TYPED]], [[BB2]] ]
+; ALL-NEXT:    [[PTR_TYPED:%.*]] = phi ptr [ [[PTR1]], [[BB1]] ], [ [[PTR2]], [[BB2]] ]
 ; ALL-NEXT:    [[RES_PHI:%.*]] = phi i32 [ [[RES1]], [[BB1]] ], [ [[RES2]], [[BB2]] ]
-; ALL-NEXT:    store i32 1, i32* [[PTR_TYPED]], align 4
+; ALL-NEXT:    store i32 1, ptr [[PTR_TYPED]], align 4
 ; ALL-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], i32 [[RES_PHI]], i32 1
 ; ALL-NEXT:    ret i32 [[RES]]
 ;
 entry:
-  %obj = call i8* @get_ptr.i8()
+  %obj = call ptr @get_ptr.i8()
   br i1 %cond, label %bb1, label %bb2
 
 bb1:
-  %ptr1 = getelementptr i8, i8* %obj, i64 16
-  %ptr1.typed = bitcast i8* %ptr1 to i32*
-  %res1 = load i32, i32* %ptr1.typed
-  call void @foo.i32(i32* %ptr1.typed)
+  %ptr1 = getelementptr i8, ptr %obj, i64 16
+  %res1 = load i32, ptr %ptr1
+  call void @foo.i32(ptr %ptr1)
   br label %exit
 
 bb2:
-  %ptr2 = getelementptr i8, i8* %obj, i64 16
-  %ptr2.typed = bitcast i8* %ptr2 to i32*
-  %res2 = load i32, i32* %ptr2.typed
-  call void @foo.i32(i32* %ptr2.typed)
+  %ptr2 = getelementptr i8, ptr %obj, i64 16
+  %res2 = load i32, ptr %ptr2
+  call void @foo.i32(ptr %ptr2)
   br label %exit
 
 exit:
-  %ptr.typed = phi i32* [ %ptr1.typed, %bb1 ], [ %ptr2.typed, %bb2 ]
+  %ptr.typed = phi ptr [ %ptr1, %bb1 ], [ %ptr2, %bb2 ]
   %res.phi = phi i32 [ %res1, %bb1 ], [ %res2, %bb2 ]
-  store i32 1, i32* %ptr.typed
-  %res.load = load i32, i32* %ptr.typed
+  store i32 1, ptr %ptr.typed
+  %res.load = load i32, ptr %ptr.typed
   %res = select i1 %cond2, i32 %res.phi, i32 %res.load
   ret i32 %res
 }
@@ -478,51 +448,47 @@ exit:
 define i32 @test_extra_uses_multiple_geps(i1 %cond, i1 %cond2) {
 ; ALL-LABEL: @test_extra_uses_multiple_geps(
 ; ALL-NEXT:  entry:
-; ALL-NEXT:    [[OBJ:%.*]] = call i8* @get_ptr.i8()
+; ALL-NEXT:    [[OBJ:%.*]] = call ptr @get_ptr.i8()
 ; ALL-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; ALL:       bb1:
-; ALL-NEXT:    [[PTR1:%.*]] = getelementptr inbounds i8, i8* [[OBJ]], i64 16
-; ALL-NEXT:    [[PTR1_TYPED:%.*]] = bitcast i8* [[PTR1]] to i32*
-; ALL-NEXT:    [[RES1:%.*]] = load i32, i32* [[PTR1_TYPED]], align 4
-; ALL-NEXT:    call void @foo.i32(i32* nonnull [[PTR1_TYPED]])
+; ALL-NEXT:    [[PTR1:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 16
+; ALL-NEXT:    [[RES1:%.*]] = load i32, ptr [[PTR1]], align 4
+; ALL-NEXT:    call void @foo.i32(ptr nonnull [[PTR1]])
 ; ALL-NEXT:    br label [[EXIT:%.*]]
 ; ALL:       bb2:
-; ALL-NEXT:    [[PTR2_1:%.*]] = getelementptr i8, i8* [[OBJ]], i64 16
-; ALL-NEXT:    [[PTR2_TYPED:%.*]] = bitcast i8* [[PTR2_1]] to i32*
-; ALL-NEXT:    [[RES2:%.*]] = load i32, i32* [[PTR2_TYPED]], align 4
-; ALL-NEXT:    call void @foo.i32(i32* nonnull [[PTR2_TYPED]])
+; ALL-NEXT:    [[PTR2_1:%.*]] = getelementptr i8, ptr [[OBJ]], i64 16
+; ALL-NEXT:    [[RES2:%.*]] = load i32, ptr [[PTR2_1]], align 4
+; ALL-NEXT:    call void @foo.i32(ptr nonnull [[PTR2_1]])
 ; ALL-NEXT:    br label [[EXIT]]
 ; ALL:       exit:
-; ALL-NEXT:    [[PTR_TYPED:%.*]] = phi i32* [ [[PTR1_TYPED]], [[BB1]] ], [ [[PTR2_TYPED]], [[BB2]] ]
+; ALL-NEXT:    [[PTR_TYPED:%.*]] = phi ptr [ [[PTR1]], [[BB1]] ], [ [[PTR2_1]], [[BB2]] ]
 ; ALL-NEXT:    [[RES_PHI:%.*]] = phi i32 [ [[RES1]], [[BB1]] ], [ [[RES2]], [[BB2]] ]
-; ALL-NEXT:    store i32 1, i32* [[PTR_TYPED]], align 4
+; ALL-NEXT:    store i32 1, ptr [[PTR_TYPED]], align 4
 ; ALL-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], i32 [[RES_PHI]], i32 1
 ; ALL-NEXT:    ret i32 [[RES]]
 ;
 entry:
-  %obj = call i8* @get_ptr.i8()
+  %obj = call ptr @get_ptr.i8()
   br i1 %cond, label %bb1, label %bb2
 
 bb1:
-  %ptr1 = getelementptr inbounds i8, i8* %obj, i64 16
-  %ptr1.typed = bitcast i8* %ptr1 to i32*
-  %res1 = load i32, i32* %ptr1.typed
-  call void @foo.i32(i32* %ptr1.typed)
+  %ptr1 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res1 = load i32, ptr %ptr1
+  call void @foo.i32(ptr %ptr1)
   br label %exit
 
 bb2:
-  %ptr2.0 = getelementptr i8, i8* %obj, i64 8
-  %ptr2.1 = getelementptr inbounds i8, i8* %ptr2.0, i64 8
-  %ptr2.typed = bitcast i8* %ptr2.1 to i32*
-  %res2 = load i32, i32* %ptr2.typed
-  call void @foo.i32(i32* %ptr2.typed)
+  %ptr2.0 = getelementptr i8, ptr %obj, i64 8
+  %ptr2.1 = getelementptr inbounds i8, ptr %ptr2.0, i64 8
+  %res2 = load i32, ptr %ptr2.1
+  call void @foo.i32(ptr %ptr2.1)
   br label %exit
 
 exit:
-  %ptr.typed = phi i32* [ %ptr1.typed, %bb1 ], [ %ptr2.typed, %bb2 ]
+  %ptr.typed = phi ptr [ %ptr1, %bb1 ], [ %ptr2.1, %bb2 ]
   %res.phi = phi i32 [ %res1, %bb1 ], [ %res2, %bb2 ]
-  store i32 1, i32* %ptr.typed
-  %res.load = load i32, i32* %ptr.typed
+  store i32 1, ptr %ptr.typed
+  %res.load = load i32, ptr %ptr.typed
   %res = select i1 %cond2, i32 %res.phi, i32 %res.load
   ret i32 %res
 }
@@ -530,112 +496,112 @@ exit:
 define i8 @test_gep_extra_uses(i1 %cond, i1 %cond2) {
 ; ALL-LABEL: @test_gep_extra_uses(
 ; ALL-NEXT:  entry:
-; ALL-NEXT:    [[OBJ:%.*]] = call i8* @get_ptr.i8()
+; ALL-NEXT:    [[OBJ:%.*]] = call ptr @get_ptr.i8()
 ; ALL-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; ALL:       bb1:
-; ALL-NEXT:    [[PTR1:%.*]] = getelementptr inbounds i8, i8* [[OBJ]], i64 16
-; ALL-NEXT:    [[RES1:%.*]] = load i8, i8* [[PTR1]], align 1
-; ALL-NEXT:    call void @foo.i8(i8* nonnull [[PTR1]])
+; ALL-NEXT:    [[PTR1:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 16
+; ALL-NEXT:    [[RES1:%.*]] = load i8, ptr [[PTR1]], align 1
+; ALL-NEXT:    call void @foo.i8(ptr nonnull [[PTR1]])
 ; ALL-NEXT:    br label [[EXIT:%.*]]
 ; ALL:       bb2:
-; ALL-NEXT:    [[PTR2:%.*]] = getelementptr inbounds i8, i8* [[OBJ]], i64 16
-; ALL-NEXT:    [[RES2:%.*]] = load i8, i8* [[PTR2]], align 1
-; ALL-NEXT:    call void @foo.i8(i8* nonnull [[PTR2]])
+; ALL-NEXT:    [[PTR2:%.*]] = getelementptr inbounds i8, ptr [[OBJ]], i64 16
+; ALL-NEXT:    [[RES2:%.*]] = load i8, ptr [[PTR2]], align 1
+; ALL-NEXT:    call void @foo.i8(ptr nonnull [[PTR2]])
 ; ALL-NEXT:    br label [[EXIT]]
 ; ALL:       exit:
-; ALL-NEXT:    [[PTR_TYPED:%.*]] = phi i8* [ [[PTR1]], [[BB1]] ], [ [[PTR2]], [[BB2]] ]
+; ALL-NEXT:    [[PTR_TYPED:%.*]] = phi ptr [ [[PTR1]], [[BB1]] ], [ [[PTR2]], [[BB2]] ]
 ; ALL-NEXT:    [[RES_PHI:%.*]] = phi i8 [ [[RES1]], [[BB1]] ], [ [[RES2]], [[BB2]] ]
-; ALL-NEXT:    store i8 1, i8* [[PTR_TYPED]], align 1
+; ALL-NEXT:    store i8 1, ptr [[PTR_TYPED]], align 1
 ; ALL-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], i8 [[RES_PHI]], i8 1
 ; ALL-NEXT:    ret i8 [[RES]]
 ;
 entry:
-  %obj = call i8* @get_ptr.i8()
+  %obj = call ptr @get_ptr.i8()
   br i1 %cond, label %bb1, label %bb2
 
 bb1:
-  %ptr1 = getelementptr inbounds i8, i8* %obj, i64 16
-  %res1 = load i8, i8* %ptr1
-  call void @foo.i8(i8* %ptr1)
+  %ptr1 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res1 = load i8, ptr %ptr1
+  call void @foo.i8(ptr %ptr1)
   br label %exit
 
 bb2:
-  %ptr2 = getelementptr inbounds i8, i8* %obj, i64 16
-  %res2 = load i8, i8* %ptr2
-  call void @foo.i8(i8* %ptr2)
+  %ptr2 = getelementptr inbounds i8, ptr %obj, i64 16
+  %res2 = load i8, ptr %ptr2
+  call void @foo.i8(ptr %ptr2)
   br label %exit
 
 exit:
-  %ptr.typed = phi i8* [ %ptr1, %bb1 ], [ %ptr2, %bb2 ]
+  %ptr.typed = phi ptr [ %ptr1, %bb1 ], [ %ptr2, %bb2 ]
   %res.phi = phi i8 [ %res1, %bb1 ], [ %res2, %bb2 ]
-  store i8 1, i8* %ptr.typed
-  %res.load = load i8, i8* %ptr.typed
+  store i8 1, ptr %ptr.typed
+  %res.load = load i8, ptr %ptr.typed
   %res = select i1 %cond2, i8 %res.phi, i8 %res.load
   ret i8 %res
 }
 
 ; `swifterror` addresses are restricted to load and stores and call arguments.
-declare void @takeAddress(i8** swifterror)
+declare void @takeAddress(ptr swifterror)
 
-define i8* @test_dont_optimize_swifterror(i1 %cond, i1 %cond2, i8* %ptr) {
+define ptr @test_dont_optimize_swifterror(i1 %cond, i1 %cond2, ptr %ptr) {
 ; INSTCOMBINE-LABEL: @test_dont_optimize_swifterror(
 ; INSTCOMBINE-NEXT:  entry:
-; INSTCOMBINE-NEXT:    [[OBJ:%.*]] = alloca swifterror i8*, align 8
-; INSTCOMBINE-NEXT:    [[OBJ2:%.*]] = alloca swifterror i8*, align 8
-; INSTCOMBINE-NEXT:    call void @takeAddress(i8** nonnull swifterror [[OBJ]])
-; INSTCOMBINE-NEXT:    call void @takeAddress(i8** nonnull swifterror [[OBJ2]])
-; INSTCOMBINE-NEXT:    store i8* [[PTR:%.*]], i8** [[OBJ]], align 8
+; INSTCOMBINE-NEXT:    [[OBJ:%.*]] = alloca swifterror ptr, align 8
+; INSTCOMBINE-NEXT:    [[OBJ2:%.*]] = alloca swifterror ptr, align 8
+; INSTCOMBINE-NEXT:    call void @takeAddress(ptr nonnull swifterror [[OBJ]])
+; INSTCOMBINE-NEXT:    call void @takeAddress(ptr nonnull swifterror [[OBJ2]])
+; INSTCOMBINE-NEXT:    store ptr [[PTR:%.*]], ptr [[OBJ]], align 8
 ; INSTCOMBINE-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; INSTCOMBINE:       bb1:
-; INSTCOMBINE-NEXT:    [[RES1:%.*]] = load i8*, i8** [[OBJ]], align 8
+; INSTCOMBINE-NEXT:    [[RES1:%.*]] = load ptr, ptr [[OBJ]], align 8
 ; INSTCOMBINE-NEXT:    br label [[EXIT:%.*]]
 ; INSTCOMBINE:       bb2:
-; INSTCOMBINE-NEXT:    [[RES2:%.*]] = load i8*, i8** [[OBJ2]], align 8
+; INSTCOMBINE-NEXT:    [[RES2:%.*]] = load ptr, ptr [[OBJ2]], align 8
 ; INSTCOMBINE-NEXT:    br label [[EXIT]]
 ; INSTCOMBINE:       exit:
-; INSTCOMBINE-NEXT:    [[RES_PHI:%.*]] = phi i8* [ [[RES1]], [[BB1]] ], [ [[RES2]], [[BB2]] ]
-; INSTCOMBINE-NEXT:    store i8* null, i8** [[OBJ]], align 8
-; INSTCOMBINE-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], i8* [[RES_PHI]], i8* null
-; INSTCOMBINE-NEXT:    ret i8* [[RES]]
+; INSTCOMBINE-NEXT:    [[RES_PHI:%.*]] = phi ptr [ [[RES1]], [[BB1]] ], [ [[RES2]], [[BB2]] ]
+; INSTCOMBINE-NEXT:    store ptr null, ptr [[OBJ]], align 8
+; INSTCOMBINE-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], ptr [[RES_PHI]], ptr null
+; INSTCOMBINE-NEXT:    ret ptr [[RES]]
 ;
 ; INSTCOMBINEGVN-LABEL: @test_dont_optimize_swifterror(
 ; INSTCOMBINEGVN-NEXT:  entry:
-; INSTCOMBINEGVN-NEXT:    [[OBJ:%.*]] = alloca swifterror i8*, align 8
-; INSTCOMBINEGVN-NEXT:    [[OBJ2:%.*]] = alloca swifterror i8*, align 8
-; INSTCOMBINEGVN-NEXT:    call void @takeAddress(i8** nonnull swifterror [[OBJ]])
-; INSTCOMBINEGVN-NEXT:    call void @takeAddress(i8** nonnull swifterror [[OBJ2]])
-; INSTCOMBINEGVN-NEXT:    store i8* [[PTR:%.*]], i8** [[OBJ]], align 8
+; INSTCOMBINEGVN-NEXT:    [[OBJ:%.*]] = alloca swifterror ptr, align 8
+; INSTCOMBINEGVN-NEXT:    [[OBJ2:%.*]] = alloca swifterror ptr, align 8
+; INSTCOMBINEGVN-NEXT:    call void @takeAddress(ptr nonnull swifterror [[OBJ]])
+; INSTCOMBINEGVN-NEXT:    call void @takeAddress(ptr nonnull swifterror [[OBJ2]])
+; INSTCOMBINEGVN-NEXT:    store ptr [[PTR:%.*]], ptr [[OBJ]], align 8
 ; INSTCOMBINEGVN-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; INSTCOMBINEGVN:       bb1:
 ; INSTCOMBINEGVN-NEXT:    br label [[EXIT:%.*]]
 ; INSTCOMBINEGVN:       bb2:
-; INSTCOMBINEGVN-NEXT:    [[RES2:%.*]] = load i8*, i8** [[OBJ2]], align 8
+; INSTCOMBINEGVN-NEXT:    [[RES2:%.*]] = load ptr, ptr [[OBJ2]], align 8
 ; INSTCOMBINEGVN-NEXT:    br label [[EXIT]]
 ; INSTCOMBINEGVN:       exit:
-; INSTCOMBINEGVN-NEXT:    [[RES_PHI:%.*]] = phi i8* [ [[PTR]], [[BB1]] ], [ [[RES2]], [[BB2]] ]
-; INSTCOMBINEGVN-NEXT:    store i8* null, i8** [[OBJ]], align 8
-; INSTCOMBINEGVN-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], i8* [[RES_PHI]], i8* null
-; INSTCOMBINEGVN-NEXT:    ret i8* [[RES]]
+; INSTCOMBINEGVN-NEXT:    [[RES_PHI:%.*]] = phi ptr [ [[PTR]], [[BB1]] ], [ [[RES2]], [[BB2]] ]
+; INSTCOMBINEGVN-NEXT:    store ptr null, ptr [[OBJ]], align 8
+; INSTCOMBINEGVN-NEXT:    [[RES:%.*]] = select i1 [[COND2:%.*]], ptr [[RES_PHI]], ptr null
+; INSTCOMBINEGVN-NEXT:    ret ptr [[RES]]
 ;
 entry:
-  %obj = alloca swifterror i8*, align 8
-  %obj2 = alloca swifterror i8*, align 8
-  call void @takeAddress(i8** swifterror %obj)
-  call void @takeAddress(i8** swifterror %obj2)
-  store i8* %ptr, i8** %obj, align 8
+  %obj = alloca swifterror ptr, align 8
+  %obj2 = alloca swifterror ptr, align 8
+  call void @takeAddress(ptr swifterror %obj)
+  call void @takeAddress(ptr swifterror %obj2)
+  store ptr %ptr, ptr %obj, align 8
   br i1 %cond, label %bb1, label %bb2
 
 bb1:                                              ; preds = %entry
-  %res1 = load i8*, i8** %obj, align 8
+  %res1 = load ptr, ptr %obj, align 8
   br label %exit
 
 bb2:                                              ; preds = %entry
-  %res2 = load i8*, i8** %obj2, align 8
+  %res2 = load ptr, ptr %obj2, align 8
   br label %exit
 
 exit:                                             ; preds = %bb2, %bb1
-  %res.phi = phi i8* [ %res1, %bb1 ], [ %res2, %bb2 ]
-  store i8* null, i8** %obj, align 8
-  %res = select i1 %cond2, i8* %res.phi, i8* null
-  ret i8* %res
+  %res.phi = phi ptr [ %res1, %bb1 ], [ %res2, %bb2 ]
+  store ptr null, ptr %obj, align 8
+  %res = select i1 %cond2, ptr %res.phi, ptr null
+  ret ptr %res
 }
index 49b202f782fe4839a3312acdbb54a973fd4bd949..b2cdc0dc7dad04b0993530b068c926c83fe29ff4 100644 (file)
@@ -6,7 +6,7 @@ target triple = "x86_64-unknown-linux-gnu"
 
 ; convert ptrtoint [ phi[ inttoptr (ptrtoint (x) ) ] ---> ptrtoint (phi[x])
 
-define i64 @func(i32** %X, i32** %Y, i1 %cond) {
+define i64 @func(ptr %X, ptr %Y, i1 %cond) {
 ; CHECK-LABEL: @func(
 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; CHECK:       bb1:
@@ -14,162 +14,152 @@ define i64 @func(i32** %X, i32** %Y, i1 %cond) {
 ; CHECK:       bb2:
 ; CHECK-NEXT:    br label [[EXIT]]
 ; CHECK:       exit:
-; CHECK-NEXT:    [[PHI_IN_IN:%.*]] = phi i32** [ [[X:%.*]], [[BB1]] ], [ [[Y:%.*]], [[BB2]] ]
-; CHECK-NEXT:    [[PHI_IN:%.*]] = ptrtoint i32** [[PHI_IN_IN]] to i64
+; CHECK-NEXT:    [[PHI_IN_IN:%.*]] = phi ptr [ [[X:%.*]], [[BB1]] ], [ [[Y:%.*]], [[BB2]] ]
+; CHECK-NEXT:    [[PHI_IN:%.*]] = ptrtoint ptr [[PHI_IN_IN]] to i64
 ; CHECK-NEXT:    ret i64 [[PHI_IN]]
 ;
   br i1 %cond, label %bb1, label %bb2
 
 bb1:
-  %X.i = ptrtoint i32** %X to i64
-  %X.p = inttoptr i64 %X.i to i32*
+  %X.i = ptrtoint ptr %X to i64
+  %X.p = inttoptr i64 %X.i to ptr
   br label %exit
 
 bb2:
-  %Y.i = ptrtoint i32** %Y to i64
-  %Y.p = inttoptr i64 %Y.i to i32*
+  %Y.i = ptrtoint ptr %Y to i64
+  %Y.p = inttoptr i64 %Y.i to ptr
   br label %exit
 
 exit:
-  %phi = phi i32* [%X.p, %bb1], [%Y.p, %bb2]
-  %X.p.i = ptrtoint i32* %phi to i64
+  %phi = phi ptr [%X.p, %bb1], [%Y.p, %bb2]
+  %X.p.i = ptrtoint ptr %phi to i64
   ret i64 %X.p.i
 }
 
-define i64 @func_single_operand(i32** %X, i32** %Y, i1 %cond) {
+define i64 @func_single_operand(ptr %X, ptr %Y, i1 %cond) {
 ; CHECK-LABEL: @func_single_operand(
 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[EXIT:%.*]]
 ; CHECK:       bb1:
 ; CHECK-NEXT:    br label [[EXIT]]
 ; CHECK:       exit:
-; CHECK-NEXT:    [[PHI_IN:%.*]] = phi i32** [ [[X:%.*]], [[BB1]] ], [ [[Y:%.*]], [[TMP0:%.*]] ]
-; CHECK-NEXT:    [[X_P_I:%.*]] = ptrtoint i32** [[PHI_IN]] to i64
+; CHECK-NEXT:    [[PHI_IN:%.*]] = phi ptr [ [[X:%.*]], [[BB1]] ], [ [[Y:%.*]], [[TMP0:%.*]] ]
+; CHECK-NEXT:    [[X_P_I:%.*]] = ptrtoint ptr [[PHI_IN]] to i64
 ; CHECK-NEXT:    ret i64 [[X_P_I]]
 ;
-  %Y.p = bitcast i32** %Y to i32*
   br i1 %cond, label %bb1, label %exit
 
 bb1:
-  %X.i = ptrtoint i32** %X to i64
-  %X.p = inttoptr i64 %X.i to i32*
+  %X.i = ptrtoint ptr %X to i64
+  %X.p = inttoptr i64 %X.i to ptr
   br label %exit
 
 exit:
-  %phi = phi i32* [%X.p, %bb1], [%Y.p, %0]
-  %X.p.i = ptrtoint i32* %phi to i64
+  %phi = phi ptr [%X.p, %bb1], [%Y, %0]
+  %X.p.i = ptrtoint ptr %phi to i64
   ret i64 %X.p.i
 }
 
-define i64 @func_pointer_different_types(i16** %X, i32** %Y, i1 %cond) {
+define i64 @func_pointer_different_types(ptr %X, ptr %Y, i1 %cond) {
 ; CHECK-LABEL: @func_pointer_different_types(
-; CHECK-NEXT:    [[Y_P:%.*]] = bitcast i32** [[Y:%.*]] to i32*
 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[EXIT:%.*]]
 ; CHECK:       bb1:
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i16** [[X:%.*]] to i32*
 ; CHECK-NEXT:    br label [[EXIT]]
 ; CHECK:       exit:
-; CHECK-NEXT:    [[PHI:%.*]] = phi i32* [ [[TMP1]], [[BB1]] ], [ [[Y_P]], [[TMP0:%.*]] ]
-; CHECK-NEXT:    [[X_P_I:%.*]] = ptrtoint i32* [[PHI]] to i64
+; CHECK-NEXT:    [[PHI:%.*]] = phi ptr [ [[X:%.*]], [[BB1]] ], [ [[Y:%.*]], [[TMP0:%.*]] ]
+; CHECK-NEXT:    [[X_P_I:%.*]] = ptrtoint ptr [[PHI]] to i64
 ; CHECK-NEXT:    ret i64 [[X_P_I]]
 ;
-  %Y.p = bitcast i32** %Y to i32*
   br i1 %cond, label %bb1, label %exit
 
 bb1:
-  %X.i = ptrtoint i16** %X to i64
-  %X.p = inttoptr i64 %X.i to i32*
+  %X.i = ptrtoint ptr %X to i64
+  %X.p = inttoptr i64 %X.i to ptr
   br label %exit
 
 exit:
-  %phi = phi i32* [%X.p, %bb1], [%Y.p, %0]
-  %X.p.i = ptrtoint i32* %phi to i64
+  %phi = phi ptr [%X.p, %bb1], [%Y, %0]
+  %X.p.i = ptrtoint ptr %phi to i64
   ret i64 %X.p.i
 }
 
 ; Negative test - Wrong Integer type
 
-define i64 @func_integer_type_too_small(i32** %X, i32** %Y, i1 %cond) {
+define i64 @func_integer_type_too_small(ptr %X, ptr %Y, i1 %cond) {
 ; CHECK-LABEL: @func_integer_type_too_small(
-; CHECK-NEXT:    [[Y_P:%.*]] = bitcast i32** [[Y:%.*]] to i32*
 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[EXIT:%.*]]
 ; CHECK:       bb1:
-; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint i32** [[X:%.*]] to i64
+; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[X:%.*]] to i64
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i64 [[TMP1]], 4294967295
-; CHECK-NEXT:    [[X_P:%.*]] = inttoptr i64 [[TMP2]] to i32*
+; CHECK-NEXT:    [[X_P:%.*]] = inttoptr i64 [[TMP2]] to ptr
 ; CHECK-NEXT:    br label [[EXIT]]
 ; CHECK:       exit:
-; CHECK-NEXT:    [[PHI:%.*]] = phi i32* [ [[X_P]], [[BB1]] ], [ [[Y_P]], [[TMP0:%.*]] ]
-; CHECK-NEXT:    [[X_P_I:%.*]] = ptrtoint i32* [[PHI]] to i64
+; CHECK-NEXT:    [[PHI:%.*]] = phi ptr [ [[X_P]], [[BB1]] ], [ [[Y:%.*]], [[TMP0:%.*]] ]
+; CHECK-NEXT:    [[X_P_I:%.*]] = ptrtoint ptr [[PHI]] to i64
 ; CHECK-NEXT:    ret i64 [[X_P_I]]
 ;
-  %Y.p = bitcast i32** %Y to i32*
   br i1 %cond, label %bb1, label %exit
 
 bb1:
-  %X.i = ptrtoint i32** %X to i32
-  %X.p = inttoptr i32 %X.i to i32*
+  %X.i = ptrtoint ptr %X to i32
+  %X.p = inttoptr i32 %X.i to ptr
   br label %exit
 
 exit:
-  %phi = phi i32* [%X.p, %bb1], [%Y.p, %0]
-  %X.p.i = ptrtoint i32* %phi to i64
+  %phi = phi ptr [%X.p, %bb1], [%Y, %0]
+  %X.p.i = ptrtoint ptr %phi to i64
   ret i64 %X.p.i
 }
 
 ; Negative test - phi not used in ptrtoint
 
-define i32* @func_phi_not_use_in_ptr2int(i32** %X, i32** %Y, i1 %cond) {
+define ptr @func_phi_not_use_in_ptr2int(ptr %X, ptr %Y, i1 %cond) {
 ; CHECK-LABEL: @func_phi_not_use_in_ptr2int(
-; CHECK-NEXT:    [[Y_P:%.*]] = bitcast i32** [[Y:%.*]] to i32*
 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[EXIT:%.*]]
 ; CHECK:       bb1:
-; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint i32** [[X:%.*]] to i64
+; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[X:%.*]] to i64
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i64 [[TMP1]], 4294967295
-; CHECK-NEXT:    [[X_P:%.*]] = inttoptr i64 [[TMP2]] to i32*
+; CHECK-NEXT:    [[X_P:%.*]] = inttoptr i64 [[TMP2]] to ptr
 ; CHECK-NEXT:    br label [[EXIT]]
 ; CHECK:       exit:
-; CHECK-NEXT:    [[PHI:%.*]] = phi i32* [ [[X_P]], [[BB1]] ], [ [[Y_P]], [[TMP0:%.*]] ]
-; CHECK-NEXT:    ret i32* [[PHI]]
+; CHECK-NEXT:    [[PHI:%.*]] = phi ptr [ [[X_P]], [[BB1]] ], [ [[Y:%.*]], [[TMP0:%.*]] ]
+; CHECK-NEXT:    ret ptr [[PHI]]
 ;
-  %Y.p = bitcast i32** %Y to i32*
   br i1 %cond, label %bb1, label %exit
 
 bb1:
-  %X.i = ptrtoint i32** %X to i32
-  %X.p = inttoptr i32 %X.i to i32*
+  %X.i = ptrtoint ptr %X to i32
+  %X.p = inttoptr i32 %X.i to ptr
   br label %exit
 
 exit:
-  %phi = phi i32* [%X.p, %bb1], [%Y.p, %0]
-  ret i32* %phi
+  %phi = phi ptr [%X.p, %bb1], [%Y, %0]
+  ret ptr %phi
 }
 
 ; Negative test - Pointers in different address spaces
 
-define i64 @func_ptr_different_addrspace(i16 addrspace(2)* %X, i32** %Y, i1 %cond) {
+define i64 @func_ptr_different_addrspace(ptr addrspace(2) %X, ptr %Y, i1 %cond) {
 ; CHECK-LABEL: @func_ptr_different_addrspace(
-; CHECK-NEXT:    [[Y_P:%.*]] = bitcast i32** [[Y:%.*]] to i32*
 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[BB1:%.*]], label [[EXIT:%.*]]
 ; CHECK:       bb1:
-; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint i16 addrspace(2)* [[X:%.*]] to i32
+; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr addrspace(2) [[X:%.*]] to i32
 ; CHECK-NEXT:    [[X_I:%.*]] = zext i32 [[TMP1]] to i64
-; CHECK-NEXT:    [[X_P:%.*]] = inttoptr i64 [[X_I]] to i32*
+; CHECK-NEXT:    [[X_P:%.*]] = inttoptr i64 [[X_I]] to ptr
 ; CHECK-NEXT:    br label [[EXIT]]
 ; CHECK:       exit:
-; CHECK-NEXT:    [[PHI:%.*]] = phi i32* [ [[X_P]], [[BB1]] ], [ [[Y_P]], [[TMP0:%.*]] ]
-; CHECK-NEXT:    [[X_P_I:%.*]] = ptrtoint i32* [[PHI]] to i64
+; CHECK-NEXT:    [[PHI:%.*]] = phi ptr [ [[X_P]], [[BB1]] ], [ [[Y:%.*]], [[TMP0:%.*]] ]
+; CHECK-NEXT:    [[X_P_I:%.*]] = ptrtoint ptr [[PHI]] to i64
 ; CHECK-NEXT:    ret i64 [[X_P_I]]
 ;
-  %Y.p = bitcast i32** %Y to i32*
   br i1 %cond, label %bb1, label %exit
 
 bb1:
-  %X.i = ptrtoint i16 addrspace(2)* %X to i64
-  %X.p = inttoptr i64 %X.i to i32*
+  %X.i = ptrtoint ptr addrspace(2) %X to i64
+  %X.p = inttoptr i64 %X.i to ptr
   br label %exit
 
 exit:
-  %phi = phi i32* [%X.p, %bb1], [%Y.p, %0]
-  %X.p.i = ptrtoint i32* %phi to i64
+  %phi = phi ptr [%X.p, %bb1], [%Y, %0]
+  %X.p.i = ptrtoint ptr %phi to i64
   ret i64 %X.p.i
 }
index 691e6fda55b865df01c08be9cb1ddab5e62ba3c3..2c32e78b2aee056701f76f3d699f2ea4756a1d37 100644 (file)
@@ -5,23 +5,23 @@ declare void @baz()
 
 ; Check that dereferenceable metadata is combined
 ; CHECK-LABEL: cont:
-; CHECK: load i32*, i32**
+; CHECK: load ptr, ptr
 ; CHECK-SAME: !dereferenceable ![[DEREF:[0-9]+]]
-define i32* @test_phi_combine_load_metadata(i1 %c, i32** dereferenceable(8) %p1, i32** dereferenceable(8) %p2) {
+define ptr @test_phi_combine_load_metadata(i1 %c, ptr dereferenceable(8) %p1, ptr dereferenceable(8) %p2) {
   br i1 %c, label %t, label %f
 t:
   call void @bar()
-  %v1 = load i32*, i32** %p1, align 8, !dereferenceable !0
+  %v1 = load ptr, ptr %p1, align 8, !dereferenceable !0
   br label %cont
 
 f:
   call void @baz()
-  %v2 = load i32*, i32** %p2, align 8, !dereferenceable !1
+  %v2 = load ptr, ptr %p2, align 8, !dereferenceable !1
   br label %cont
 
 cont:
-  %res = phi i32* [ %v1, %t ], [ %v2, %f ]
-  ret i32* %res
+  %res = phi ptr [ %v1, %t ], [ %v2, %f ]
+  ret ptr %res
 }
 
 ; CHECK: ![[DEREF]] = !{i64 8}
index 9079d8a6649e8e0ebe5e70ac7920b949aa2e6fa2..ed2c573188cbed22425c1c0aa008cebc577da422 100644 (file)
@@ -5,23 +5,23 @@ declare void @baz()
 
 ; Check that dereferenceable_or_null metadata is combined
 ; CHECK-LABEL: cont:
-; CHECK: load i32*, i32**
+; CHECK: load ptr, ptr
 ; CHECK-SAME: !dereferenceable_or_null ![[DEREF:[0-9]+]]
-define i32* @test_phi_combine_load_metadata(i1 %c, i32** dereferenceable(8) %p1, i32** dereferenceable(8) %p2) {
+define ptr @test_phi_combine_load_metadata(i1 %c, ptr dereferenceable(8) %p1, ptr dereferenceable(8) %p2) {
   br i1 %c, label %t, label %f
 t:
   call void @bar()
-  %v1 = load i32*, i32** %p1, align 8, !dereferenceable_or_null !0
+  %v1 = load ptr, ptr %p1, align 8, !dereferenceable_or_null !0
   br label %cont
 
 f:
   call void @baz()
-  %v2 = load i32*, i32** %p2, align 8, !dereferenceable_or_null !1
+  %v2 = load ptr, ptr %p2, align 8, !dereferenceable_or_null !1
   br label %cont
 
 cont:
-  %res = phi i32* [ %v1, %t ], [ %v2, %f ]
-  ret i32* %res
+  %res = phi ptr [ %v1, %t ], [ %v2, %f ]
+  ret ptr %res
 }
 
 ; CHECK: ![[DEREF]] = !{i64 8}
index 2a3935e3f3244d475f6b7efa48f35d99c88e5c28..3fb8f7998ee43281d05961946807637b643c47fa 100644 (file)
@@ -6,21 +6,21 @@ declare void @baz()
 ; Check that nonnull metadata is from non-dominating loads is not propagated.
 ; CHECK-LABEL: cont:
 ; CHECK-NOT: !nonnull
-define i32* @test_combine_metadata_dominance(i1 %c, i32** dereferenceable(8) %p1, i32** dereferenceable(8) %p2) {
+define ptr @test_combine_metadata_dominance(i1 %c, ptr dereferenceable(8) %p1, ptr dereferenceable(8) %p2) {
   br i1 %c, label %t, label %f
 t:
   call void @bar()
-  %v1 = load i32*, i32** %p1, align 8, !nonnull !0
+  %v1 = load ptr, ptr %p1, align 8, !nonnull !0
   br label %cont
 
 f:
   call void @baz()
-  %v2 = load i32*, i32** %p2, align 8
+  %v2 = load ptr, ptr %p2, align 8
   br label %cont
 
 cont:
-  %res = phi i32* [ %v1, %t ], [ %v2, %f ]
-  ret i32* %res
+  %res = phi ptr [ %v1, %t ], [ %v2, %f ]
+  ret ptr %res
 }
 
 !0 = !{}
index f2e52fb5c937e9cdcccbb23199337a2963ab07d1..db472746c0d1cffefda3d6a03c8916c050ac599a 100644 (file)
@@ -5,23 +5,23 @@ declare void @baz()
 
 ; Check that align metadata is combined
 ; CHECK-LABEL: cont:
-; CHECK: load i32*, i32**
+; CHECK: load ptr, ptr
 ; CHECK-SAME: !align ![[ALIGN:[0-9]+]]
-define i32* @test_phi_combine_load_metadata(i1 %c, i32** dereferenceable(8) %p1, i32** dereferenceable(8) %p2) {
+define ptr @test_phi_combine_load_metadata(i1 %c, ptr dereferenceable(8) %p1, ptr dereferenceable(8) %p2) {
   br i1 %c, label %t, label %f
 t:
   call void @bar()
-  %v1 = load i32*, i32** %p1, align 8, !align !0
+  %v1 = load ptr, ptr %p1, align 8, !align !0
   br label %cont
 
 f:
   call void @baz()
-  %v2 = load i32*, i32** %p2, align 8, !align !1
+  %v2 = load ptr, ptr %p2, align 8, !align !1
   br label %cont
 
 cont:
-  %res = phi i32* [ %v1, %t ], [ %v2, %f ]
-  ret i32* %res
+  %res = phi ptr [ %v1, %t ], [ %v2, %f ]
+  ret ptr %res
 }
 
 ; CHECK: ![[ALIGN]] = !{i64 8}
index 487163c6c4bb472d55c4de7beba8b5815c312458..ddddc238df1452541e36e7756b72ce29df38ff16 100644 (file)
@@ -5,41 +5,41 @@
 ; Don't push the geps through these phis, because they would require
 ; two phis each, which burdens the loop with high register pressure.
 
-define void @foo(float* %Ar, float* %Ai, i64 %As, float* %Cr, float* %Ci, i64 %Cs, i64 %n) nounwind {
+define void @foo(ptr %Ar, ptr %Ai, i64 %As, ptr %Cr, ptr %Ci, i64 %Cs, i64 %n) nounwind {
 entry:
-  %0 = getelementptr inbounds float, float* %Ar, i64 0   ; <float*> [#uses=1]
-  %1 = getelementptr inbounds float, float* %Ai, i64 0   ; <float*> [#uses=1]
+  %0 = getelementptr inbounds float, ptr %Ar, i64 0   ; <ptr> [#uses=1]
+  %1 = getelementptr inbounds float, ptr %Ai, i64 0   ; <ptr> [#uses=1]
   %2 = mul i64 %n, %As                            ; <i64> [#uses=1]
-  %3 = getelementptr inbounds float, float* %Ar, i64 %2  ; <float*> [#uses=1]
+  %3 = getelementptr inbounds float, ptr %Ar, i64 %2  ; <ptr> [#uses=1]
   %4 = mul i64 %n, %As                            ; <i64> [#uses=1]
-  %5 = getelementptr inbounds float, float* %Ai, i64 %4  ; <float*> [#uses=1]
+  %5 = getelementptr inbounds float, ptr %Ai, i64 %4  ; <ptr> [#uses=1]
   %6 = mul i64 %n, 2                              ; <i64> [#uses=1]
   %7 = mul i64 %6, %As                            ; <i64> [#uses=1]
-  %8 = getelementptr inbounds float, float* %Ar, i64 %7  ; <float*> [#uses=1]
+  %8 = getelementptr inbounds float, ptr %Ar, i64 %7  ; <ptr> [#uses=1]
   %9 = mul i64 %n, 2                              ; <i64> [#uses=1]
   %10 = mul i64 %9, %As                           ; <i64> [#uses=1]
-  %11 = getelementptr inbounds float, float* %Ai, i64 %10 ; <float*> [#uses=1]
-  %12 = getelementptr inbounds float, float* %Cr, i64 0  ; <float*> [#uses=1]
-  %13 = getelementptr inbounds float, float* %Ci, i64 0  ; <float*> [#uses=1]
+  %11 = getelementptr inbounds float, ptr %Ai, i64 %10 ; <ptr> [#uses=1]
+  %12 = getelementptr inbounds float, ptr %Cr, i64 0  ; <ptr> [#uses=1]
+  %13 = getelementptr inbounds float, ptr %Ci, i64 0  ; <ptr> [#uses=1]
   %14 = mul i64 %n, %Cs                           ; <i64> [#uses=1]
-  %15 = getelementptr inbounds float, float* %Cr, i64 %14 ; <float*> [#uses=1]
+  %15 = getelementptr inbounds float, ptr %Cr, i64 %14 ; <ptr> [#uses=1]
   %16 = mul i64 %n, %Cs                           ; <i64> [#uses=1]
-  %17 = getelementptr inbounds float, float* %Ci, i64 %16 ; <float*> [#uses=1]
+  %17 = getelementptr inbounds float, ptr %Ci, i64 %16 ; <ptr> [#uses=1]
   %18 = mul i64 %n, 2                             ; <i64> [#uses=1]
   %19 = mul i64 %18, %Cs                          ; <i64> [#uses=1]
-  %20 = getelementptr inbounds float, float* %Cr, i64 %19 ; <float*> [#uses=1]
+  %20 = getelementptr inbounds float, ptr %Cr, i64 %19 ; <ptr> [#uses=1]
   %21 = mul i64 %n, 2                             ; <i64> [#uses=1]
   %22 = mul i64 %21, %Cs                          ; <i64> [#uses=1]
-  %23 = getelementptr inbounds float, float* %Ci, i64 %22 ; <float*> [#uses=1]
+  %23 = getelementptr inbounds float, ptr %Ci, i64 %22 ; <ptr> [#uses=1]
   br label %bb13
 
 bb:                                               ; preds = %bb13
-  %24 = load float, float* %A0r.0, align 4               ; <float> [#uses=1]
-  %25 = load float, float* %A0i.0, align 4               ; <float> [#uses=1]
-  %26 = load float, float* %A1r.0, align 4               ; <float> [#uses=2]
-  %27 = load float, float* %A1i.0, align 4               ; <float> [#uses=2]
-  %28 = load float, float* %A2r.0, align 4               ; <float> [#uses=2]
-  %29 = load float, float* %A2i.0, align 4               ; <float> [#uses=2]
+  %24 = load float, ptr %A0r.0, align 4               ; <float> [#uses=1]
+  %25 = load float, ptr %A0i.0, align 4               ; <float> [#uses=1]
+  %26 = load float, ptr %A1r.0, align 4               ; <float> [#uses=2]
+  %27 = load float, ptr %A1i.0, align 4               ; <float> [#uses=2]
+  %28 = load float, ptr %A2r.0, align 4               ; <float> [#uses=2]
+  %29 = load float, ptr %A2i.0, align 4               ; <float> [#uses=2]
   %30 = fadd float %26, %28                       ; <float> [#uses=2]
   %31 = fadd float %27, %29                       ; <float> [#uses=2]
   %32 = fsub float %26, %28                       ; <float> [#uses=1]
@@ -56,41 +56,41 @@ bb:                                               ; preds = %bb13
   %43 = fsub float %39, %40                       ; <float> [#uses=1]
   %44 = fsub float %38, %41                       ; <float> [#uses=1]
   %45 = fadd float %39, %40                       ; <float> [#uses=1]
-  store float %34, float* %C0r.0, align 4
-  store float %35, float* %C0i.0, align 4
-  store float %42, float* %C1r.0, align 4
-  store float %43, float* %C1i.0, align 4
-  store float %44, float* %C2r.0, align 4
-  store float %45, float* %C2i.0, align 4
-  %46 = getelementptr inbounds float, float* %A0r.0, i64 %As ; <float*> [#uses=1]
-  %47 = getelementptr inbounds float, float* %A0i.0, i64 %As ; <float*> [#uses=1]
-  %48 = getelementptr inbounds float, float* %A1r.0, i64 %As ; <float*> [#uses=1]
-  %49 = getelementptr inbounds float, float* %A1i.0, i64 %As ; <float*> [#uses=1]
-  %50 = getelementptr inbounds float, float* %A2r.0, i64 %As ; <float*> [#uses=1]
-  %51 = getelementptr inbounds float, float* %A2i.0, i64 %As ; <float*> [#uses=1]
-  %52 = getelementptr inbounds float, float* %C0r.0, i64 %Cs ; <float*> [#uses=1]
-  %53 = getelementptr inbounds float, float* %C0i.0, i64 %Cs ; <float*> [#uses=1]
-  %54 = getelementptr inbounds float, float* %C1r.0, i64 %Cs ; <float*> [#uses=1]
-  %55 = getelementptr inbounds float, float* %C1i.0, i64 %Cs ; <float*> [#uses=1]
-  %56 = getelementptr inbounds float, float* %C2r.0, i64 %Cs ; <float*> [#uses=1]
-  %57 = getelementptr inbounds float, float* %C2i.0, i64 %Cs ; <float*> [#uses=1]
+  store float %34, ptr %C0r.0, align 4
+  store float %35, ptr %C0i.0, align 4
+  store float %42, ptr %C1r.0, align 4
+  store float %43, ptr %C1i.0, align 4
+  store float %44, ptr %C2r.0, align 4
+  store float %45, ptr %C2i.0, align 4
+  %46 = getelementptr inbounds float, ptr %A0r.0, i64 %As ; <ptr> [#uses=1]
+  %47 = getelementptr inbounds float, ptr %A0i.0, i64 %As ; <ptr> [#uses=1]
+  %48 = getelementptr inbounds float, ptr %A1r.0, i64 %As ; <ptr> [#uses=1]
+  %49 = getelementptr inbounds float, ptr %A1i.0, i64 %As ; <ptr> [#uses=1]
+  %50 = getelementptr inbounds float, ptr %A2r.0, i64 %As ; <ptr> [#uses=1]
+  %51 = getelementptr inbounds float, ptr %A2i.0, i64 %As ; <ptr> [#uses=1]
+  %52 = getelementptr inbounds float, ptr %C0r.0, i64 %Cs ; <ptr> [#uses=1]
+  %53 = getelementptr inbounds float, ptr %C0i.0, i64 %Cs ; <ptr> [#uses=1]
+  %54 = getelementptr inbounds float, ptr %C1r.0, i64 %Cs ; <ptr> [#uses=1]
+  %55 = getelementptr inbounds float, ptr %C1i.0, i64 %Cs ; <ptr> [#uses=1]
+  %56 = getelementptr inbounds float, ptr %C2r.0, i64 %Cs ; <ptr> [#uses=1]
+  %57 = getelementptr inbounds float, ptr %C2i.0, i64 %Cs ; <ptr> [#uses=1]
   %58 = add nsw i64 %i.0, 1                       ; <i64> [#uses=1]
   br label %bb13
 
 bb13:                                             ; preds = %bb, %entry
   %i.0 = phi i64 [ 0, %entry ], [ %58, %bb ]      ; <i64> [#uses=2]
-  %C2i.0 = phi float* [ %23, %entry ], [ %57, %bb ] ; <float*> [#uses=2]
-  %C2r.0 = phi float* [ %20, %entry ], [ %56, %bb ] ; <float*> [#uses=2]
-  %C1i.0 = phi float* [ %17, %entry ], [ %55, %bb ] ; <float*> [#uses=2]
-  %C1r.0 = phi float* [ %15, %entry ], [ %54, %bb ] ; <float*> [#uses=2]
-  %C0i.0 = phi float* [ %13, %entry ], [ %53, %bb ] ; <float*> [#uses=2]
-  %C0r.0 = phi float* [ %12, %entry ], [ %52, %bb ] ; <float*> [#uses=2]
-  %A2i.0 = phi float* [ %11, %entry ], [ %51, %bb ] ; <float*> [#uses=2]
-  %A2r.0 = phi float* [ %8, %entry ], [ %50, %bb ] ; <float*> [#uses=2]
-  %A1i.0 = phi float* [ %5, %entry ], [ %49, %bb ] ; <float*> [#uses=2]
-  %A1r.0 = phi float* [ %3, %entry ], [ %48, %bb ] ; <float*> [#uses=2]
-  %A0i.0 = phi float* [ %1, %entry ], [ %47, %bb ] ; <float*> [#uses=2]
-  %A0r.0 = phi float* [ %0, %entry ], [ %46, %bb ] ; <float*> [#uses=2]
+  %C2i.0 = phi ptr [ %23, %entry ], [ %57, %bb ] ; <ptr> [#uses=2]
+  %C2r.0 = phi ptr [ %20, %entry ], [ %56, %bb ] ; <ptr> [#uses=2]
+  %C1i.0 = phi ptr [ %17, %entry ], [ %55, %bb ] ; <ptr> [#uses=2]
+  %C1r.0 = phi ptr [ %15, %entry ], [ %54, %bb ] ; <ptr> [#uses=2]
+  %C0i.0 = phi ptr [ %13, %entry ], [ %53, %bb ] ; <ptr> [#uses=2]
+  %C0r.0 = phi ptr [ %12, %entry ], [ %52, %bb ] ; <ptr> [#uses=2]
+  %A2i.0 = phi ptr [ %11, %entry ], [ %51, %bb ] ; <ptr> [#uses=2]
+  %A2r.0 = phi ptr [ %8, %entry ], [ %50, %bb ] ; <ptr> [#uses=2]
+  %A1i.0 = phi ptr [ %5, %entry ], [ %49, %bb ] ; <ptr> [#uses=2]
+  %A1r.0 = phi ptr [ %3, %entry ], [ %48, %bb ] ; <ptr> [#uses=2]
+  %A0i.0 = phi ptr [ %1, %entry ], [ %47, %bb ] ; <ptr> [#uses=2]
+  %A0r.0 = phi ptr [ %0, %entry ], [ %46, %bb ] ; <ptr> [#uses=2]
   %59 = icmp slt i64 %i.0, %n                     ; <i1> [#uses=1]
   br i1 %59, label %bb, label %bb14
 
index 5fb4b1ae1a6a209d94f3e4331bedfc0570863e32..75d5c6e4622710789f0ca1441f160f6d5dd3675c 100644 (file)
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-define void @test_bitcast_1(i1 %c, i32* %ptr) {
+define void @test_bitcast_1(i1 %c, ptr %ptr) {
 ; CHECK-LABEL: @test_bitcast_1(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
 ; CHECK:       b0:
-; CHECK-NEXT:    [[CAST_0:%.*]] = bitcast i32* [[PTR:%.*]] to i8*
-; CHECK-NEXT:    call void @use(i8* [[CAST_0]])
+; CHECK-NEXT:    call void @use(ptr [[PTR:%.*]])
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       b1:
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
-; CHECK-NEXT:    [[P:%.*]] = bitcast i32* [[PTR]] to i8*
-; CHECK-NEXT:    store i8 0, i8* [[P]], align 1
+; CHECK-NEXT:    store i8 0, ptr [[PTR]], align 1
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %cast.0 = bitcast i32* %ptr to i8*
-  %cast.1 = bitcast i32* %ptr to i8*
   br i1 %c, label %b0, label %b1
 
 b0:
-  call void @use(i8* %cast.0)
+  call void @use(ptr %ptr)
   br label %end
 
 b1:
   br label %end
 
 end:
-  %p = phi i8* [ %cast.0, %b0 ], [ %cast.1, %b1 ]
-  store i8 0, i8* %p
+  %p = phi ptr [ %ptr, %b0 ], [ %ptr, %b1 ]
+  store i8 0, ptr %p
   ret void
 }
 
-define void @test_bitcast_2(i1 %c, i32* %ptr) {
+define void @test_bitcast_2(i1 %c, ptr %ptr) {
 ; CHECK-LABEL: @test_bitcast_2(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
 ; CHECK:       b0:
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       b1:
-; CHECK-NEXT:    [[CAST_1:%.*]] = bitcast i32* [[PTR:%.*]] to i8*
-; CHECK-NEXT:    call void @use(i8* [[CAST_1]])
+; CHECK-NEXT:    call void @use(ptr [[PTR:%.*]])
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
-; CHECK-NEXT:    [[P:%.*]] = bitcast i32* [[PTR]] to i8*
-; CHECK-NEXT:    store i8 0, i8* [[P]], align 1
+; CHECK-NEXT:    store i8 0, ptr [[PTR]], align 1
 ; CHECK-NEXT:    ret void
 ;
 entry:
   br i1 %c, label %b0, label %b1
 
 b0:
-  %cast.0 = bitcast i32* %ptr to i8*
   br label %end
 
 b1:
-  %cast.1 = bitcast i32* %ptr to i8*
-  call void @use(i8* %cast.1)
+  call void @use(ptr %ptr)
   br label %end
 
 end:
-  %p = phi i8* [ %cast.0, %b0 ], [ %cast.1, %b1 ]
-  store i8 0, i8* %p
+  %p = phi ptr [ %ptr, %b0 ], [ %ptr, %b1 ]
+  store i8 0, ptr %p
   ret void
 }
 
 
-define void @test_bitcast_3(i1 %c, i32** %ptr) {
+define void @test_bitcast_3(i1 %c, ptr %ptr) {
 ; CHECK-LABEL: @test_bitcast_3(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[LOAD_PTR:%.*]] = load i32*, i32** [[PTR:%.*]], align 8
+; CHECK-NEXT:    [[LOAD_PTR:%.*]] = load ptr, ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
 ; CHECK:       b0:
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       b1:
-; CHECK-NEXT:    [[CAST_1:%.*]] = bitcast i32* [[LOAD_PTR]] to i8*
-; CHECK-NEXT:    call void @use(i8* [[CAST_1]])
+; CHECK-NEXT:    call void @use(ptr [[LOAD_PTR]])
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
-; CHECK-NEXT:    [[P:%.*]] = bitcast i32* [[LOAD_PTR]] to i8*
-; CHECK-NEXT:    store i8 0, i8* [[P]], align 1
+; CHECK-NEXT:    store i8 0, ptr [[LOAD_PTR]], align 1
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %load.ptr = load i32*, i32** %ptr
+  %load.ptr = load ptr, ptr %ptr
   br i1 %c, label %b0, label %b1
 
 b0:
-  %cast.0 = bitcast i32* %load.ptr to i8*
   br label %end
 
 b1:
-  %cast.1 = bitcast i32* %load.ptr to i8*
-  call void @use(i8* %cast.1)
+  call void @use(ptr %load.ptr)
   br label %end
 
 end:
-  %p = phi i8* [ %cast.0, %b0 ], [ %cast.1, %b1 ]
-  store i8 0, i8* %p
+  %p = phi ptr [ %load.ptr, %b0 ], [ %load.ptr, %b1 ]
+  store i8 0, ptr %p
   ret void
 }
 
-define void @test_bitcast_loads_in_different_bbs(i1 %c, i32** %ptr.0, i32** %ptr.1) {
+define void @test_bitcast_loads_in_different_bbs(i1 %c, ptr %ptr.0, ptr %ptr.1) {
 ; CHECK-LABEL: @test_bitcast_loads_in_different_bbs(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
 ; CHECK:       b0:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i32** [[PTR_0:%.*]] to i8**
-; CHECK-NEXT:    [[LOAD_PTR_02:%.*]] = load i8*, i8** [[TMP0]], align 8
-; CHECK-NEXT:    call void @use(i8* [[LOAD_PTR_02]])
+; CHECK-NEXT:    [[LOAD_PTR_02:%.*]] = load ptr, ptr [[PTR_0:%.*]], align 8
+; CHECK-NEXT:    call void @use(ptr [[LOAD_PTR_02]])
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       b1:
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i32** [[PTR_1:%.*]] to i8**
-; CHECK-NEXT:    [[LOAD_PTR_11:%.*]] = load i8*, i8** [[TMP1]], align 8
+; CHECK-NEXT:    [[LOAD_PTR_11:%.*]] = load ptr, ptr [[PTR_1:%.*]], align 8
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
-; CHECK-NEXT:    [[P:%.*]] = phi i8* [ [[LOAD_PTR_02]], [[B0]] ], [ [[LOAD_PTR_11]], [[B1]] ]
-; CHECK-NEXT:    store i8 0, i8* [[P]], align 1
+; CHECK-NEXT:    [[P:%.*]] = phi ptr [ [[LOAD_PTR_02]], [[B0]] ], [ [[LOAD_PTR_11]], [[B1]] ]
+; CHECK-NEXT:    store i8 0, ptr [[P]], align 1
 ; CHECK-NEXT:    ret void
 ;
 entry:
   br i1 %c, label %b0, label %b1
 
 b0:
-  %load.ptr.0 = load i32*, i32** %ptr.0
-  %cast.0 = bitcast i32* %load.ptr.0 to i8*
-  call void @use(i8* %cast.0)
+  %load.ptr.0 = load ptr, ptr %ptr.0
+  call void @use(ptr %load.ptr.0)
   br label %end
 
 b1:
-  %load.ptr.1 = load i32*, i32** %ptr.1
-  %cast.1 = bitcast i32* %load.ptr.1 to i8*
+  %load.ptr.1 = load ptr, ptr %ptr.1
   br label %end
 
 end:
-  %p = phi i8* [ %cast.0, %b0 ], [ %cast.1, %b1 ]
-  store i8 0, i8* %p
+  %p = phi ptr [ %load.ptr.0, %b0 ], [ %load.ptr.1, %b1 ]
+  store i8 0, ptr %p
   ret void
 }
 
-define void @test_gep_1(i1 %c, i32* %ptr) {
+define void @test_gep_1(i1 %c, ptr %ptr) {
 ; CHECK-LABEL: @test_gep_1(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
 ; CHECK:       b0:
-; CHECK-NEXT:    call void @use.i32(i32* [[PTR:%.*]])
+; CHECK-NEXT:    call void @use.i32(ptr [[PTR:%.*]])
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       b1:
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
-; CHECK-NEXT:    store i32 0, i32* [[PTR]], align 4
+; CHECK-NEXT:    store i32 0, ptr [[PTR]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
   br i1 %c, label %b0, label %b1
 
 b0:
-  %cast.0 = getelementptr i32, i32* %ptr, i32 0
-  call void @use.i32(i32* %cast.0)
+  call void @use.i32(ptr %ptr)
   br label %end
 
 b1:
-  %cast.1 = getelementptr i32, i32* %ptr, i32 0
   br label %end
 
 end:
-  %p = phi i32* [ %cast.0, %b0 ], [ %cast.1, %b1 ]
-  store i32 0, i32* %p
+  %p = phi ptr [ %ptr, %b0 ], [ %ptr, %b1 ]
+  store i32 0, ptr %p
   ret void
 }
 
-define void @test_bitcast_not_foldable(i1 %c, i32* %ptr.0, i32* %ptr.1) {
+define void @test_bitcast_not_foldable(i1 %c, ptr %ptr.0, ptr %ptr.1) {
 ; CHECK-LABEL: @test_bitcast_not_foldable(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
 ; CHECK:       b0:
-; CHECK-NEXT:    [[CAST_0:%.*]] = bitcast i32* [[PTR_0:%.*]] to i8*
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       b1:
-; CHECK-NEXT:    [[CAST_1:%.*]] = bitcast i32* [[PTR_1:%.*]] to i8*
-; CHECK-NEXT:    call void @use(i8* [[CAST_1]])
+; CHECK-NEXT:    call void @use(ptr [[PTR_1:%.*]])
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
-; CHECK-NEXT:    [[P:%.*]] = phi i8* [ [[CAST_0]], [[B0]] ], [ [[CAST_1]], [[B1]] ]
-; CHECK-NEXT:    store i8 0, i8* [[P]], align 1
+; CHECK-NEXT:    [[P:%.*]] = phi ptr [ [[PTR_0:%.*]], [[B0]] ], [ [[PTR_1:%.*]], [[B1]] ]
+; CHECK-NEXT:    store i8 0, ptr [[P]], align 1
 ; CHECK-NEXT:    ret void
 ;
 entry:
   br i1 %c, label %b0, label %b1
 
 b0:
-  %cast.0 = bitcast i32* %ptr.0 to i8*
   br label %end
 
 b1:
-  %cast.1 = bitcast i32* %ptr.1 to i8*
-  call void @use(i8* %cast.1)
+  call void @use(ptr %ptr.1)
   br label %end
 
 end:
-  %p = phi i8* [ %cast.0, %b0 ], [ %cast.1, %b1 ]
-  store i8 0, i8* %p
+  %p = phi ptr [ %ptr.0, %b0 ], [ %ptr.1, %b1 ]
+  store i8 0, ptr %p
   ret void
 }
 
-define void @test_bitcast_with_extra_use(i1 %c, i32* %ptr) {
+define void @test_bitcast_with_extra_use(i1 %c, ptr %ptr) {
 ; CHECK-LABEL: @test_bitcast_with_extra_use(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
 ; CHECK:       b0:
-; CHECK-NEXT:    [[CAST_0:%.*]] = bitcast i32* [[PTR:%.*]] to i8*
-; CHECK-NEXT:    call void @use(i8* [[CAST_0]])
+; CHECK-NEXT:    call void @use(ptr [[PTR:%.*]])
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       b1:
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
-; CHECK-NEXT:    [[P:%.*]] = bitcast i32* [[PTR]] to i8*
-; CHECK-NEXT:    store i8 0, i8* [[P]], align 1
+; CHECK-NEXT:    store i8 0, ptr [[PTR]], align 1
 ; CHECK-NEXT:    ret void
 ;
 entry:
   br i1 %c, label %b0, label %b1
 
 b0:
-  %cast.0 = bitcast i32* %ptr to i8*
-  call void @use(i8* %cast.0)
+  call void @use(ptr %ptr)
   br label %end
 
 b1:
-  %cast.1 = bitcast i32* %ptr to i8*
   br label %end
 
 end:
-  %p = phi i8* [ %cast.0, %b0 ], [ %cast.1, %b1 ]
-  store i8 0, i8* %p
+  %p = phi ptr [ %ptr, %b0 ], [ %ptr, %b1 ]
+  store i8 0, ptr %p
   ret void
 }
 
-define void @test_bitcast_different_bases(i1 %c, i32* %ptr.0, i32* %ptr.1) {
+define void @test_bitcast_different_bases(i1 %c, ptr %ptr.0, ptr %ptr.1) {
 ; CHECK-LABEL: @test_bitcast_different_bases(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
 ; CHECK:       b0:
-; CHECK-NEXT:    [[CAST_0:%.*]] = bitcast i32* [[PTR_0:%.*]] to i8*
-; CHECK-NEXT:    call void @use(i8* [[CAST_0]])
+; CHECK-NEXT:    call void @use(ptr [[PTR_0:%.*]])
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       b1:
-; CHECK-NEXT:    [[CAST_1:%.*]] = bitcast i32* [[PTR_1:%.*]] to i8*
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
-; CHECK-NEXT:    [[P:%.*]] = phi i8* [ [[CAST_0]], [[B0]] ], [ [[CAST_1]], [[B1]] ]
-; CHECK-NEXT:    store i8 0, i8* [[P]], align 1
+; CHECK-NEXT:    [[P:%.*]] = phi ptr [ [[PTR_0:%.*]], [[B0]] ], [ [[PTR_1:%.*]], [[B1]] ]
+; CHECK-NEXT:    store i8 0, ptr [[P]], align 1
 ; CHECK-NEXT:    ret void
 ;
 entry:
   br i1 %c, label %b0, label %b1
 
 b0:
-  %cast.0 = bitcast i32* %ptr.0 to i8*
-  call void @use(i8* %cast.0)
+  call void @use(ptr %ptr.0)
   br label %end
 
 b1:
-  %cast.1 = bitcast i32* %ptr.1 to i8*
   br label %end
 
 end:
-  %p = phi i8* [ %cast.0, %b0 ], [ %cast.1, %b1 ]
-  store i8 0, i8* %p
+  %p = phi ptr [ %ptr.0, %b0 ], [ %ptr.1, %b1 ]
+  store i8 0, ptr %p
   ret void
 }
 
-define void @test_bitcast_gep_chains(i1 %c, i32* %ptr) {
+define void @test_bitcast_gep_chains(i1 %c, ptr %ptr) {
 ; CHECK-LABEL: @test_bitcast_gep_chains(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
 ; CHECK:       b0:
-; CHECK-NEXT:    [[CAST_0:%.*]] = bitcast i32* [[PTR:%.*]] to i8*
-; CHECK-NEXT:    call void @use(i8* [[CAST_0]])
+; CHECK-NEXT:    call void @use(ptr [[PTR:%.*]])
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       b1:
-; CHECK-NEXT:    call void @use.i32(i32* [[PTR]])
+; CHECK-NEXT:    call void @use.i32(ptr [[PTR]])
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
-; CHECK-NEXT:    [[P:%.*]] = bitcast i32* [[PTR]] to i8*
-; CHECK-NEXT:    store i8 0, i8* [[P]], align 1
+; CHECK-NEXT:    store i8 0, ptr [[PTR]], align 1
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %gep = getelementptr i32, i32* %ptr, i32 0
   br i1 %c, label %b0, label %b1
 
 b0:
-  %cast.0 = bitcast i32* %gep to i8*
-  call void @use(i8* %cast.0)
+  call void @use(ptr %ptr)
   br label %end
 
 b1:
-  %cast.1 = bitcast i32* %ptr to i8*
-  %cast.2 = bitcast i8* %cast.1 to i32*
-  call void @use.i32(i32* %cast.2)
-  %cast.3 = bitcast i32* %cast.2 to i8*
+  call void @use.i32(ptr %ptr)
   br label %end
 
 end:
-  %p = phi i8* [ %cast.0, %b0 ], [ %cast.3, %b1 ]
-  store i8 0, i8* %p
+  %p = phi ptr [ %ptr, %b0 ], [ %ptr, %b1 ]
+  store i8 0, ptr %p
   ret void
 }
 
-define void @test_4_incoming_values_different_bases_1(i32 %c, i32* %ptr.0, i32* %ptr.1) {
+define void @test_4_incoming_values_different_bases_1(i32 %c, ptr %ptr.0, ptr %ptr.1) {
 ; CHECK-LABEL: @test_4_incoming_values_different_bases_1(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    switch i32 [[C:%.*]], label [[END_2:%.*]] [
@@ -321,61 +284,50 @@ define void @test_4_incoming_values_different_bases_1(i32 %c, i32* %ptr.0, i32*
 ; CHECK-NEXT:    i32 3, label [[B3:%.*]]
 ; CHECK-NEXT:    ]
 ; CHECK:       b0:
-; CHECK-NEXT:    [[CAST_0:%.*]] = bitcast i32* [[PTR_0:%.*]] to i8*
-; CHECK-NEXT:    call void @use(i8* [[CAST_0]])
+; CHECK-NEXT:    call void @use(ptr [[PTR_0:%.*]])
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       b1:
-; CHECK-NEXT:    [[CAST_3:%.*]] = bitcast i32* [[PTR_1:%.*]] to i8*
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       b2:
-; CHECK-NEXT:    [[CAST_4:%.*]] = bitcast i32* [[PTR_0]] to i8*
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       b3:
-; CHECK-NEXT:    [[CAST_5:%.*]] = bitcast i32* [[PTR_0]] to i8*
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
-; CHECK-NEXT:    [[P:%.*]] = phi i8* [ [[CAST_0]], [[B0]] ], [ [[CAST_3]], [[B1]] ], [ [[CAST_4]], [[B2]] ], [ [[CAST_5]], [[B3]] ]
-; CHECK-NEXT:    store i8 0, i8* [[P]], align 1
+; CHECK-NEXT:    [[P:%.*]] = phi ptr [ [[PTR_0:%.*]], [[B0]] ], [ [[PTR_1:%.*]], [[B1]] ], [ [[PTR_0]], [[B2]] ], [ [[PTR_0]], [[B3]] ]
+; CHECK-NEXT:    store i8 0, ptr [[P]], align 1
 ; CHECK-NEXT:    ret void
 ; CHECK:       end.2:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %gep = getelementptr i32, i32* %ptr.0, i32 0
   switch i32 %c, label %end.2 [ i32 0, label %b0
   i32 1, label %b1
   i32 2, label %b2
   i32 3, label %b3]
 
 b0:
-  %cast.0 = bitcast i32* %gep to i8*
-  call void @use(i8* %cast.0)
+  call void @use(ptr %ptr.0)
   br label %end
 
 b1:
-  %cast.1 = bitcast i32* %ptr.1 to i8*
-  %cast.2 = bitcast i8* %cast.1 to i64*
-  %cast.3 = bitcast i64* %cast.2 to i8*
   br label %end
 
 b2:
-  %cast.4 = bitcast i32* %gep to i8*
   br label %end
 
 b3:
-  %cast.5 = bitcast i32 * %ptr.0 to i8*
   br label %end
 
 end:
-  %p = phi i8* [ %cast.0, %b0 ], [ %cast.3, %b1 ], [ %cast.4, %b2 ], [ %cast.5, %b3]
-  store i8 0, i8* %p
+  %p = phi ptr [ %ptr.0, %b0 ], [ %ptr.1, %b1 ], [ %ptr.0, %b2 ], [ %ptr.0, %b3]
+  store i8 0, ptr %p
   ret void
 
 end.2:
   ret void
 }
 
-define void @test_4_incoming_values_different_bases_2(i32 %c, i32* %ptr.0, i32* %ptr.1) {
+define void @test_4_incoming_values_different_bases_2(i32 %c, ptr %ptr.0, ptr %ptr.1) {
 ; CHECK-LABEL: @test_4_incoming_values_different_bases_2(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    switch i32 [[C:%.*]], label [[END_2:%.*]] [
@@ -387,57 +339,48 @@ define void @test_4_incoming_values_different_bases_2(i32 %c, i32* %ptr.0, i32*
 ; CHECK:       b0:
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       b1:
-; CHECK-NEXT:    [[CAST_1:%.*]] = bitcast i32* [[PTR_0:%.*]] to i8*
-; CHECK-NEXT:    call void @use(i8* [[CAST_1]])
+; CHECK-NEXT:    call void @use(ptr [[PTR_0:%.*]])
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       b2:
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       b3:
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
-; CHECK-NEXT:    [[P_IN:%.*]] = phi i32* [ [[PTR_1:%.*]], [[B0]] ], [ [[PTR_0]], [[B1]] ], [ [[PTR_0]], [[B2]] ], [ [[PTR_0]], [[B3]] ]
-; CHECK-NEXT:    [[P:%.*]] = bitcast i32* [[P_IN]] to i8*
-; CHECK-NEXT:    store i8 0, i8* [[P]], align 1
+; CHECK-NEXT:    [[P_IN:%.*]] = phi ptr [ [[PTR_1:%.*]], [[B0]] ], [ [[PTR_0]], [[B1]] ], [ [[PTR_0]], [[B2]] ], [ [[PTR_0]], [[B3]] ]
+; CHECK-NEXT:    store i8 0, ptr [[P_IN]], align 1
 ; CHECK-NEXT:    ret void
 ; CHECK:       end.2:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %gep = getelementptr i32, i32* %ptr.0, i32 0
   switch i32 %c, label %end.2 [ i32 0, label %b0
   i32 1, label %b1
   i32 2, label %b2
   i32 3, label %b3]
 
 b0:
-  %cast.0 = bitcast i32* %ptr.1 to i8*
   br label %end
 
 b1:
-  %cast.1 = bitcast i32* %ptr.0 to i8*
-  call void @use(i8* %cast.1)
-  %cast.2 = bitcast i8* %cast.1 to i64*
-  %cast.3 = bitcast i64* %cast.2 to i8*
+  call void @use(ptr %ptr.0)
   br label %end
 
 b2:
-  %cast.4 = bitcast i32* %gep to i8*
   br label %end
 
 b3:
-  %cast.5 = bitcast i32 * %ptr.0 to i8*
   br label %end
 
 end:
-  %p = phi i8* [ %cast.0, %b0 ], [ %cast.3, %b1 ], [ %cast.4, %b2 ], [ %cast.5, %b3]
-  store i8 0, i8* %p
+  %p = phi ptr [ %ptr.1, %b0 ], [ %ptr.0, %b1 ], [ %ptr.0, %b2 ], [ %ptr.0, %b3]
+  store i8 0, ptr %p
   ret void
 
 end.2:
   ret void
 }
 
-define void @test_4_incoming_values_different_bases_3(i32 %c, i32* %ptr.0, i32* %ptr.1) {
+define void @test_4_incoming_values_different_bases_3(i32 %c, ptr %ptr.0, ptr %ptr.1) {
 ; CHECK-LABEL: @test_4_incoming_values_different_bases_3(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    switch i32 [[C:%.*]], label [[END_2:%.*]] [
@@ -447,95 +390,82 @@ define void @test_4_incoming_values_different_bases_3(i32 %c, i32* %ptr.0, i32*
 ; CHECK-NEXT:    i32 3, label [[B3:%.*]]
 ; CHECK-NEXT:    ]
 ; CHECK:       b0:
-; CHECK-NEXT:    [[CAST_0:%.*]] = bitcast i32* [[PTR_0:%.*]] to i8*
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       b1:
-; CHECK-NEXT:    [[CAST_3:%.*]] = bitcast i32* [[PTR_0]] to i8*
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       b2:
-; CHECK-NEXT:    [[CAST_4:%.*]] = bitcast i32* [[PTR_0]] to i8*
-; CHECK-NEXT:    call void @use(i8* [[CAST_4]])
+; CHECK-NEXT:    call void @use(ptr [[PTR_0]])
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       b3:
-; CHECK-NEXT:    [[CAST_5:%.*]] = bitcast i32* [[PTR_1:%.*]] to i8*
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
-; CHECK-NEXT:    [[P:%.*]] = phi i8* [ [[CAST_0]], [[B0]] ], [ [[CAST_3]], [[B1]] ], [ [[CAST_4]], [[B2]] ], [ [[CAST_5]], [[B3]] ]
-; CHECK-NEXT:    store i8 0, i8* [[P]], align 1
+; CHECK-NEXT:    [[P:%.*]] = phi ptr [ [[PTR_0:%.*]], [[B0]] ], [ [[PTR_0]], [[B1]] ], [ [[PTR_0]], [[B2]] ], [ [[PTR_1:%.*]], [[B3]] ]
+; CHECK-NEXT:    store i8 0, ptr [[P]], align 1
 ; CHECK-NEXT:    ret void
 ; CHECK:       end.2:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %gep = getelementptr i32, i32* %ptr.0, i32 0
   switch i32 %c, label %end.2 [ i32 0, label %b0
   i32 1, label %b1
   i32 2, label %b2
   i32 3, label %b3]
 
 b0:
-  %cast.0 = bitcast i32* %ptr.0 to i8*
   br label %end
 
 b1:
-  %cast.1 = bitcast i32* %ptr.0 to i8*
-  %cast.2 = bitcast i8* %cast.1 to i64*
-  %cast.3 = bitcast i64* %cast.2 to i8*
   br label %end
 
 b2:
-  %cast.4 = bitcast i32* %gep to i8*
-  call void @use(i8* %cast.4)
+  call void @use(ptr %ptr.0)
   br label %end
 
 b3:
-  %cast.5 = bitcast i32 * %ptr.1 to i8*
   br label %end
 
 end:
-  %p = phi i8* [ %cast.0, %b0 ], [ %cast.3, %b1 ], [ %cast.4, %b2 ], [ %cast.5, %b3]
-  store i8 0, i8* %p
+  %p = phi ptr [ %ptr.0, %b0 ], [ %ptr.0, %b1 ], [ %ptr.0, %b2 ], [ %ptr.1, %b3]
+  store i8 0, ptr %p
   ret void
 
 end.2:
   ret void
 }
 
-define void @test_addrspacecast_1(i1 %c, i32* %ptr) {
+define void @test_addrspacecast_1(i1 %c, ptr %ptr) {
 ; CHECK-LABEL: @test_addrspacecast_1(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[B0:%.*]], label [[B1:%.*]]
 ; CHECK:       b0:
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       b1:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i32* [[PTR:%.*]] to i8*
-; CHECK-NEXT:    [[CAST_1:%.*]] = addrspacecast i8* [[TMP0]] to i8 addrspace(1)*
-; CHECK-NEXT:    call void @use.i8.addrspace1(i8 addrspace(1)* [[CAST_1]])
+; CHECK-NEXT:    [[CAST_1:%.*]] = addrspacecast ptr [[PTR:%.*]] to ptr addrspace(1)
+; CHECK-NEXT:    call void @use.i8.addrspace1(ptr addrspace(1) [[CAST_1]])
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i32* [[PTR]] to i8*
-; CHECK-NEXT:    [[P:%.*]] = addrspacecast i8* [[TMP1]] to i8 addrspace(1)*
-; CHECK-NEXT:    store i8 0, i8 addrspace(1)* [[P]], align 1
+; CHECK-NEXT:    [[P:%.*]] = addrspacecast ptr [[PTR]] to ptr addrspace(1)
+; CHECK-NEXT:    store i8 0, ptr addrspace(1) [[P]], align 1
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %cast.0 = addrspacecast i32* %ptr to i8 addrspace(1)*
-  %cast.1 = addrspacecast i32* %ptr to i8 addrspace(1)*
+  %cast.0 = addrspacecast ptr %ptr to ptr addrspace(1)
+  %cast.1 = addrspacecast ptr %ptr to ptr addrspace(1)
   br i1 %c, label %b0, label %b1
 
 b0:
   br label %end
 
 b1:
-  call void @use.i8.addrspace1(i8 addrspace(1)* %cast.1)
+  call void @use.i8.addrspace1(ptr addrspace(1) %cast.1)
   br label %end
 
 end:
-  %p = phi i8 addrspace(1)* [ %cast.0, %b0 ], [ %cast.1, %b1 ]
-  store i8 0, i8 addrspace(1)* %p
+  %p = phi ptr addrspace(1) [ %cast.0, %b0 ], [ %cast.1, %b1 ]
+  store i8 0, ptr addrspace(1) %p
   ret void
 }
 
-declare void @use(i8*)
-declare void @use.i32(i32*)
-declare void @use.i8.addrspace1(i8 addrspace(1)*)
+declare void @use(ptr)
+declare void @use.i32(ptr)
+declare void @use.i8.addrspace1(ptr addrspace(1))
index 5a78c24c2f428c76ba3860630fde04f3d98e4ae7..e51cb3d0caf49ba80fc103ddb9be91d72aa3149e 100644 (file)
@@ -10,7 +10,7 @@ define i32 @foo(i1 %which) {
 ; CHECK:       delay:
 ; CHECK-NEXT:    br label [[FINAL]]
 ; CHECK:       final:
-; CHECK-NEXT:    [[USE2:%.*]] = phi i32 [ 1, [[ENTRY:%.*]] ], [ select (i1 icmp eq (i32* @A, i32* @B), i32 2, i32 1), [[DELAY]] ]
+; CHECK-NEXT:    [[USE2:%.*]] = phi i32 [ 1, [[ENTRY:%.*]] ], [ select (i1 icmp eq (ptr @A, ptr @B), i32 2, i32 1), [[DELAY]] ]
 ; CHECK-NEXT:    ret i32 [[USE2]]
 ;
 entry:
@@ -20,7 +20,7 @@ delay:
   br label %final
 
 final:
-  %use2 = phi i1 [ false, %entry ], [ icmp eq (i32* @A, i32* @B), %delay ]
+  %use2 = phi i1 [ false, %entry ], [ icmp eq (ptr @A, ptr @B), %delay ]
   %value = select i1 %use2, i32 2, i32 1
   ret i32 %value
 }
@@ -106,7 +106,7 @@ else:
 
 ; Don't crash on unreachable IR.
 
-define void @PR48369(i32 %a, i32* %p) {
+define void @PR48369(i32 %a, ptr %p) {
 ; CHECK-LABEL: @PR48369(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[PHI_CMP:%.*]] = icmp sgt i32 [[A:%.*]], 0
@@ -114,7 +114,7 @@ define void @PR48369(i32 %a, i32* %p) {
 ; CHECK:       bb1:
 ; CHECK-NEXT:    [[CMP:%.*]] = phi i1 [ [[PHI_CMP]], [[DEADBB:%.*]] ], [ true, [[ENTRY:%.*]] ]
 ; CHECK-NEXT:    [[SHL:%.*]] = select i1 [[CMP]], i32 256, i32 0
-; CHECK-NEXT:    store i32 [[SHL]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[SHL]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       deadbb:
 ; CHECK-NEXT:    br label [[BB1]]
@@ -128,7 +128,7 @@ entry:
 bb1:
   %cmp = phi i1 [ %phi.cmp, %deadbb ], [ true, %entry ]
   %shl = select i1 %cmp, i32 256, i32 0
-  store i32 %shl, i32* %p
+  store i32 %shl, ptr %p
   br label %end
 
 deadbb:
index e629b54e0004803acc84855b3ff32dea9263b668..b7848d2ad9a30da214ca46f06f875ef18cbeae31 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: opt -S -passes=instcombine < %s | FileCheck %s
 
 ; OSS Fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=15217
-define i64 @fuzz15217(i1 %cond, i8* %Ptr, i64 %Val) {
+define i64 @fuzz15217(i1 %cond, ptr %Ptr, i64 %Val) {
 ; CHECK-LABEL: @fuzz15217(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[END:%.*]], label [[TWO:%.*]]
index d77d02302274e0f4824a4f13fddc0b39a64162c5..10071a072bf79bd4628e9af6a4d57eca6a319ad4 100644 (file)
@@ -5,43 +5,43 @@ target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
 ; We are really checking that this doesn't loop forever. We would never
 ; actually get to the checks here if it did.
 
-define void @timeout(i16* nocapture readonly %cinfo) {
+define void @timeout(ptr nocapture readonly %cinfo) {
 ; CHECK-LABEL: @timeout(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
 ; CHECK:       for.body:
-; CHECK-NEXT:    [[ARRAYIDX15:%.*]] = getelementptr inbounds i16, i16* [[CINFO:%.*]], i32 2
-; CHECK-NEXT:    [[L:%.*]] = load i16, i16* [[ARRAYIDX15]], align 2
+; CHECK-NEXT:    [[ARRAYIDX15:%.*]] = getelementptr inbounds i16, ptr [[CINFO:%.*]], i32 2
+; CHECK-NEXT:    [[L:%.*]] = load i16, ptr [[ARRAYIDX15]], align 2
 ; CHECK-NEXT:    [[CMP17:%.*]] = icmp eq i16 [[L]], 0
 ; CHECK-NEXT:    [[EXTRACT_T1:%.*]] = trunc i16 [[L]] to i8
 ; CHECK-NEXT:    br i1 [[CMP17]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
 ; CHECK:       if.then:
-; CHECK-NEXT:    [[DOTPRE:%.*]] = load i16, i16* [[ARRAYIDX15]], align 2
+; CHECK-NEXT:    [[DOTPRE:%.*]] = load i16, ptr [[ARRAYIDX15]], align 2
 ; CHECK-NEXT:    [[EXTRACT_T:%.*]] = trunc i16 [[DOTPRE]] to i8
 ; CHECK-NEXT:    br label [[IF_END]]
 ; CHECK:       if.end:
 ; CHECK-NEXT:    [[P_OFF0:%.*]] = phi i8 [ [[EXTRACT_T]], [[IF_THEN]] ], [ [[EXTRACT_T1]], [[FOR_BODY]] ]
 ; CHECK-NEXT:    [[SUB:%.*]] = add i8 [[P_OFF0]], -1
-; CHECK-NEXT:    store i8 [[SUB]], i8* undef, align 1
+; CHECK-NEXT:    store i8 [[SUB]], ptr undef, align 1
 ; CHECK-NEXT:    br label [[FOR_BODY]]
 ;
 entry:
   br label %for.body
 
 for.body:
-  %arrayidx15 = getelementptr inbounds i16, i16* %cinfo, i32 2
-  %l = load i16, i16* %arrayidx15, align 2
+  %arrayidx15 = getelementptr inbounds i16, ptr %cinfo, i32 2
+  %l = load i16, ptr %arrayidx15, align 2
   %cmp17 = icmp eq i16 %l, 0
   br i1 %cmp17, label %if.then, label %if.end
 
 if.then:
-  %.pre = load i16, i16* %arrayidx15, align 2
+  %.pre = load i16, ptr %arrayidx15, align 2
   br label %if.end
 
 if.end:
   %p = phi i16 [ %.pre, %if.then ], [ %l, %for.body ]
   %conv19 = trunc i16 %p to i8
   %sub = add i8 %conv19, -1
-  store i8 %sub, i8* undef, align 1
+  store i8 %sub, ptr undef, align 1
   br label %for.body
 }
index 121e0873efea6f6f8e76ada92a5e81474a44da96..df5e1742109145e01e3d78e8e97cdd474d6389a5 100644 (file)
@@ -155,54 +155,54 @@ Exit:           ; preds = %Loop
   ret i32 0
 }
 
-define i32* @test8({ i32, i32 } *%A, i1 %b) {
+define ptr @test8(ptr %A, i1 %b) {
 ; CHECK-LABEL: @test8(
 ; CHECK-NEXT:  BB0:
 ; CHECK-NEXT:    br i1 [[B:%.*]], label [[BB1:%.*]], label [[BB2:%.*]]
 ; CHECK:       BB1:
 ; CHECK-NEXT:    br label [[BB2]]
 ; CHECK:       BB2:
-; CHECK-NEXT:    [[B:%.*]] = getelementptr { i32, i32 }, { i32, i32 }* [[A:%.*]], i64 0, i32 1
-; CHECK-NEXT:    ret i32* [[B]]
+; CHECK-NEXT:    [[B:%.*]] = getelementptr { i32, i32 }, ptr [[A:%.*]], i64 0, i32 1
+; CHECK-NEXT:    ret ptr [[B]]
 ;
 BB0:
-  %X = getelementptr inbounds { i32, i32 }, { i32, i32 } *%A, i32 0, i32 1
+  %X = getelementptr inbounds { i32, i32 }, ptr %A, i32 0, i32 1
   br i1 %b, label %BB1, label %BB2
 
 BB1:
-  %Y = getelementptr { i32, i32 }, { i32, i32 } *%A, i32 0, i32 1
+  %Y = getelementptr { i32, i32 }, ptr %A, i32 0, i32 1
   br label %BB2
 
 BB2:
   ;; Suck GEPs into phi
-  %B = phi i32* [ %X, %BB0 ], [ %Y, %BB1 ]
-  ret i32* %B
+  %B = phi ptr [ %X, %BB0 ], [ %Y, %BB1 ]
+  ret ptr %B
 }
 
-define i32 @test9(i32* %A, i32* %B) {
+define i32 @test9(ptr %A, ptr %B) {
 ; CHECK-LABEL: @test9(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[C:%.*]] = icmp eq i32* [[A:%.*]], null
+; CHECK-NEXT:    [[C:%.*]] = icmp eq ptr [[A:%.*]], null
 ; CHECK-NEXT:    br i1 [[C]], label [[BB1:%.*]], label [[BB:%.*]]
 ; CHECK:       bb:
 ; CHECK-NEXT:    br label [[BB2:%.*]]
 ; CHECK:       bb1:
 ; CHECK-NEXT:    br label [[BB2]]
 ; CHECK:       bb2:
-; CHECK-NEXT:    [[E_IN:%.*]] = phi i32* [ [[B:%.*]], [[BB]] ], [ [[A]], [[BB1]] ]
-; CHECK-NEXT:    [[E:%.*]] = load i32, i32* [[E_IN]], align 1
+; CHECK-NEXT:    [[E_IN:%.*]] = phi ptr [ [[B:%.*]], [[BB]] ], [ [[A]], [[BB1]] ]
+; CHECK-NEXT:    [[E:%.*]] = load i32, ptr [[E_IN]], align 1
 ; CHECK-NEXT:    ret i32 [[E]]
 ;
 entry:
-  %c = icmp eq i32* %A, null
+  %c = icmp eq ptr %A, null
   br i1 %c, label %bb1, label %bb
 
 bb:
-  %C = load i32, i32* %B, align 1
+  %C = load i32, ptr %B, align 1
   br label %bb2
 
 bb1:
-  %D = load i32, i32* %A, align 1
+  %D = load i32, ptr %A, align 1
   br label %bb2
 
 bb2:
@@ -211,30 +211,30 @@ bb2:
 
 }
 
-define i32 @test10(i32* %A, i32* %B) {
+define i32 @test10(ptr %A, ptr %B) {
 ; CHECK-LABEL: @test10(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[C:%.*]] = icmp eq i32* [[A:%.*]], null
+; CHECK-NEXT:    [[C:%.*]] = icmp eq ptr [[A:%.*]], null
 ; CHECK-NEXT:    br i1 [[C]], label [[BB1:%.*]], label [[BB:%.*]]
 ; CHECK:       bb:
 ; CHECK-NEXT:    br label [[BB2:%.*]]
 ; CHECK:       bb1:
 ; CHECK-NEXT:    br label [[BB2]]
 ; CHECK:       bb2:
-; CHECK-NEXT:    [[E_IN:%.*]] = phi i32* [ [[B:%.*]], [[BB]] ], [ [[A]], [[BB1]] ]
-; CHECK-NEXT:    [[E:%.*]] = load i32, i32* [[E_IN]], align 16
+; CHECK-NEXT:    [[E_IN:%.*]] = phi ptr [ [[B:%.*]], [[BB]] ], [ [[A]], [[BB1]] ]
+; CHECK-NEXT:    [[E:%.*]] = load i32, ptr [[E_IN]], align 16
 ; CHECK-NEXT:    ret i32 [[E]]
 ;
 entry:
-  %c = icmp eq i32* %A, null
+  %c = icmp eq ptr %A, null
   br i1 %c, label %bb1, label %bb
 
 bb:
-  %C = load i32, i32* %B, align 16
+  %C = load i32, ptr %B, align 16
   br label %bb2
 
 bb1:
-  %D = load i32, i32* %A, align 32
+  %D = load i32, ptr %A, align 32
   br label %bb2
 
 bb2:
@@ -263,7 +263,7 @@ define i1 @test11() {
 ;
 entry:
   %a = alloca i32
-  %i = ptrtoint i32* %a to i64
+  %i = ptrtoint ptr %a to i64
   %b = call i1 @test11a()
   br i1 %b, label %one, label %two
 
@@ -281,14 +281,14 @@ end:
   %f = phi i64 [ %x, %one], [%y, %two]
   ; Change the %f to %i, and the optimizer suddenly becomes a lot smarter
   ; even though %f must equal %i at this point
-  %g = inttoptr i64 %f to i32*
-  store i32 10, i32* %g
+  %g = inttoptr i64 %f to ptr
+  store i32 10, ptr %g
   %z = call i1 @test11a()
   ret i1 %z
 }
 
 
-define i64 @test12(i1 %cond, i8* %Ptr, i64 %Val) {
+define i64 @test12(i1 %cond, ptr %Ptr, i64 %Val) {
 ; CHECK-LABEL: @test12(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[END:%.*]], label [[TWO:%.*]]
@@ -296,12 +296,12 @@ define i64 @test12(i1 %cond, i8* %Ptr, i64 %Val) {
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
 ; CHECK-NEXT:    [[T869_0_OFF64:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[VAL:%.*]], [[TWO]] ]
-; CHECK-NEXT:    [[T41:%.*]] = ptrtoint i8* [[PTR:%.*]] to i64
+; CHECK-NEXT:    [[T41:%.*]] = ptrtoint ptr [[PTR:%.*]] to i64
 ; CHECK-NEXT:    [[T2:%.*]] = add i64 [[T869_0_OFF64]], [[T41]]
 ; CHECK-NEXT:    ret i64 [[T2]]
 ;
 entry:
-  %t41 = ptrtoint i8* %Ptr to i64
+  %t41 = ptrtoint ptr %Ptr to i64
   %t42 = zext i64 %t41 to i128
   br i1 %cond, label %end, label %two
 
@@ -455,68 +455,68 @@ end:
 }
 
 ; PR6512 - Shouldn't merge loads from different addr spaces.
-define i32 @test16(i32 addrspace(1)* %pointer1, i32 %flag, i32* %pointer2)
+define i32 @test16(ptr addrspace(1) %pointer1, i32 %flag, ptr %pointer2)
 ; CHECK-LABEL: @test16(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[RETVAL:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    [[POINTER1_ADDR:%.*]] = alloca i32 addrspace(1)*, align 8
-; CHECK-NEXT:    [[POINTER2_ADDR:%.*]] = alloca i32*, align 8
-; CHECK-NEXT:    store i32 addrspace(1)* [[POINTER1:%.*]], i32 addrspace(1)** [[POINTER1_ADDR]], align 8
-; CHECK-NEXT:    store i32* [[POINTER2:%.*]], i32** [[POINTER2_ADDR]], align 8
+; CHECK-NEXT:    [[POINTER1_ADDR:%.*]] = alloca ptr addrspace(1), align 8
+; CHECK-NEXT:    [[POINTER2_ADDR:%.*]] = alloca ptr, align 8
+; CHECK-NEXT:    store ptr addrspace(1) [[POINTER1:%.*]], ptr [[POINTER1_ADDR]], align 8
+; CHECK-NEXT:    store ptr [[POINTER2:%.*]], ptr [[POINTER2_ADDR]], align 8
 ; CHECK-NEXT:    [[TOBOOL_NOT:%.*]] = icmp eq i32 [[FLAG:%.*]], 0
 ; CHECK-NEXT:    br i1 [[TOBOOL_NOT]], label [[IF_ELSE:%.*]], label [[IF_THEN:%.*]]
 ; CHECK:       return:
-; CHECK-NEXT:    [[T7:%.*]] = load i32, i32* [[RETVAL]], align 4
+; CHECK-NEXT:    [[T7:%.*]] = load i32, ptr [[RETVAL]], align 4
 ; CHECK-NEXT:    ret i32 [[T7]]
 ; CHECK:       if.end:
 ; CHECK-NEXT:    [[STOREMERGE:%.*]] = phi i32 [ [[T5:%.*]], [[IF_ELSE]] ], [ [[T2:%.*]], [[IF_THEN]] ]
-; CHECK-NEXT:    store i32 [[STOREMERGE]], i32* [[RETVAL]], align 4
+; CHECK-NEXT:    store i32 [[STOREMERGE]], ptr [[RETVAL]], align 4
 ; CHECK-NEXT:    br label [[RETURN:%.*]]
 ; CHECK:       if.then:
-; CHECK-NEXT:    [[T1:%.*]] = load i32 addrspace(1)*, i32 addrspace(1)** [[POINTER1_ADDR]], align 8
-; CHECK-NEXT:    [[T2]] = load i32, i32 addrspace(1)* [[T1]], align 4
+; CHECK-NEXT:    [[T1:%.*]] = load ptr addrspace(1), ptr [[POINTER1_ADDR]], align 8
+; CHECK-NEXT:    [[T2]] = load i32, ptr addrspace(1) [[T1]], align 4
 ; CHECK-NEXT:    br label [[IF_END:%.*]]
 ; CHECK:       if.else:
-; CHECK-NEXT:    [[T3:%.*]] = load i32*, i32** [[POINTER2_ADDR]], align 8
-; CHECK-NEXT:    [[T5]] = load i32, i32* [[T3]], align 4
+; CHECK-NEXT:    [[T3:%.*]] = load ptr, ptr [[POINTER2_ADDR]], align 8
+; CHECK-NEXT:    [[T5]] = load i32, ptr [[T3]], align 4
 ; CHECK-NEXT:    br label [[IF_END]]
 ;
 nounwind {
 entry:
-  %retval = alloca i32, align 4                   ; <i32*> [#uses=2]
-  %pointer1.addr = alloca i32 addrspace(1)*, align 4 ; <i32 addrspace(1)**>
-  %flag.addr = alloca i32, align 4                ; <i32*> [#uses=2]
-  %pointer2.addr = alloca i32*, align 4           ; <i32**> [#uses=2]
-  %res = alloca i32, align 4                      ; <i32*> [#uses=4]
-  store i32 addrspace(1)* %pointer1, i32 addrspace(1)** %pointer1.addr
-  store i32 %flag, i32* %flag.addr
-  store i32* %pointer2, i32** %pointer2.addr
-  store i32 10, i32* %res
-  %t = load i32, i32* %flag.addr                     ; <i32> [#uses=1]
+  %retval = alloca i32, align 4                   ; <ptr> [#uses=2]
+  %pointer1.addr = alloca ptr addrspace(1), align 4 ; <ptr>
+  %flag.addr = alloca i32, align 4                ; <ptr> [#uses=2]
+  %pointer2.addr = alloca ptr, align 4           ; <ptr> [#uses=2]
+  %res = alloca i32, align 4                      ; <ptr> [#uses=4]
+  store ptr addrspace(1) %pointer1, ptr %pointer1.addr
+  store i32 %flag, ptr %flag.addr
+  store ptr %pointer2, ptr %pointer2.addr
+  store i32 10, ptr %res
+  %t = load i32, ptr %flag.addr                     ; <i32> [#uses=1]
   %tobool = icmp ne i32 %t, 0                   ; <i1> [#uses=1]
   br i1 %tobool, label %if.then, label %if.else
 
 return:                                           ; preds = %if.end
-  %t7 = load i32, i32* %retval                       ; <i32> [#uses=1]
+  %t7 = load i32, ptr %retval                       ; <i32> [#uses=1]
   ret i32 %t7
 
 if.end:                                           ; preds = %if.else, %if.then
-  %t6 = load i32, i32* %res                          ; <i32> [#uses=1]
-  store i32 %t6, i32* %retval
+  %t6 = load i32, ptr %res                          ; <i32> [#uses=1]
+  store i32 %t6, ptr %retval
   br label %return
 
 if.then:                                          ; preds = %entry
-  %t1 = load i32 addrspace(1)*, i32 addrspace(1)** %pointer1.addr  ; <i32 addrspace(1)*>
-  %arrayidx = getelementptr i32, i32 addrspace(1)* %t1, i32 0 ; <i32 addrspace(1)*> [#uses=1]
-  %t2 = load i32, i32 addrspace(1)* %arrayidx        ; <i32> [#uses=1]
-  store i32 %t2, i32* %res
+  %t1 = load ptr addrspace(1), ptr %pointer1.addr  ; <ptr addrspace(1)>
+  %arrayidx = getelementptr i32, ptr addrspace(1) %t1, i32 0 ; <ptr addrspace(1)> [#uses=1]
+  %t2 = load i32, ptr addrspace(1) %arrayidx        ; <i32> [#uses=1]
+  store i32 %t2, ptr %res
   br label %if.end
 
 if.else:                                          ; preds = %entry
-  %t3 = load i32*, i32** %pointer2.addr               ; <i32*> [#uses=1]
-  %arrayidx4 = getelementptr i32, i32* %t3, i32 0    ; <i32*> [#uses=1]
-  %t5 = load i32, i32* %arrayidx4                    ; <i32> [#uses=1]
-  store i32 %t5, i32* %res
+  %t3 = load ptr, ptr %pointer2.addr               ; <ptr> [#uses=1]
+  %arrayidx4 = getelementptr i32, ptr %t3, i32 0    ; <ptr> [#uses=1]
+  %t5 = load i32, ptr %arrayidx4                    ; <i32> [#uses=1]
+  store i32 %t5, ptr %res
   br label %if.end
 }
 
@@ -548,24 +548,24 @@ bb2:        ; preds = %bb1, %entry
 }
 
 ; Atomic and non-atomic loads should not be combined.
-define i32 @PR51435(i32* %ptr, i32* %atomic_ptr, i1 %c) {
+define i32 @PR51435(ptr %ptr, ptr %atomic_ptr, i1 %c) {
 ; CHECK-LABEL: @PR51435(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[X:%.*]] = load i32, i32* [[PTR:%.*]], align 4
+; CHECK-NEXT:    [[X:%.*]] = load i32, ptr [[PTR:%.*]], align 4
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[IF:%.*]], label [[END:%.*]]
 ; CHECK:       if:
-; CHECK-NEXT:    [[Y:%.*]] = load atomic i32, i32* [[ATOMIC_PTR:%.*]] acquire, align 4
+; CHECK-NEXT:    [[Y:%.*]] = load atomic i32, ptr [[ATOMIC_PTR:%.*]] acquire, align 4
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
 ; CHECK-NEXT:    [[COND:%.*]] = phi i32 [ [[X]], [[ENTRY:%.*]] ], [ [[Y]], [[IF]] ]
 ; CHECK-NEXT:    ret i32 [[COND]]
 ;
 entry:
-  %x = load i32, i32* %ptr, align 4
+  %x = load i32, ptr %ptr, align 4
   br i1 %c, label %if, label %end
 
 if:
-  %y = load atomic i32, i32* %atomic_ptr acquire, align 4
+  %y = load atomic i32, ptr %atomic_ptr acquire, align 4
   br label %end
 
 end:
@@ -591,8 +591,8 @@ true:
 false:
   br label %ret
 ret:
-  %ptr = phi i32* [ %zero, %true ] , [ %one, %false ]
-  %isnull = icmp eq i32* %ptr, null
+  %ptr = phi ptr [ %zero, %true ] , [ %one, %false ]
+  %isnull = icmp eq ptr %ptr, null
   ret i1 %isnull
 }
 
@@ -636,8 +636,8 @@ true:
 false:
   br label %ret
 ret:
-  %p = phi i32* [ %a, %true ], [ %b, %false ]
-  %r = icmp eq i32* %p, %c
+  %p = phi ptr [ %a, %true ], [ %b, %false ]
+  %r = icmp eq ptr %p, %c
   ret i1 %r
 }
 
@@ -662,8 +662,8 @@ true:
 false:
   br label %loop
 loop:
-  %p = phi i32* [ %a, %true ], [ %b, %false ], [ %p, %loop ]
-  %r = icmp eq i32* %p, %c
+  %p = phi ptr [ %a, %true ], [ %b, %false ], [ %p, %loop ]
+  %r = icmp eq ptr %p, %c
   br i1 %c2, label %ret, label %loop
 ret:
   ret i1 %r
@@ -694,14 +694,14 @@ ret:
   ret void
 }
 
-define i32 @test23(i32 %A, i1 %pb, i32 * %P) {
+define i32 @test23(i32 %A, i1 %pb, ptr %P) {
 ; CHECK-LABEL: @test23(
 ; CHECK-NEXT:  BB0:
 ; CHECK-NEXT:    [[PHI_BO:%.*]] = add i32 [[A:%.*]], 19
 ; CHECK-NEXT:    br label [[LOOP:%.*]]
 ; CHECK:       Loop:
 ; CHECK-NEXT:    [[B:%.*]] = phi i32 [ [[PHI_BO]], [[BB0:%.*]] ], [ 61, [[LOOP]] ]
-; CHECK-NEXT:    store i32 [[B]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[B]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    br i1 [[PB:%.*]], label [[LOOP]], label [[EXIT:%.*]]
 ; CHECK:       Exit:
 ; CHECK-NEXT:    ret i32 [[B]]
@@ -713,7 +713,7 @@ Loop:           ; preds = %Loop, %BB0
   ; PHI has same value always.
   %B = phi i32 [ %A, %BB0 ], [ 42, %Loop ]
   %D = add i32 %B, 19
-  store i32 %D, i32* %P
+  store i32 %D, ptr %P
   br i1 %pb, label %Loop, label %Exit
 
 Exit:           ; preds = %Loop
@@ -764,7 +764,7 @@ define i1 @test25() {
 ;
 entry:
   %a = alloca i32
-  %i = ptrtoint i32* %a to i64
+  %i = ptrtoint ptr %a to i64
   %b = call i1 @test25a()
   br i1 %b, label %one, label %two
 
@@ -782,8 +782,8 @@ end:
   %f = phi i64 [ %x, %one], [%y, %two]
   ; Change the %f to %i, and the optimizer suddenly becomes a lot smarter
   ; even though %f must equal %i at this point
-  %g = inttoptr i64 %f to i32*
-  store i32 10, i32* %g
+  %g = inttoptr i64 %f to ptr
+  store i32 10, ptr %g
   %z = call i1 @test25a()
   ret i1 %z
 }
@@ -816,7 +816,7 @@ define i1 @test26(i32 %n) {
 ;
 entry:
   %a = alloca i32
-  %i = ptrtoint i32* %a to i64
+  %i = ptrtoint ptr %a to i64
   %b = call i1 @test26a()
   br label %one
 
@@ -845,8 +845,8 @@ end:
   %f = phi i64 [ %x, %one], [%y, %two]
   ; Change the %f to %i, and the optimizer suddenly becomes a lot smarter
   ; even though %f must equal %i at this point
-  %g = inttoptr i64 %f to i32*
-  store i32 10, i32* %g
+  %g = inttoptr i64 %f to ptr
+  store i32 10, ptr %g
   %z = call i1 @test26a()
   ret i1 %z
 }
@@ -1082,7 +1082,7 @@ if.end:                                           ; preds = %if.else, %if.then
   ret i1 %cmp1
 }
 
-define i1 @phi_allnonzerononconstant(i1 %c, i32 %a, i32* nonnull %b1, i32* nonnull %b2) {
+define i1 @phi_allnonzerononconstant(i1 %c, i32 %a, ptr nonnull %b1, ptr nonnull %b2) {
 ; CHECK-LABEL: @phi_allnonzerononconstant(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
@@ -1106,14 +1106,14 @@ if.else:                                          ; preds = %entry
   br label %if.end
 
 if.end:                                           ; preds = %if.else, %if.then
-  %x.0 = phi i32* [ %b1, %if.then ], [ %b2, %if.else ]
-  %cmp1 = icmp eq i32* %x.0, null
+  %x.0 = phi ptr [ %b1, %if.then ], [ %b2, %if.else ]
+  %cmp1 = icmp eq ptr %x.0, null
   ret i1 %cmp1
 }
 
 declare void @dummy()
 
-define i1 @phi_knownnonzero_eq(i32 %n, i32 %s, i32* nocapture readonly %P) {
+define i1 @phi_knownnonzero_eq(i32 %n, i32 %s, ptr nocapture readonly %P) {
 ; CHECK-LABEL: @phi_knownnonzero_eq(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp slt i32 [[N:%.*]], [[S:%.*]]
@@ -1130,7 +1130,7 @@ entry:
   br i1 %tobool, label %if.end, label %if.then
 
 if.then:                                          ; preds = %entry
-  %0 = load i32, i32* %P
+  %0 = load i32, ptr %P
   %cmp = icmp eq i32 %n, %0
   %1 = select i1 %cmp, i32 1, i32 2
   br label %if.end
@@ -1141,7 +1141,7 @@ if.end:                                           ; preds = %entry, %if.then
   ret i1  %cmp1
 }
 
-define i1 @phi_knownnonzero_ne(i32 %n, i32 %s, i32* nocapture readonly %P) {
+define i1 @phi_knownnonzero_ne(i32 %n, i32 %s, ptr nocapture readonly %P) {
 ; CHECK-LABEL: @phi_knownnonzero_ne(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp slt i32 [[N:%.*]], [[S:%.*]]
@@ -1158,7 +1158,7 @@ entry:
   br i1 %tobool, label %if.end, label %if.then
 
 if.then:                                          ; preds = %entry
-  %0 = load i32, i32* %P
+  %0 = load i32, ptr %P
   %cmp = icmp eq i32 %n, %0
   %1 = select i1 %cmp, i32 1, i32 2
   br label %if.end
@@ -1169,7 +1169,7 @@ if.end:                                           ; preds = %entry, %if.then
   ret i1  %cmp1
 }
 
-define i1 @phi_knownnonzero_eq_2(i32 %n, i32 %s, i32* nocapture readonly %P) {
+define i1 @phi_knownnonzero_eq_2(i32 %n, i32 %s, ptr nocapture readonly %P) {
 ; CHECK-LABEL: @phi_knownnonzero_eq_2(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp slt i32 [[N:%.*]], [[S:%.*]]
@@ -1192,7 +1192,7 @@ if.then:
   br i1 %tobool2, label %if.else, label %if.end
 
 if.else:                                          ; preds = %entry
-  %0 = load i32, i32* %P
+  %0 = load i32, ptr %P
   %cmp = icmp eq i32 %n, %0
   %1 = select i1 %cmp, i32 1, i32 2
   br label %if.end
@@ -1203,7 +1203,7 @@ if.end:                                           ; preds = %entry, %if.then
   ret i1  %cmp1
 }
 
-define i1 @phi_knownnonzero_ne_2(i32 %n, i32 %s, i32* nocapture readonly %P) {
+define i1 @phi_knownnonzero_ne_2(i32 %n, i32 %s, ptr nocapture readonly %P) {
 ; CHECK-LABEL: @phi_knownnonzero_ne_2(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp slt i32 [[N:%.*]], [[S:%.*]]
@@ -1226,7 +1226,7 @@ if.then:
   br i1 %tobool2, label %if.else, label %if.end
 
 if.else:                                          ; preds = %entry
-  %0 = load i32, i32* %P
+  %0 = load i32, ptr %P
   %cmp = icmp eq i32 %n, %0
   %1 = select i1 %cmp, i32 1, i32 2
   br label %if.end
@@ -1269,46 +1269,46 @@ g.exit:
   br label %for.cond
 
 for.end:
-  store double %p, double* undef
+  store double %p, ptr undef
   ret void
 }
 
-define i1 @pr57488_icmp_of_phi(i64* %ptr.base, i64 %len) {
+define i1 @pr57488_icmp_of_phi(ptr %ptr.base, i64 %len) {
 ; CHECK-LABEL: @pr57488_icmp_of_phi(
 ; CHECK-NEXT:  start:
-; CHECK-NEXT:    [[END:%.*]] = getelementptr inbounds i64, i64* [[PTR_BASE:%.*]], i64 [[LEN:%.*]]
+; CHECK-NEXT:    [[END:%.*]] = getelementptr inbounds i64, ptr [[PTR_BASE:%.*]], i64 [[LEN:%.*]]
 ; CHECK-NEXT:    [[LEN_ZERO:%.*]] = icmp eq i64 [[LEN]], 0
 ; CHECK-NEXT:    br i1 [[LEN_ZERO]], label [[EXIT:%.*]], label [[LOOP:%.*]]
 ; CHECK:       loop:
 ; CHECK-NEXT:    [[ACCUM:%.*]] = phi i8 [ [[ACCUM_NEXT:%.*]], [[LOOP]] ], [ 1, [[START:%.*]] ]
-; CHECK-NEXT:    [[PTR:%.*]] = phi i64* [ [[PTR_NEXT:%.*]], [[LOOP]] ], [ [[PTR_BASE]], [[START]] ]
-; CHECK-NEXT:    [[PTR_NEXT]] = getelementptr inbounds i64, i64* [[PTR]], i64 1
+; CHECK-NEXT:    [[PTR:%.*]] = phi ptr [ [[PTR_NEXT:%.*]], [[LOOP]] ], [ [[PTR_BASE]], [[START]] ]
+; CHECK-NEXT:    [[PTR_NEXT]] = getelementptr inbounds i64, ptr [[PTR]], i64 1
 ; CHECK-NEXT:    [[ACCUM_BOOL:%.*]] = icmp ne i8 [[ACCUM]], 0
-; CHECK-NEXT:    [[VAL:%.*]] = load i64, i64* [[PTR]], align 8
+; CHECK-NEXT:    [[VAL:%.*]] = load i64, ptr [[PTR]], align 8
 ; CHECK-NEXT:    [[VAL_ZERO:%.*]] = icmp eq i64 [[VAL]], 0
 ; CHECK-NEXT:    [[AND:%.*]] = and i1 [[ACCUM_BOOL]], [[VAL_ZERO]]
 ; CHECK-NEXT:    [[ACCUM_NEXT]] = zext i1 [[AND]] to i8
-; CHECK-NEXT:    [[EXIT_COND:%.*]] = icmp eq i64* [[PTR_NEXT]], [[END]]
+; CHECK-NEXT:    [[EXIT_COND:%.*]] = icmp eq ptr [[PTR_NEXT]], [[END]]
 ; CHECK-NEXT:    br i1 [[EXIT_COND]], label [[EXIT]], label [[LOOP]]
 ; CHECK:       exit:
 ; CHECK-NEXT:    [[RES:%.*]] = phi i1 [ true, [[START]] ], [ [[AND]], [[LOOP]] ]
 ; CHECK-NEXT:    ret i1 [[RES]]
 ;
 start:
-  %end = getelementptr inbounds i64, i64* %ptr.base, i64 %len
+  %end = getelementptr inbounds i64, ptr %ptr.base, i64 %len
   %len.zero = icmp eq i64 %len, 0
   br i1 %len.zero, label %exit, label %loop
 
 loop:
   %accum = phi i8 [ %accum.next, %loop ], [ 1, %start ]
-  %ptr = phi i64* [ %ptr.next, %loop ], [ %ptr.base, %start ]
-  %ptr.next = getelementptr inbounds i64, i64* %ptr, i64 1
+  %ptr = phi ptr [ %ptr.next, %loop ], [ %ptr.base, %start ]
+  %ptr.next = getelementptr inbounds i64, ptr %ptr, i64 1
   %accum.bool = icmp ne i8 %accum, 0
-  %val = load i64, i64* %ptr, align 8
+  %val = load i64, ptr %ptr, align 8
   %val.zero = icmp eq i64 %val, 0
   %and = and i1 %accum.bool, %val.zero
   %accum.next = zext i1 %and to i8
-  %exit.cond = icmp eq i64* %ptr.next, %end
+  %exit.cond = icmp eq ptr %ptr.next, %end
   br i1 %exit.cond, label %exit, label %loop
 
 exit:
index 1b347dd1ff6a811af47a0d465f9b8943c7c57575..685b9434cb5b30bccc193aab9855fac796a00f57 100644 (file)
@@ -168,33 +168,33 @@ define fp128 @pow_exp10l(fp128 %x, fp128 %y) {
   ret fp128 %pow
 }
 
-define float @reuse_fast(float %x, float %y, float * %p) {
+define float @reuse_fast(float %x, float %y, ptr %p) {
 ; CHECK-LABEL: @reuse_fast(
 ; CHECK-NEXT:    [[EXP:%.*]] = call fast float @expf(float [[X:%.*]])
 ; CHECK-NEXT:    [[POW:%.*]] = call fast float @powf(float [[EXP]], float [[Y:%.*]])
-; CHECK-NEXT:    store float [[EXP]], float* [[P:%.*]], align 4
+; CHECK-NEXT:    store float [[EXP]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret float [[POW]]
 ;
   %exp = call fast float @expf(float %x)
   %pow = call fast float @powf(float %exp, float %y)
-  store float %exp, float *%p, align 4
+  store float %exp, ptr %p, align 4
   ret float %pow
 }
 
-define fp128 @reuse_libcall(fp128 %x, fp128 %y, fp128 * %p) {
+define fp128 @reuse_libcall(fp128 %x, fp128 %y, ptr %p) {
 ; CHECK-LABEL: @reuse_libcall(
 ; CHECK-NEXT:    [[EXP:%.*]] = call fp128 @expl(fp128 [[X:%.*]])
 ; CHECK-NEXT:    [[POW:%.*]] = call fp128 @powl(fp128 [[EXP]], fp128 [[Y:%.*]])
-; CHECK-NEXT:    store fp128 [[EXP]], fp128* [[P:%.*]], align 16
+; CHECK-NEXT:    store fp128 [[EXP]], ptr [[P:%.*]], align 16
 ; CHECK-NEXT:    ret fp128 [[POW]]
 ;
   %exp = call fp128 @expl(fp128 %x)
   %pow = call fp128 @powl(fp128 %exp, fp128 %y)
-  store fp128 %exp, fp128 *%p, align 16
+  store fp128 %exp, ptr %p, align 16
   ret fp128 %pow
 }
 
-define double @function_pointer(double ()* %fptr, double %p1) {
+define double @function_pointer(ptr %fptr, double %p1) {
 ; CHECK-LABEL: @function_pointer(
 ; CHECK-NEXT:    [[CALL1:%.*]] = call fast double [[FPTR:%.*]]()
 ; CHECK-NEXT:    [[POW:%.*]] = call fast double @llvm.pow.f64(double [[CALL1]], double [[P1:%.*]])
index 2a2b9a5b1f69bbd0efacb19d147266739a0b4e0e..1041bdc67b63a1792b1d824f08732612af55280f 100644 (file)
@@ -1,14 +1,14 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-define zeroext i1 @_Z3fooPb(i8* nocapture %x) {
+define zeroext i1 @_Z3fooPb(ptr nocapture %x) {
 entry:
-  %a = load i8, i8* %x, align 1, !range !0
+  %a = load i8, ptr %x, align 1, !range !0
   %b = and i8 %a, 1
   %tobool = icmp ne i8 %b, 0
   ret i1 %tobool
 }
 
-; CHECK: %a = load i8, i8* %x, align 1, !range !0
+; CHECK: %a = load i8, ptr %x, align 1, !range !0
 ; CHECK-NEXT: %tobool = icmp ne i8 %a, 0
 ; CHECK-NEXT: ret i1 %tobool
 
index 736e9abd76a4e0216754a5cfde15bf60c06c1bbf..0245209435f9191a9402bd2bcbbf468f6c4812ef 100644 (file)
@@ -5,7 +5,7 @@
 define i1 @f(i8 zeroext %p) #1 {
 ; CHECK-NOT: ret i1 false
   %1 = zext i8 %p to i32
-  %2 = load i32, i32* @d, align 4
+  %2 = load i32, ptr @d, align 4
   %3 = or i32 %2, -2
   %4 = add nsw i32 %3, %1
   %5 = icmp ugt i32 %1, %4
index 7ed79dd8ae117d5b939d40af6cb933f53dd8dd57..d6574d704ffac6f9e2b5ea6db544fc510b573147 100644 (file)
 define void @fn3() {
 ; CHECK: @fn3
 bb:
-  %tmp = load i32, i32* @c, align 4
+  %tmp = load i32, ptr @c, align 4
   %tmp1 = icmp eq i32 %tmp, 0
   br i1 %tmp1, label %bb2, label %bb6
 
 bb2:                                              ; preds = %bb
-  %tmp3 = load i32, i32* @b, align 4
+  %tmp3 = load i32, ptr @b, align 4
   %tmp.i = add nsw i32 255, %tmp3
   %tmp5 = icmp ugt i32 %tmp.i, 254
   br label %bb6
@@ -24,10 +24,10 @@ bb6:                                              ; preds = %bb, %bb2
   %tmp7 = phi i1 [ true, %bb ], [ %tmp5, %bb2 ]
   %tmp8 = zext i1 %tmp7 to i32
   %tmp10 = icmp eq i32 %tmp8, 0
-  %tmp12 = load i16, i16* @a, align 2
+  %tmp12 = load i16, ptr @a, align 2
   %tmp14 = icmp ne i16 %tmp12, 0
   %tmp16 = select i1 %tmp10, i1 false, i1 %tmp14
   %tmp17 = zext i1 %tmp16 to i32
-  store i32 %tmp17, i32* @d, align 4
+  store i32 %tmp17, ptr @d, align 4
   ret void
 }
index a221fdf659dc7721bb67b14ee1c5130dd929ee87..f2f3edf97c1cb765f230ec720d375f51c7eb8378 100644 (file)
@@ -3,12 +3,12 @@
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
-define i1 @f(i8* %a, i8 %b) {
+define i1 @f(ptr %a, i8 %b) {
 ; CHECK-LABEL: @f(
 entry:
   %or = or i8 %b, -117
   %sub = add i8 %or, -1
-  store i8 %sub, i8* %a, align 1
+  store i8 %sub, ptr %a, align 1
   %cmp = icmp ugt i8 %or, %sub
   ret i1 %cmp
 ; CHECK: ret i1 true
index 661dbf12dfac5644752e6d432deee7b18c34c694..013c7397727992cf0eb53d86360bff2ed4f2bb12 100644 (file)
@@ -16,10 +16,10 @@ define void @_Z3fooi(i32 signext %n) {
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[I_0]], [[N:%.*]]
 ; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
 ; CHECK:       for.body:
-; CHECK-NEXT:    [[TMP2:%.*]] = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd, i64 0, i32 0, i32 0), align 4
-; CHECK-NEXT:    [[TMP3:%.*]] = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd, i64 0, i32 0, i32 1), align 4
-; CHECK-NEXT:    [[TMP4:%.*]] = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd2, i64 0, i32 0, i32 0), align 4
-; CHECK-NEXT:    [[TMP5:%.*]] = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd2, i64 0, i32 0, i32 1), align 4
+; CHECK-NEXT:    [[TMP2:%.*]] = load float, ptr @dd, align 4
+; CHECK-NEXT:    [[TMP3:%.*]] = load float, ptr getelementptr inbounds (%"struct.std::complex", ptr @dd, i64 0, i32 0, i32 1), align 4
+; CHECK-NEXT:    [[TMP4:%.*]] = load float, ptr @dd2, align 4
+; CHECK-NEXT:    [[TMP5:%.*]] = load float, ptr getelementptr inbounds (%"struct.std::complex", ptr @dd2, i64 0, i32 0, i32 1), align 4
 ; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[TMP2]], [[TMP4]]
 ; CHECK-NEXT:    [[MUL4_I:%.*]] = fmul float [[TMP3]], [[TMP5]]
 ; CHECK-NEXT:    [[SUB_I:%.*]] = fsub float [[MUL_I]], [[MUL4_I]]
@@ -31,8 +31,8 @@ define void @_Z3fooi(i32 signext %n) {
 ; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_0]], 1
 ; CHECK-NEXT:    br label [[FOR_COND]]
 ; CHECK:       for.end:
-; CHECK-NEXT:    store float [[TMP0]], float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd, i64 0, i32 0, i32 0), align 4
-; CHECK-NEXT:    store float [[TMP1]], float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd, i64 0, i32 0, i32 1), align 4
+; CHECK-NEXT:    store float [[TMP0]], ptr @dd, align 4
+; CHECK-NEXT:    store float [[TMP1]], ptr getelementptr inbounds (%"struct.std::complex", ptr @dd, i64 0, i32 0, i32 1), align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
@@ -46,10 +46,10 @@ for.cond:
   br i1 %cmp, label %for.body, label %for.end
 
 for.body:
-  %0 = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd, i64 0, i32 0, i32 0), align 4
-  %1 = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd, i64 0, i32 0, i32 1), align 4
-  %2 = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd2, i64 0, i32 0, i32 0), align 4
-  %3 = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd2, i64 0, i32 0, i32 1), align 4
+  %0 = load float, ptr @dd, align 4
+  %1 = load float, ptr getelementptr inbounds (%"struct.std::complex", ptr @dd, i64 0, i32 0, i32 1), align 4
+  %2 = load float, ptr @dd2, align 4
+  %3 = load float, ptr getelementptr inbounds (%"struct.std::complex", ptr @dd2, i64 0, i32 0, i32 1), align 4
   %mul.i = fmul float %0, %2
   %mul4.i = fmul float %1, %3
   %sub.i = fsub float %mul.i, %mul4.i
@@ -66,8 +66,8 @@ for.body:
   br label %for.cond
 
 for.end:
-  store i32 %ldd.sroa.0.0, i32* bitcast (%"struct.std::complex"* @dd to i32*), align 4
-  store i32 %ldd.sroa.6.0, i32* bitcast (float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd, i64 0, i32 0, i32 1) to i32*), align 4
+  store i32 %ldd.sroa.0.0, ptr @dd, align 4
+  store i32 %ldd.sroa.6.0, ptr getelementptr inbounds (%"struct.std::complex", ptr @dd, i64 0, i32 0, i32 1), align 4
   ret void
 
 }
@@ -83,10 +83,10 @@ define void @multi_phi(i32 signext %n) {
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[I_0]], [[N:%.*]]
 ; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY:%.*]], label [[FOR_END:%.*]]
 ; CHECK:       for.body:
-; CHECK-NEXT:    [[TMP1:%.*]] = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd, i64 0, i32 0, i32 0), align 4
-; CHECK-NEXT:    [[TMP2:%.*]] = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd, i64 0, i32 0, i32 1), align 4
-; CHECK-NEXT:    [[TMP3:%.*]] = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd2, i64 0, i32 0, i32 0), align 4
-; CHECK-NEXT:    [[TMP4:%.*]] = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd2, i64 0, i32 0, i32 1), align 4
+; CHECK-NEXT:    [[TMP1:%.*]] = load float, ptr @dd, align 4
+; CHECK-NEXT:    [[TMP2:%.*]] = load float, ptr getelementptr inbounds (%"struct.std::complex", ptr @dd, i64 0, i32 0, i32 1), align 4
+; CHECK-NEXT:    [[TMP3:%.*]] = load float, ptr @dd2, align 4
+; CHECK-NEXT:    [[TMP4:%.*]] = load float, ptr getelementptr inbounds (%"struct.std::complex", ptr @dd2, i64 0, i32 0, i32 1), align 4
 ; CHECK-NEXT:    [[MUL_I:%.*]] = fmul float [[TMP1]], [[TMP3]]
 ; CHECK-NEXT:    [[MUL4_I:%.*]] = fmul float [[TMP2]], [[TMP4]]
 ; CHECK-NEXT:    [[SUB_I:%.*]] = fsub float [[MUL_I]], [[MUL4_I]]
@@ -102,7 +102,7 @@ define void @multi_phi(i32 signext %n) {
 ; CHECK-NEXT:    [[TMP6]] = phi float [ [[ADD_I]], [[FOR_BODY]] ], [ [[TMP5]], [[EVEN_BB]] ]
 ; CHECK-NEXT:    br label [[FOR_COND]]
 ; CHECK:       for.end:
-; CHECK-NEXT:    store float [[TMP0]], float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd, i64 0, i32 0, i32 0), align 4
+; CHECK-NEXT:    store float [[TMP0]], ptr @dd, align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
@@ -115,10 +115,10 @@ for.cond:
   br i1 %cmp, label %for.body, label %for.end
 
 for.body:
-  %0 = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd, i64 0, i32 0, i32 0), align 4
-  %1 = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd, i64 0, i32 0, i32 1), align 4
-  %2 = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd2, i64 0, i32 0, i32 0), align 4
-  %3 = load float, float* getelementptr inbounds (%"struct.std::complex", %"struct.std::complex"* @dd2, i64 0, i32 0, i32 1), align 4
+  %0 = load float, ptr @dd, align 4
+  %1 = load float, ptr getelementptr inbounds (%"struct.std::complex", ptr @dd, i64 0, i32 0, i32 1), align 4
+  %2 = load float, ptr @dd2, align 4
+  %3 = load float, ptr getelementptr inbounds (%"struct.std::complex", ptr @dd2, i64 0, i32 0, i32 1), align 4
   %mul.i = fmul float %0, %2
   %mul4.i = fmul float %1, %3
   %sub.i = fsub float %mul.i, %mul4.i
@@ -141,7 +141,7 @@ odd.bb:
   br label %for.cond
 
 for.end:
-  store i32 %ldd.sroa.0.0, i32* bitcast (%"struct.std::complex"* @dd to i32*), align 4
+  store i32 %ldd.sroa.0.0, ptr @dd, align 4
   ret void
 
 }
index 41316e0787d31a49d30a6c554ff8678b6cf362b1..e7677c7ff6bca211c017a34035bbdc35fdfad11d 100644 (file)
@@ -4,13 +4,13 @@
 ; Instcombine should be able to prove that none of the
 ; insertelement's first operand's elements are needed.
 
-define internal void @""(i8*) {
+define internal void @""(ptr) {
 ; <label>:1
-        bitcast i8* %0 to i32*          ; <i32*>:2 [#uses=1]
-        load i32, i32* %2, align 1           ; <i32>:3 [#uses=1]
-        getelementptr i8, i8* %0, i32 4             ; <i8*>:4 [#uses=1]
-        bitcast i8* %4 to i32*          ; <i32*>:5 [#uses=1]
-        load i32, i32* %5, align 1           ; <i32>:6 [#uses=1]
+        bitcast ptr %0 to ptr          ; <ptr>:2 [#uses=1]
+        load i32, ptr %2, align 1           ; <i32>:3 [#uses=1]
+        getelementptr i8, ptr %0, i32 4             ; <ptr>:4 [#uses=1]
+        bitcast ptr %4 to ptr          ; <ptr>:5 [#uses=1]
+        load i32, ptr %5, align 1           ; <i32>:6 [#uses=1]
         br label %7
 
 ; <label>:7             ; preds = %9, %1
@@ -23,9 +23,9 @@ define internal void @""(i8*) {
         sitofp i32 %.0 to float         ; <float>:10 [#uses=1]
         insertelement <4 x float> %.01, float %10, i32 0                ; <<4 x float>>:11 [#uses=1]
         shufflevector <4 x float> %11, <4 x float> poison, <4 x i32> zeroinitializer             ; <<4 x float>>:12 [#uses=2]
-        getelementptr i8, i8* %0, i32 48            ; <i8*>:13 [#uses=1]
-        bitcast i8* %13 to <4 x float>*         ; <<4 x float>*>:14 [#uses=1]
-        store <4 x float> %12, <4 x float>* %14, align 16
+        getelementptr i8, ptr %0, i32 48            ; <ptr>:13 [#uses=1]
+        bitcast ptr %13 to ptr         ; <ptr>:14 [#uses=1]
+        store <4 x float> %12, ptr %14, align 16
         add i32 %.0, 2          ; <i32>:15 [#uses=1]
         br label %7
 
index ccb4fa8f455f1bd4c4245c83ea529f0195806d51..aaef95e258a05298ea64ff0d5b4986b66ff85274 100644 (file)
@@ -4,13 +4,13 @@
 ; Instcombine should be able to prove that none of the
 ; insertelement's first operand's elements are needed.
 
-define internal void @""(i8*) {
+define internal void @""(ptr) {
 ; <label>:1
-        bitcast i8* %0 to i32*          ; <i32*>:2 [#uses=1]
-        load i32, i32* %2, align 1           ; <i32>:3 [#uses=1]
-        getelementptr i8, i8* %0, i32 4             ; <i8*>:4 [#uses=1]
-        bitcast i8* %4 to i32*          ; <i32*>:5 [#uses=1]
-        load i32, i32* %5, align 1           ; <i32>:6 [#uses=1]
+        bitcast ptr %0 to ptr          ; <ptr>:2 [#uses=1]
+        load i32, ptr %2, align 1           ; <i32>:3 [#uses=1]
+        getelementptr i8, ptr %0, i32 4             ; <ptr>:4 [#uses=1]
+        bitcast ptr %4 to ptr          ; <ptr>:5 [#uses=1]
+        load i32, ptr %5, align 1           ; <i32>:6 [#uses=1]
         br label %7
 
 ; <label>:7             ; preds = %9, %1
@@ -23,9 +23,9 @@ define internal void @""(i8*) {
         sitofp i32 %.0 to float         ; <float>:10 [#uses=1]
         insertelement <4 x float> %.01, float %10, i32 0                ; <<4 x float>>:11 [#uses=1]
         shufflevector <4 x float> %11, <4 x float> undef, <4 x i32> zeroinitializer             ; <<4 x float>>:12 [#uses=2]
-        getelementptr i8, i8* %0, i32 48            ; <i8*>:13 [#uses=1]
-        bitcast i8* %13 to <4 x float>*         ; <<4 x float>*>:14 [#uses=1]
-        store <4 x float> %12, <4 x float>* %14, align 16
+        getelementptr i8, ptr %0, i32 48            ; <ptr>:13 [#uses=1]
+        bitcast ptr %13 to ptr         ; <ptr>:14 [#uses=1]
+        store <4 x float> %12, ptr %14, align 16
         add i32 %.0, 2          ; <i32>:15 [#uses=1]
         br label %7
 
index 54e0826bd36bf0e284c7db8613a7b1b1e43b4857..359ef1165d9253e6fd2c51394a6781ef84218a2f 100644 (file)
@@ -2,48 +2,48 @@
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 target triple = "x86_64-pc-windows-msvc"
 
-define i1 @test1(i8* %p) personality i32 (...)* @__CxxFrameHandler3 {
+define i1 @test1(ptr %p) personality ptr @__CxxFrameHandler3 {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[A:%.*]] = getelementptr i8, i8* [[P:%.*]], i64 1
+; CHECK-NEXT:    [[A:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 1
 ; CHECK-NEXT:    invoke void @may_throw()
 ; CHECK-NEXT:    to label [[INVOKE_CONT:%.*]] unwind label [[CATCH_DISPATCH:%.*]]
 ; CHECK:       invoke.cont:
-; CHECK-NEXT:    [[B:%.*]] = getelementptr i8, i8* [[P]], i64 2
+; CHECK-NEXT:    [[B:%.*]] = getelementptr i8, ptr [[P]], i64 2
 ; CHECK-NEXT:    invoke void @may_throw()
 ; CHECK-NEXT:    to label [[EXIT:%.*]] unwind label [[CATCH_DISPATCH]]
 ; CHECK:       catch.dispatch:
-; CHECK-NEXT:    [[C:%.*]] = phi i8* [ [[B]], [[INVOKE_CONT]] ], [ [[A]], [[ENTRY:%.*]] ]
+; CHECK-NEXT:    [[C:%.*]] = phi ptr [ [[B]], [[INVOKE_CONT]] ], [ [[A]], [[ENTRY:%.*]] ]
 ; CHECK-NEXT:    [[TMP1:%.*]] = catchswitch within none [label %catch] unwind to caller
 ; CHECK:       catch:
-; CHECK-NEXT:    [[TMP2:%.*]] = catchpad within [[TMP1]] [i8* null, i32 64, i8* null]
+; CHECK-NEXT:    [[TMP2:%.*]] = catchpad within [[TMP1]] [ptr null, i32 64, ptr null]
 ; CHECK-NEXT:    catchret from [[TMP2]] to label [[EXIT]]
 ; CHECK:       exit:
-; CHECK-NEXT:    [[D:%.*]] = phi i8* [ [[A]], [[INVOKE_CONT]] ], [ [[C]], [[CATCH:%.*]] ]
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8* [[D]], [[A]]
+; CHECK-NEXT:    [[D:%.*]] = phi ptr [ [[A]], [[INVOKE_CONT]] ], [ [[C]], [[CATCH:%.*]] ]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[D]], [[A]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
 entry:
-  %a = getelementptr i8, i8* %p, i64 1
+  %a = getelementptr i8, ptr %p, i64 1
   invoke void @may_throw()
   to label %invoke.cont unwind label %catch.dispatch
 
 invoke.cont:
-  %b = getelementptr inbounds i8, i8* %a, i64 1
+  %b = getelementptr inbounds i8, ptr %a, i64 1
   invoke void @may_throw()
   to label %exit unwind label %catch.dispatch
 
 catch.dispatch:
-  %c = phi i8* [ %b, %invoke.cont ], [ %a, %entry ]
+  %c = phi ptr [ %b, %invoke.cont ], [ %a, %entry ]
   %tmp1 = catchswitch within none [label %catch] unwind to caller
 
 catch:
-  %tmp2 = catchpad within %tmp1 [i8* null, i32 64, i8* null]
+  %tmp2 = catchpad within %tmp1 [ptr null, i32 64, ptr null]
   catchret from %tmp2 to label %exit
 
 exit:
-  %d = phi i8* [ %a, %invoke.cont ], [ %c, %catch ]
-  %cmp = icmp eq i8* %d, %a
+  %d = phi ptr [ %a, %invoke.cont ], [ %c, %catch ]
+  %cmp = icmp eq ptr %d, %a
   ret i1 %cmp
 }
 
index abf779b84989c15e4cd7a6a13c3bf06f2aeca8d8..e67d0b34056bf848feaf8e78ac8f12733046ae35 100644 (file)
@@ -12,8 +12,8 @@ define i32 @__isnan(float %x) alwaysinline nounwind optsize {
 ;
 entry:
   %x.addr = alloca float, align 4
-  store float %x, float* %x.addr, align 4
-  %0 = load float, float* %x.addr, align 4
+  store float %x, ptr %x.addr, align 4
+  %0 = load float, ptr %x.addr, align 4
   %1 = bitcast float %0 to i32
   %shl = shl i32 %1, 1
   %cmp = icmp ugt i32 %shl, -16777216
index 82ec82ca1f0ebc052453f366c3a385a328faa686..d66c762d7b1b026a951320913c4ced13b6d6de50 100644 (file)
@@ -4,18 +4,18 @@
 @i = constant i32 1, align 4
 @f = constant float 0x3FF19999A0000000, align 4
 @cmp = common global i32 0, align 4
-@resf = common global float* null, align 8
-@resi = common global i32* null, align 8
+@resf = common global ptr null, align 8
+@resi = common global ptr null, align 8
 
 define i32 @foo() {
 entry:
   br label %while.cond
 
 while.cond:
-  %res.0 = phi i32* [ null, %entry ], [ @i, %if.then ], [ bitcast (float* @f to i32*), %if.else ]
-  %0 = load i32, i32* @cmp, align 4
+  %res.0 = phi ptr [ null, %entry ], [ @i, %if.then ], [ @f, %if.else ]
+  %0 = load i32, ptr @cmp, align 4
   %shr = ashr i32 %0, 1
-  store i32 %shr, i32* @cmp, align 4
+  store i32 %shr, ptr @cmp, align 4
   %tobool = icmp ne i32 %shr, 0
   br i1 %tobool, label %while.body, label %while.end
 
@@ -31,9 +31,8 @@ if.else:
   br label %while.cond
 
 while.end:
-  %1 = bitcast i32* %res.0 to float*
-  store float* %1, float** @resf, align 8
-  store i32* %res.0, i32** @resi, align 8
+  store ptr %res.0, ptr @resf, align 8
+  store ptr %res.0, ptr @resi, align 8
   ret i32 0
 
 ; CHECK-NOT: bitcast i32
index 609f77a5c45f4cfa2de2c2d0b066795b1795e4a2..dc017ecb6ec1b01b0eb9ed4c9a19e01503b758eb 100644 (file)
@@ -8,17 +8,15 @@
 define void @foo() {
 entry:
   %0 = alloca i8
-  %1 = bitcast i8* %0 to i4*
-  call void @bar(i4* %1)
-  %2 = bitcast i4* %1 to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* %2, i8* @g, i32 1, i1 false)
-  call void @gaz(i8* %2)
+  call void @bar(ptr %0)
+  call void @llvm.memcpy.p0.p0.i32(ptr %0, ptr @g, i32 1, i1 false)
+  call void @gaz(ptr %0)
   ret void
 }
 
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture writeonly, i8* nocapture readonly, i32, i1)
-declare void @bar(i4*)
-declare void @gaz(i8*)
+declare void @llvm.memcpy.p0.p0.i32(ptr nocapture writeonly, ptr nocapture readonly, i32, i1)
+declare void @bar(ptr)
+declare void @gaz(ptr)
 
 ; The mempcy should be simplified to a single store of an i8, not i4
 ; CHECK: store i8 -1
index c552a1829a0f6ca935748b6254b8a289a52b76ed..4a57b54c0de0f97d6256e7669644e5c0ddd1dc4e 100644 (file)
@@ -6,18 +6,18 @@
 
 define void @tinkywinky() {
 ; CHECK-LABEL: @tinkywinky(
-; CHECK-NEXT:    [[PATATINO:%.*]] = load i8, i8* @a, align 1
+; CHECK-NEXT:    [[PATATINO:%.*]] = load i8, ptr @a, align 1
 ; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq i8 [[PATATINO]], 0
 ; CHECK-NEXT:    [[TMP1:%.*]] = zext i1 [[TOBOOL]] to i32
-; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[TMP1]], or (i32 zext (i1 icmp ne (i32* bitcast (i8* @a to i32*), i32* @b) to i32), i32 2)
-; CHECK-NEXT:    store i32 [[OR1]], i32* @b, align 4
+; CHECK-NEXT:    [[OR1:%.*]] = or i32 [[TMP1]], or (i32 zext (i1 icmp ne (ptr @a, ptr @b) to i32), i32 2)
+; CHECK-NEXT:    store i32 [[OR1]], ptr @b, align 4
 ; CHECK-NEXT:    ret void
 ;
-  %patatino = load i8, i8* @a
+  %patatino = load i8, ptr @a
   %tobool = icmp ne i8 %patatino, 0
   %lnot = xor i1 %tobool, true
   %lnot.ext = zext i1 %lnot to i32
-  %or = or i32 xor (i32 zext (i1 icmp ne (i32* bitcast (i8* @a to i32*), i32* @b) to i32), i32 2), %lnot.ext
-  store i32 %or, i32* @b, align 4
+  %or = or i32 xor (i32 zext (i1 icmp ne (ptr @a, ptr @b) to i32), i32 2), %lnot.ext
+  store i32 %or, ptr @b, align 4
   ret void
 }
index 055ae274257c8500583af8f21b1259acfd3e4bde..7205033649d309249c3021c2e8e39e23cb5b3d8b 100644 (file)
@@ -6,10 +6,10 @@
 
 define float @patatino() {
 ; CHECK-LABEL: @patatino(
-; CHECK-NEXT:    [[FMUL:%.*]] = fmul float uitofp (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1) to float), uitofp (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1) to float)
+; CHECK-NEXT:    [[FMUL:%.*]] = fmul float uitofp (i1 icmp eq (ptr getelementptr inbounds (i16, ptr @g2, i64 1), ptr @g1) to float), uitofp (i1 icmp eq (ptr getelementptr inbounds (i16, ptr @g2, i64 1), ptr @g1) to float)
 ; CHECK-NEXT:    ret float [[FMUL]]
 ;
-  %fmul = fmul float uitofp (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1) to float), uitofp (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1) to float)
+  %fmul = fmul float uitofp (i1 icmp eq (ptr getelementptr inbounds (i16, ptr @g2, i64 1), ptr @g1) to float), uitofp (i1 icmp eq (ptr getelementptr inbounds (i16, ptr @g2, i64 1), ptr @g1) to float)
   %call = call float @fabsf(float %fmul)
   ret float %call
 }
index 35d704939686425416ecbfab692f451217fae316..58737bdd2832813407170f896c064e4f771e19c7 100644 (file)
@@ -5,7 +5,7 @@ define <2 x i16> @patatino() {
 ; CHECK-LABEL: @patatino(
 ; CHECK-NEXT:    ret <2 x i16> zeroinitializer
 ;
-  %tmp2 = getelementptr inbounds [1 x i16], [1 x i16]* null, i16 0, <2 x i16> undef
-  %tmp3 = ptrtoint <2 x i16*> %tmp2 to <2 x i16>
+  %tmp2 = getelementptr inbounds [1 x i16], ptr null, i16 0, <2 x i16> undef
+  %tmp3 = ptrtoint <2 x ptr> %tmp2 to <2 x i16>
   ret <2 x i16> %tmp3
 }
index 4604c13811889a7eb39c8b58bc32fe5aee411376..9fdc0c00f5b7b6d34a4befec27e75da82672d5b6 100644 (file)
@@ -7,9 +7,9 @@
 ; CHECK-LABEL: @func_24(
 define i40 @func_24() {
 entry:
-  %bf.load81 = load i40, i40* bitcast ({ i8, i8, i8, i8, i8 }* @g_49 to i40*), align 2
+  %bf.load81 = load i40, ptr @g_49, align 2
   %bf.clear = and i40 %bf.load81, -274869518337
-  %bf.set = or i40 %bf.clear, shl (i40 zext (i1 icmp sgt (i32 zext (i1 icmp eq (i8* getelementptr inbounds ([6 x i8], [6 x i8]* @g_461, i64 0, i64 2), i8* @g_40) to i32), i32 0) to i40), i40 23)
+  %bf.set = or i40 %bf.clear, shl (i40 zext (i1 icmp sgt (i32 zext (i1 icmp eq (ptr getelementptr inbounds ([6 x i8], ptr @g_461, i64 0, i64 2), ptr @g_40) to i32), i32 0) to i40), i40 23)
   %tmp = lshr i40 %bf.set, 23
   %tmp1 = trunc i40 %tmp to i32
   %tmp2 = and i32 1, %tmp1
index 0f9886c636f0feeb4fc61dfe5757ae32c5c9c3a3..6613514c77549cabb8edf5c098c63419ecc91286 100644 (file)
@@ -12,11 +12,11 @@ define <4 x i1> @PR38984_1() {
 ; CHECK-NEXT:    ret <4 x i1> <i1 true, i1 true, i1 true, i1 true>
 ;
 entry:
-  %0 = load i16, i16* getelementptr ([4 x i16], [4 x i16]* @offsets, i16 0, i16 0), align 1
+  %0 = load i16, ptr @offsets, align 1
   %1 = insertelement <4 x i16> poison, i16 %0, i32 3
-  %2 = getelementptr i32, i32* null, <4 x i16> %1
-  %3 = getelementptr i32, i32* null, <4 x i16> %1
-  %4 = icmp eq <4 x i32*> %2, %3
+  %2 = getelementptr i32, ptr null, <4 x i16> %1
+  %3 = getelementptr i32, ptr null, <4 x i16> %1
+  %4 = icmp eq <4 x ptr> %2, %3
   ret <4 x i1> %4
 }
 
@@ -24,18 +24,18 @@ entry:
 define <4 x i1> @PR38984_2() {
 ; CHECK-LABEL: @PR38984_2(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = load i16, i16* getelementptr inbounds ([4 x i16], [4 x i16]* @offsets, i16 0, i16 0), align 2
+; CHECK-NEXT:    [[TMP0:%.*]] = load i16, ptr @offsets, align 2
 ; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <4 x i16> poison, i16 [[TMP0]], i64 3
-; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr i16, i16* getelementptr inbounds ([21 x i16], [21 x i16]* @a, i16 1, i16 0), <4 x i16> [[TMP1]]
-; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr i16, i16* null, <4 x i16> [[TMP1]]
-; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq <4 x i16*> [[TMP2]], [[TMP3]]
+; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr i16, ptr getelementptr inbounds ([21 x i16], ptr @a, i16 1, i16 0), <4 x i16> [[TMP1]]
+; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr i16, ptr null, <4 x i16> [[TMP1]]
+; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq <4 x ptr> [[TMP2]], [[TMP3]]
 ; CHECK-NEXT:    ret <4 x i1> [[TMP4]]
 ;
 entry:
-  %0 = load i16, i16* getelementptr ([4 x i16], [4 x i16]* @offsets, i16 0, i16 0)
+  %0 = load i16, ptr @offsets
   %1 = insertelement <4 x i16> poison, i16 %0, i32 3
-  %2 = getelementptr i16, i16* getelementptr ([21 x i16], [21 x i16]* @a, i64 1, i32 0), <4 x i16> %1
-  %3 = getelementptr i16, i16* null, <4 x i16> %1
-  %4 = icmp eq <4 x i16*> %2, %3
+  %2 = getelementptr i16, ptr getelementptr ([21 x i16], ptr @a, i64 1, i32 0), <4 x i16> %1
+  %3 = getelementptr i16, ptr null, <4 x i16> %1
+  %4 = icmp eq <4 x ptr> %2, %3
   ret <4 x i1> %4
 }
index 97b03ea546023ba529d4c1cacebeb9bfa17bb341..af1d05a4654f78b64d6350ce90576b530eec5fa3 100644 (file)
@@ -12,11 +12,11 @@ define <4 x i1> @PR38984_1() {
 ; CHECK-NEXT:    ret <4 x i1> <i1 true, i1 true, i1 true, i1 true>
 ;
 entry:
-  %0 = load i16, i16* getelementptr ([4 x i16], [4 x i16]* @offsets, i16 0, i16 0), align 1
+  %0 = load i16, ptr @offsets, align 1
   %1 = insertelement <4 x i16> undef, i16 %0, i32 3
-  %2 = getelementptr i32, i32* null, <4 x i16> %1
-  %3 = getelementptr i32, i32* null, <4 x i16> %1
-  %4 = icmp eq <4 x i32*> %2, %3
+  %2 = getelementptr i32, ptr null, <4 x i16> %1
+  %3 = getelementptr i32, ptr null, <4 x i16> %1
+  %4 = icmp eq <4 x ptr> %2, %3
   ret <4 x i1> %4
 }
 
@@ -24,18 +24,18 @@ entry:
 define <4 x i1> @PR38984_2() {
 ; CHECK-LABEL: @PR38984_2(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = load i16, i16* getelementptr inbounds ([4 x i16], [4 x i16]* @offsets, i16 0, i16 0), align 2
+; CHECK-NEXT:    [[TMP0:%.*]] = load i16, ptr @offsets, align 2
 ; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <4 x i16> undef, i16 [[TMP0]], i64 3
-; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr i16, i16* getelementptr inbounds ([21 x i16], [21 x i16]* @a, i16 1, i16 0), <4 x i16> [[TMP1]]
-; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr i16, i16* null, <4 x i16> [[TMP1]]
-; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq <4 x i16*> [[TMP2]], [[TMP3]]
+; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr i16, ptr getelementptr inbounds ([21 x i16], ptr @a, i16 1, i16 0), <4 x i16> [[TMP1]]
+; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr i16, ptr null, <4 x i16> [[TMP1]]
+; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq <4 x ptr> [[TMP2]], [[TMP3]]
 ; CHECK-NEXT:    ret <4 x i1> [[TMP4]]
 ;
 entry:
-  %0 = load i16, i16* getelementptr ([4 x i16], [4 x i16]* @offsets, i16 0, i16 0)
+  %0 = load i16, ptr @offsets
   %1 = insertelement <4 x i16> undef, i16 %0, i32 3
-  %2 = getelementptr i16, i16* getelementptr ([21 x i16], [21 x i16]* @a, i64 1, i32 0), <4 x i16> %1
-  %3 = getelementptr i16, i16* null, <4 x i16> %1
-  %4 = icmp eq <4 x i16*> %2, %3
+  %2 = getelementptr i16, ptr getelementptr ([21 x i16], ptr @a, i64 1, i32 0), <4 x i16> %1
+  %3 = getelementptr i16, ptr null, <4 x i16> %1
+  %4 = icmp eq <4 x ptr> %2, %3
   ret <4 x i1> %4
 }
index 0671b5a9ad61e024308160df367a858b88a36d01..8bf9b49967781d34aee3de237aa3d9aa364c9569 100644 (file)
@@ -3,28 +3,28 @@
 ; Check that SimplifyLibCalls do not (crash or) emit a library call if user
 ; has made a function alias with the same name.
 
-%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i64, i32, [20 x i8] }
-%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }
+%struct._IO_FILE = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, i64, i16, i8, [1 x i8], ptr, i64, ptr, ptr, ptr, ptr, i64, i32, [20 x i8] }
+%struct._IO_marker = type { ptr, ptr, i32 }
 
-@stderr = external global %struct._IO_FILE*, align 8
+@stderr = external global ptr, align 8
 @.str = private constant [8 x i8] c"crash!\0A\00", align 1
 
-@fwrite = alias i64 (i8*, i64, i64, %struct._IO_FILE*), i64 (i8*, i64, i64, %struct._IO_FILE*)* @__fwrite_alias
+@fwrite = alias i64 (ptr, i64, i64, ptr), ptr @__fwrite_alias
 
-define i64 @__fwrite_alias(i8* %ptr, i64 %size, i64 %n, %struct._IO_FILE* %s) {
+define i64 @__fwrite_alias(ptr %ptr, i64 %size, i64 %n, ptr %s) {
 ; CHECK-LABEL: @__fwrite_alias(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    ret i64 0
 ;
 entry:
-  %ptr.addr = alloca i8*, align 8
+  %ptr.addr = alloca ptr, align 8
   %size.addr = alloca i64, align 8
   %n.addr = alloca i64, align 8
-  %s.addr = alloca %struct._IO_FILE*, align 8
-  store i8* %ptr, i8** %ptr.addr, align 8
-  store i64 %size, i64* %size.addr, align 8
-  store i64 %n, i64* %n.addr, align 8
-  store %struct._IO_FILE* %s, %struct._IO_FILE** %s.addr, align 8
+  %s.addr = alloca ptr, align 8
+  store ptr %ptr, ptr %ptr.addr, align 8
+  store i64 %size, ptr %size.addr, align 8
+  store i64 %n, ptr %n.addr, align 8
+  store ptr %s, ptr %s.addr, align 8
   ret i64 0
 }
 
@@ -35,10 +35,10 @@ define void @foo() {
 ;
 entry:
   %retval = alloca i32, align 4
-  store i32 0, i32* %retval, align 4
-  %0 = load %struct._IO_FILE*, %struct._IO_FILE** @stderr, align 8
-  %call = call i32 (%struct._IO_FILE*, i8*, ...) @fprintf(%struct._IO_FILE* %0, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0))
+  store i32 0, ptr %retval, align 4
+  %0 = load ptr, ptr @stderr, align 8
+  %call = call i32 (ptr, ptr, ...) @fprintf(ptr %0, ptr @.str)
   ret void
 }
 
-declare i32 @fprintf(%struct._IO_FILE*, i8*, ...)
+declare i32 @fprintf(ptr, ptr, ...)
index da797bb57303b1bab862a113fe6733cd2683f1d7..5918abb7eedd714fe7457ca51a04240a6d92d652 100644 (file)
@@ -5,9 +5,9 @@
 
 define i64 @_Z8wyhash64v() {
 ; CHECK-LABEL: @_Z8wyhash64v(
-; CHECK-NEXT:    [[TMP1:%.*]] = load i64, i64* @wyhash64_x, align 8
+; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @wyhash64_x, align 8
 ; CHECK-NEXT:    [[TMP2:%.*]] = add i64 [[TMP1]], 6971258582664805397
-; CHECK-NEXT:    store i64 [[TMP2]], i64* @wyhash64_x, align 8
+; CHECK-NEXT:    store i64 [[TMP2]], ptr @wyhash64_x, align 8
 ; CHECK-NEXT:    [[TMP3:%.*]] = zext i64 [[TMP2]] to i128
 ; CHECK-NEXT:    [[TMP4:%.*]] = mul nuw i128 [[TMP3]], 11795372955171141389
 ; CHECK-NEXT:    [[TMP5:%.*]] = lshr i128 [[TMP4]], 64
@@ -19,9 +19,9 @@ define i64 @_Z8wyhash64v() {
 ; CHECK-NEXT:    [[TMP10:%.*]] = trunc i128 [[TMP9]] to i64
 ; CHECK-NEXT:    ret i64 [[TMP10]]
 ;
-  %1 = load i64, i64* @wyhash64_x, align 8
+  %1 = load i64, ptr @wyhash64_x, align 8
   %2 = add i64 %1, 6971258582664805397
-  store i64 %2, i64* @wyhash64_x, align 8
+  store i64 %2, ptr @wyhash64_x, align 8
   %3 = zext i64 %2 to i128
   %4 = mul i128 %3, 11795372955171141389
   %5 = lshr i128 %4, 64
index 04214183592b68a5cbd5528f4cbaa1b594532f37..c62794a915e659023cbe0196b6aba349837015db 100644 (file)
@@ -2,14 +2,14 @@
 
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
 
-declare i8* @strchr(i8*, i32)
+declare ptr @strchr(ptr, i32)
 
-define i8* @pr43081(i8* %a) {
+define ptr @pr43081(ptr %a) {
 entry:
-  %a.addr = alloca i8*, align 8
-  store i8* %a, i8** %a.addr, align 8
-  %0 = load i8*, i8** %a.addr, align 8
-  %call = call i8* @strchr(i8* %0, i32 0)
-  ret i8* %call
-; CHECK: call i8* @strchr
+  %a.addr = alloca ptr, align 8
+  store ptr %a, ptr %a.addr, align 8
+  %0 = load ptr, ptr %a.addr, align 8
+  %call = call ptr @strchr(ptr %0, i32 0)
+  ret ptr %call
+; CHECK: call ptr @strchr
 }
index 3cf664b569359611b660f95d372846306833e292..ffb280ce3516ad9f3f3d78f233e7afbf85e07227 100644 (file)
@@ -6,10 +6,10 @@
 ; simplified. But that depends on the worklist order, so that is not always
 ; guaranteed.
 
-define i16 @d(i16* %d.a, i16* %d.b) {
+define i16 @d(ptr %d.a, ptr %d.b) {
 ; CHECK-LABEL: @d(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[T0:%.*]] = load i16, i16* [[D_A:%.*]], align 1
+; CHECK-NEXT:    [[T0:%.*]] = load i16, ptr [[D_A:%.*]], align 1
 ; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq i16 [[T0]], 0
 ; CHECK-NEXT:    br i1 [[TOBOOL]], label [[LAND_END:%.*]], label [[LAND_RHS:%.*]]
 ; CHECK:       land.rhs:
@@ -18,12 +18,12 @@ define i16 @d(i16* %d.a, i16* %d.b) {
 ; CHECK-NEXT:    ret i16 -1
 ;
 entry:
-  %t0 = load i16, i16* %d.a, align 1
+  %t0 = load i16, ptr %d.a, align 1
   %tobool = icmp ne i16 %t0, 0
   br i1 %tobool, label %land.rhs, label %land.end
 
 land.rhs:
-  %t1 = load i16, i16* %d.b, align 1
+  %t1 = load i16, ptr %d.b, align 1
   %cmp = icmp ult i16 %t1, 0
   br label %land.end
 
index 5f3e33c1ef59863740ed943496b3f940228712ff..2c3b05fc83262ec173ef1c67a91ed70460aac339 100644 (file)
@@ -6,9 +6,9 @@
 
 define dso_local i32 @main() !dbg !13 {
 entry:
-  %0 = load i8, i8* @a, align 1, !dbg !17
+  %0 = load i8, ptr @a, align 1, !dbg !17
   %dec = add i8 %0, -1, !dbg !17
-  store i8 %dec, i8* @a, align 1, !dbg !17
+  store i8 %dec, ptr @a, align 1, !dbg !17
 ;CHECK: call void @llvm.dbg.value(metadata i32 undef
 ;CHECK: call void @llvm.dbg.value(metadata i32 -8
 ;CHECK: call void @llvm.dbg.value(metadata i32 undef
@@ -17,7 +17,7 @@ entry:
   call void @llvm.dbg.value(metadata i32 %udiv, metadata !18, metadata !DIExpression()), !dbg !19
   call void @llvm.dbg.value(metadata i32 -8, metadata !20, metadata !DIExpression()), !dbg !19
   call void @llvm.dbg.value(metadata i32 %udiv, metadata !20, metadata !DIExpression()), !dbg !19
-  store i8 0, i8* @b, align 1, !dbg !21
+  store i8 0, ptr @b, align 1, !dbg !21
   %cmp = icmp sgt i32 %conv, 0, !dbg !22
   %conv1 = zext i1 %cmp to i32, !dbg !22
   ret i32 0, !dbg !23
index f32265b97434b24a8e28cfa41d3fe39ca07ac1dd..86899c3d026a61f757656a507ad564170709560f 100644 (file)
 define i16 @main() {
 ; CHECK-LABEL: @main(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    store i64 0, i64* @csmith_sink_, align 8
+; CHECK-NEXT:    store i64 0, ptr @csmith_sink_, align 8
 ; CHECK-NEXT:    ret i16 0
 ;
 entry:
-  store i64 0, i64* @csmith_sink_, align 1
-  %0 = load i16, i16* @g_313_0, align 1
+  store i64 0, ptr @csmith_sink_, align 1
+  %0 = load i16, ptr @g_313_0, align 1
   %conv2 = sext i16 %0 to i64
-  store i64 %conv2, i64* @csmith_sink_, align 1
-  %1 = load i32, i32* @g_313_1, align 1
+  store i64 %conv2, ptr @csmith_sink_, align 1
+  %1 = load i32, ptr @g_313_1, align 1
   %conv3 = zext i32 %1 to i64
-  store i64 %conv3, i64* @csmith_sink_, align 1
-  %2 = load i32, i32* @g_313_2, align 1
+  store i64 %conv3, ptr @csmith_sink_, align 1
+  %2 = load i32, ptr @g_313_2, align 1
   %conv4 = sext i32 %2 to i64
-  store i64 %conv4, i64* @csmith_sink_, align 1
-  %3 = load i32, i32* @g_313_3, align 1
+  store i64 %conv4, ptr @csmith_sink_, align 1
+  %3 = load i32, ptr @g_313_3, align 1
   %conv5 = zext i32 %3 to i64
-  store i64 %conv5, i64* @csmith_sink_, align 1
-  %4 = load i16, i16* @g_313_4, align 1
+  store i64 %conv5, ptr @csmith_sink_, align 1
+  %4 = load i16, ptr @g_313_4, align 1
   %conv6 = sext i16 %4 to i64
-  store i64 %conv6, i64* @csmith_sink_, align 1
-  %5 = load i16, i16* @g_313_5, align 1
+  store i64 %conv6, ptr @csmith_sink_, align 1
+  %5 = load i16, ptr @g_313_5, align 1
   %conv7 = sext i16 %5 to i64
-  store i64 %conv7, i64* @csmith_sink_, align 1
-  %6 = load i16, i16* @g_313_6, align 1
+  store i64 %conv7, ptr @csmith_sink_, align 1
+  %6 = load i16, ptr @g_313_6, align 1
   %conv8 = sext i16 %6 to i64
-  store i64 %conv8, i64* @csmith_sink_, align 1
-  %7 = load i64, i64* getelementptr inbounds (%struct.S3, %struct.S3* @g_316, i32 0, i32 0), align 1
-  store i64 %7, i64* @csmith_sink_, align 1
-  %8 = load i16, i16* @g_316_1_0, align 1
+  store i64 %conv8, ptr @csmith_sink_, align 1
+  %7 = load i64, ptr @g_316, align 1
+  store i64 %7, ptr @csmith_sink_, align 1
+  %8 = load i16, ptr @g_316_1_0, align 1
   %conv9 = sext i16 %8 to i64
-  store i64 %conv9, i64* @csmith_sink_, align 1
-  store i64 0, i64* @csmith_sink_, align 1
+  store i64 %conv9, ptr @csmith_sink_, align 1
+  store i64 0, ptr @csmith_sink_, align 1
   ret i16 0
 }
 
index b4bc8fe3da30d5cb2858c6b876858de3b6a8ee76..c7afa68abc3bbd1d64feab02fc17e226ba835fa3 100644 (file)
@@ -4,25 +4,23 @@
 ; This test used to cause an infinite loop in the load/store min/max bitcast
 ; transform.
 
-define void @test(i32* %p, i32* %p2) {
+define void @test(ptr %p, ptr %p2) {
 ; CHECK-LABEL: @test(
-; CHECK-NEXT:    [[V:%.*]] = load i32, i32* [[P:%.*]], align 4
-; CHECK-NEXT:    [[V2:%.*]] = load i32, i32* [[P2:%.*]], align 4
+; CHECK-NEXT:    [[V:%.*]] = load i32, ptr [[P:%.*]], align 4
+; CHECK-NEXT:    [[V2:%.*]] = load i32, ptr [[P2:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = call i32 @llvm.umin.i32(i32 [[V2]], i32 [[V]])
-; CHECK-NEXT:    store i32 [[TMP1]], i32* [[P]], align 4
+; CHECK-NEXT:    store i32 [[TMP1]], ptr [[P]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %v = load i32, i32* %p, align 4
-  %v2 = load i32, i32* %p2, align 4
+  %v = load i32, ptr %p, align 4
+  %v2 = load i32, ptr %p2, align 4
   %cmp = icmp ult i32 %v2, %v
-  %sel = select i1 %cmp, i32* %p2, i32* %p
-  %p8 = bitcast i32* %p to i8*
-  %sel8 = bitcast i32* %sel to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %p8, i8* align 4 %sel8, i64 4, i1 false)
+  %sel = select i1 %cmp, ptr %p2, ptr %p
+  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %p, ptr align 4 %sel, i64 4, i1 false)
   ret void
 }
 
 ; Function Attrs: argmemonly nounwind willreturn
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* noalias nocapture writeonly, i8* noalias nocapture readonly, i64, i1 immarg) #0
+declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #0
 
 attributes #0 = { argmemonly nounwind willreturn }
index 39bbde6b07c0663a196fbabcaf5f85f00737e7ef..ad04dcb03aa2bbfff0c7c75a5f400191bb7a5f54 100644 (file)
@@ -8,75 +8,75 @@ target triple = "x86_64-pc-linux-gnu"
 @d = dso_local local_unnamed_addr global i64 0, align 8
 @c = external dso_local local_unnamed_addr global i8, align 1
 
-define void @test(i16* nocapture readonly %arg) local_unnamed_addr {
+define void @test(ptr nocapture readonly %arg) local_unnamed_addr {
 ; CHECK-LABEL: @test(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[I:%.*]] = load i64, i64* @d, align 8
+; CHECK-NEXT:    [[I:%.*]] = load i64, ptr @d, align 8
 ; CHECK-NEXT:    [[I1:%.*]] = icmp eq i64 [[I]], 0
-; CHECK-NEXT:    [[I2:%.*]] = load i64, i64* @a, align 8
+; CHECK-NEXT:    [[I2:%.*]] = load i64, ptr @a, align 8
 ; CHECK-NEXT:    [[I3:%.*]] = icmp ne i64 [[I2]], 0
 ; CHECK-NEXT:    br i1 [[I1]], label [[BB13:%.*]], label [[BB4:%.*]]
 ; CHECK:       bb4:
-; CHECK-NEXT:    [[I5:%.*]] = load i16, i16* [[ARG:%.*]], align 2
+; CHECK-NEXT:    [[I5:%.*]] = load i16, ptr [[ARG:%.*]], align 2
 ; CHECK-NEXT:    [[I6:%.*]] = trunc i16 [[I5]] to i8
-; CHECK-NEXT:    store i8 [[I6]], i8* @c, align 1
+; CHECK-NEXT:    store i8 [[I6]], ptr @c, align 1
 ; CHECK-NEXT:    tail call void @llvm.assume(i1 [[I3]])
 ; CHECK-NEXT:    br label [[BB22:%.*]]
 ; CHECK:       bb13:
-; CHECK-NEXT:    [[I14:%.*]] = load i16, i16* [[ARG]], align 2
+; CHECK-NEXT:    [[I14:%.*]] = load i16, ptr [[ARG]], align 2
 ; CHECK-NEXT:    [[I15:%.*]] = trunc i16 [[I14]] to i8
-; CHECK-NEXT:    store i8 [[I15]], i8* @c, align 1
+; CHECK-NEXT:    store i8 [[I15]], ptr @c, align 1
 ; CHECK-NEXT:    br label [[BB22]]
 ; CHECK:       bb22:
-; CHECK-NEXT:    [[STOREMERGE2_IN:%.*]] = load i16, i16* [[ARG]], align 2
+; CHECK-NEXT:    [[STOREMERGE2_IN:%.*]] = load i16, ptr [[ARG]], align 2
 ; CHECK-NEXT:    [[STOREMERGE2:%.*]] = trunc i16 [[STOREMERGE2_IN]] to i8
-; CHECK-NEXT:    store i8 [[STOREMERGE2]], i8* @c, align 1
-; CHECK-NEXT:    [[STOREMERGE1_IN:%.*]] = load i16, i16* [[ARG]], align 2
+; CHECK-NEXT:    store i8 [[STOREMERGE2]], ptr @c, align 1
+; CHECK-NEXT:    [[STOREMERGE1_IN:%.*]] = load i16, ptr [[ARG]], align 2
 ; CHECK-NEXT:    [[STOREMERGE1:%.*]] = trunc i16 [[STOREMERGE1_IN]] to i8
-; CHECK-NEXT:    store i8 [[STOREMERGE1]], i8* @c, align 1
-; CHECK-NEXT:    [[STOREMERGE_IN:%.*]] = load i16, i16* [[ARG]], align 2
+; CHECK-NEXT:    store i8 [[STOREMERGE1]], ptr @c, align 1
+; CHECK-NEXT:    [[STOREMERGE_IN:%.*]] = load i16, ptr [[ARG]], align 2
 ; CHECK-NEXT:    [[STOREMERGE:%.*]] = trunc i16 [[STOREMERGE_IN]] to i8
-; CHECK-NEXT:    store i8 [[STOREMERGE]], i8* @c, align 1
+; CHECK-NEXT:    store i8 [[STOREMERGE]], ptr @c, align 1
 ; CHECK-NEXT:    br label [[BB23:%.*]]
 ; CHECK:       bb23:
 ; CHECK-NEXT:    br label [[BB23]]
 ;
 bb:
-  %i = load i64, i64* @d, align 8
+  %i = load i64, ptr @d, align 8
   %i1 = icmp eq i64 %i, 0
-  %i2 = load i64, i64* @a, align 8
+  %i2 = load i64, ptr @a, align 8
   %i3 = icmp ne i64 %i2, 0
   br i1 %i1, label %bb13, label %bb4
 
 bb4:                                              ; preds = %bb
-  %i5 = load i16, i16* %arg, align 2
+  %i5 = load i16, ptr %arg, align 2
   %i6 = trunc i16 %i5 to i8
-  store i8 %i6, i8* @c, align 1
+  store i8 %i6, ptr @c, align 1
   tail call void @llvm.assume(i1 %i3)
-  %i7 = load i16, i16* %arg, align 2
+  %i7 = load i16, ptr %arg, align 2
   %i8 = trunc i16 %i7 to i8
-  store i8 %i8, i8* @c, align 1
-  %i9 = load i16, i16* %arg, align 2
+  store i8 %i8, ptr @c, align 1
+  %i9 = load i16, ptr %arg, align 2
   %i10 = trunc i16 %i9 to i8
-  store i8 %i10, i8* @c, align 1
-  %i11 = load i16, i16* %arg, align 2
+  store i8 %i10, ptr @c, align 1
+  %i11 = load i16, ptr %arg, align 2
   %i12 = trunc i16 %i11 to i8
-  store i8 %i12, i8* @c, align 1
+  store i8 %i12, ptr @c, align 1
   br label %bb22
 
 bb13:                                             ; preds = %bb
-  %i14 = load i16, i16* %arg, align 2
+  %i14 = load i16, ptr %arg, align 2
   %i15 = trunc i16 %i14 to i8
-  store i8 %i15, i8* @c, align 1
-  %i16 = load i16, i16* %arg, align 2
+  store i8 %i15, ptr @c, align 1
+  %i16 = load i16, ptr %arg, align 2
   %i17 = trunc i16 %i16 to i8
-  store i8 %i17, i8* @c, align 1
-  %i18 = load i16, i16* %arg, align 2
+  store i8 %i17, ptr @c, align 1
+  %i18 = load i16, ptr %arg, align 2
   %i19 = trunc i16 %i18 to i8
-  store i8 %i19, i8* @c, align 1
-  %i20 = load i16, i16* %arg, align 2
+  store i8 %i19, ptr @c, align 1
+  %i20 = load i16, ptr %arg, align 2
   %i21 = trunc i16 %i20 to i8
-  store i8 %i21, i8* @c, align 1
+  store i8 %i21, ptr @c, align 1
   br label %bb22
 
 bb22:                                             ; preds = %bb13, %bb4
index bd926439260c6dcb7f8da37f03c05a932353846d..ff271a8a7fb8b60106e73d699da3ff0d0ab500c7 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
 ; OSS-Fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=38057
-define void @PR51824(<4 x i16> %idxs, i32* %ptr, i1 %c1, <4 x i32>* %ptr2) {
+define void @PR51824(<4 x i16> %idxs, ptr %ptr, i1 %c1, ptr %ptr2) {
 ; CHECK-LABEL: @PR51824(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[BB:%.*]]
@@ -18,17 +18,17 @@ entry:
   %E9 = extractelement <4 x i16> zeroinitializer, i16 %B2
   %I2 = insertelement <4 x i16> poison, i16 %E9, i16 0
   %i = sext <4 x i16> %I2 to <4 x i32>
-  %i1 = getelementptr inbounds i64, i64* null, <4 x i32> %i
-  %i2 = ptrtoint <4 x i64*> %i1 to <4 x i32>
+  %i1 = getelementptr inbounds i64, ptr null, <4 x i32> %i
+  %i2 = ptrtoint <4 x ptr> %i1 to <4 x i32>
   %E2 = extractelement <4 x i32> %i2, i16 0
   br label %BB
 
 BB:                                               ; preds = %BB, %entry
   %A15 = alloca <4 x i32>, align 16
-  %L2 = load <4 x i32>, <4 x i32>* %A15, align 16
-  %G1 = getelementptr i64, i64* null, i32 %E2
-  %i3 = getelementptr inbounds i64, i64* %G1, <4 x i16> %idxs
-  %i4 = ptrtoint <4 x i64*> %i3 to <4 x i32>
+  %L2 = load <4 x i32>, ptr %A15, align 16
+  %G1 = getelementptr i64, ptr null, i32 %E2
+  %i3 = getelementptr inbounds i64, ptr %G1, <4 x i16> %idxs
+  %i4 = ptrtoint <4 x ptr> %i3 to <4 x i32>
   %E22 = extractelement <4 x i32> %L2, i1 false
   %E8 = extractelement <4 x i32> %i4, i1 false
   %I10 = insertelement <4 x i32> undef, i32 undef, i32 %E8
@@ -36,11 +36,11 @@ BB:                                               ; preds = %BB, %entry
   %S7 = shufflevector <4 x i32> %I19, <4 x i32> %L2, <4 x i32> poison
   %I8 = insertelement <4 x i32> %I19, i32 0, i1 %C1
   %E10 = extractelement <4 x i32> %I8, i1 poison
-  store i32 %E10, i32* %ptr, align 4
+  store i32 %E10, ptr %ptr, align 4
   br i1 %c1, label %BB, label %BB1
 
 BB1:                                              ; preds = %BB
   %S8 = shufflevector <4 x i32> %I10, <4 x i32> %S7, <4 x i32> undef
-  store <4 x i32> %S8, <4 x i32>* %ptr2, align 16
+  store <4 x i32> %S8, ptr %ptr2, align 16
   ret void
 }
index c9573006d14082e099d54be5edebf5cb7818e2aa..832d1ea75ddc8dae3740dd3cb5e16a374ee2dac6 100644 (file)
@@ -1,33 +1,30 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-%struct.C = type { %struct.C*, i32 }
+%struct.C = type { ptr, i32 }
 
 ; Check that we instcombine the load across the prefetch.
 
 ; CHECK-LABEL: define signext i32 @foo
-define signext i32 @foo(%struct.C* %c) local_unnamed_addr #0 {
-; CHECK: store i32 %dec, i32* %length_
+define signext i32 @foo(ptr %c) local_unnamed_addr #0 {
+; CHECK: store i32 %dec, ptr %length_
 ; CHECK-NOT: load
 ; CHECK: llvm.prefetch
 ; CHECK-NEXT: ret
 entry:
-  %next_ = getelementptr inbounds %struct.C, %struct.C* %c, i32 0, i32 0
-  %0 = load %struct.C*, %struct.C** %next_, align 8
-  %next_1 = getelementptr inbounds %struct.C, %struct.C* %0, i32 0, i32 0
-  %1 = load %struct.C*, %struct.C** %next_1, align 8
-  store %struct.C* %1, %struct.C** %next_, align 8
-  %length_ = getelementptr inbounds %struct.C, %struct.C* %c, i32 0, i32 1
-  %2 = load i32, i32* %length_, align 8
+  %0 = load ptr, ptr %c, align 8
+  %1 = load ptr, ptr %0, align 8
+  store ptr %1, ptr %c, align 8
+  %length_ = getelementptr inbounds %struct.C, ptr %c, i32 0, i32 1
+  %2 = load i32, ptr %length_, align 8
   %dec = add nsw i32 %2, -1
-  store i32 %dec, i32* %length_, align 8
-  %3 = bitcast %struct.C* %1 to i8*
-  call void @llvm.prefetch(i8* %3, i32 0, i32 0, i32 1)
-  %4 = load i32, i32* %length_, align 8
-  ret i32 %4
+  store i32 %dec, ptr %length_, align 8
+  call void @llvm.prefetch(ptr %1, i32 0, i32 0, i32 1)
+  %3 = load i32, ptr %length_, align 8
+  ret i32 %3
 }
 
 ; Function Attrs: inaccessiblemem_or_argmemonly nounwind
-declare void @llvm.prefetch(i8* nocapture readonly, i32, i32, i32) 
+declare void @llvm.prefetch(ptr nocapture readonly, i32, i32, i32) 
 
 attributes #0 = { noinline nounwind }
 ; We've explicitly removed the function attrs from llvm.prefetch so we get the defaults.
index 8b08f80c468032c2f90a722d2a7dd70d338b4084..6f5814e1a28237e9b9e59d29bfb72cb352301f3c 100644 (file)
@@ -2,29 +2,29 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
 
-define i1 @test1(i32 *%x) nounwind {
+define i1 @test1(ptr %x) nounwind {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = ptrtoint i32* [[X:%.*]] to i64
+; CHECK-NEXT:    [[TMP0:%.*]] = ptrtoint ptr [[X:%.*]] to i64
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i64 [[TMP0]], 1
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i64 [[TMP1]], 0
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
 entry:
-  %0 = ptrtoint i32* %x to i1
+  %0 = ptrtoint ptr %x to i1
   ret i1 %0
 }
 
-define i32* @test2(i128 %x) nounwind {
+define ptr @test2(i128 %x) nounwind {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[TMP0:%.*]] = trunc i128 [[X:%.*]] to i64
-; CHECK-NEXT:    [[TMP1:%.*]] = inttoptr i64 [[TMP0]] to i32*
-; CHECK-NEXT:    ret i32* [[TMP1]]
+; CHECK-NEXT:    [[TMP1:%.*]] = inttoptr i64 [[TMP0]] to ptr
+; CHECK-NEXT:    ret ptr [[TMP1]]
 ;
 entry:
-  %0 = inttoptr i128 %x to i32*
-  ret i32* %0
+  %0 = inttoptr i128 %x to ptr
+  ret ptr %0
 }
 
 ; PR3574
@@ -33,57 +33,57 @@ define i64 @f0(i32 %a0) nounwind {
 ; CHECK-NEXT:    [[TMP1:%.*]] = zext i32 [[A0:%.*]] to i64
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
-  %t0 = inttoptr i32 %a0 to i8*
-  %t1 = ptrtoint i8* %t0 to i64
+  %t0 = inttoptr i32 %a0 to ptr
+  %t1 = ptrtoint ptr %t0 to i64
   ret i64 %t1
 }
 
-define <4 x i32> @test4(<4 x i8*> %arg) nounwind {
+define <4 x i32> @test4(<4 x ptr> %arg) nounwind {
 ; CHECK-LABEL: @test4(
-; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint <4 x i8*> [[ARG:%.*]] to <4 x i64>
+; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint <4 x ptr> [[ARG:%.*]] to <4 x i64>
 ; CHECK-NEXT:    [[P1:%.*]] = trunc <4 x i64> [[TMP1]] to <4 x i32>
 ; CHECK-NEXT:    ret <4 x i32> [[P1]]
 ;
-  %p1 = ptrtoint <4 x i8*> %arg to <4 x i32>
+  %p1 = ptrtoint <4 x ptr> %arg to <4 x i32>
   ret <4 x i32> %p1
 }
 
-define <vscale x 4 x i32> @testvscale4(<vscale x 4 x i8*> %arg) nounwind {
+define <vscale x 4 x i32> @testvscale4(<vscale x 4 x ptr> %arg) nounwind {
 ; CHECK-LABEL: @testvscale4(
-; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint <vscale x 4 x i8*> [[ARG:%.*]] to <vscale x 4 x i64>
+; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint <vscale x 4 x ptr> [[ARG:%.*]] to <vscale x 4 x i64>
 ; CHECK-NEXT:    [[P1:%.*]] = trunc <vscale x 4 x i64> [[TMP1]] to <vscale x 4 x i32>
 ; CHECK-NEXT:    ret <vscale x 4 x i32> [[P1]]
 ;
-  %p1 = ptrtoint <vscale x 4 x i8*> %arg to <vscale x 4 x i32>
+  %p1 = ptrtoint <vscale x 4 x ptr> %arg to <vscale x 4 x i32>
   ret <vscale x 4 x i32> %p1
 }
 
-define <4 x i128> @test5(<4 x i8*> %arg) nounwind {
+define <4 x i128> @test5(<4 x ptr> %arg) nounwind {
 ; CHECK-LABEL: @test5(
-; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint <4 x i8*> [[ARG:%.*]] to <4 x i64>
+; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint <4 x ptr> [[ARG:%.*]] to <4 x i64>
 ; CHECK-NEXT:    [[P1:%.*]] = zext <4 x i64> [[TMP1]] to <4 x i128>
 ; CHECK-NEXT:    ret <4 x i128> [[P1]]
 ;
-  %p1 = ptrtoint <4 x i8*> %arg to <4 x i128>
+  %p1 = ptrtoint <4 x ptr> %arg to <4 x i128>
   ret <4 x i128> %p1
 }
 
-define <4 x i8*> @test6(<4 x i32> %arg) nounwind {
+define <4 x ptr> @test6(<4 x i32> %arg) nounwind {
 ; CHECK-LABEL: @test6(
 ; CHECK-NEXT:    [[TMP1:%.*]] = zext <4 x i32> [[ARG:%.*]] to <4 x i64>
-; CHECK-NEXT:    [[P1:%.*]] = inttoptr <4 x i64> [[TMP1]] to <4 x i8*>
-; CHECK-NEXT:    ret <4 x i8*> [[P1]]
+; CHECK-NEXT:    [[P1:%.*]] = inttoptr <4 x i64> [[TMP1]] to <4 x ptr>
+; CHECK-NEXT:    ret <4 x ptr> [[P1]]
 ;
-  %p1 = inttoptr <4 x i32> %arg to <4 x i8*>
-  ret <4 x i8*> %p1
+  %p1 = inttoptr <4 x i32> %arg to <4 x ptr>
+  ret <4 x ptr> %p1
 }
 
-define <4 x i8*> @test7(<4 x i128> %arg) nounwind {
+define <4 x ptr> @test7(<4 x i128> %arg) nounwind {
 ; CHECK-LABEL: @test7(
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc <4 x i128> [[ARG:%.*]] to <4 x i64>
-; CHECK-NEXT:    [[P1:%.*]] = inttoptr <4 x i64> [[TMP1]] to <4 x i8*>
-; CHECK-NEXT:    ret <4 x i8*> [[P1]]
+; CHECK-NEXT:    [[P1:%.*]] = inttoptr <4 x i64> [[TMP1]] to <4 x ptr>
+; CHECK-NEXT:    ret <4 x ptr> [[P1]]
 ;
-  %p1 = inttoptr <4 x i128> %arg to <4 x i8*>
-  ret <4 x i8*> %p1
+  %p1 = inttoptr <4 x i128> %arg to <4 x ptr>
+  ret <4 x ptr> %p1
 }
index 044c801b25b308a347ff00299803c1df1e8fa229..a73dc419d7e6b1921ff184b9f9a25054b5cbe151 100644 (file)
@@ -6,88 +6,86 @@ target triple = "x86_64-unknown-linux-gnu"
 
 ; icmp (inttoptr (ptrtoint p1)), p2 --> icmp p1, p2.
 
-define i1 @func(i8* %X, i8* %Y) {
+define i1 @func(ptr %X, ptr %Y) {
 ; CHECK-LABEL: @func(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8* [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %i = ptrtoint i8* %X to i64
-  %p = inttoptr i64 %i to i8*
-  %cmp = icmp eq i8* %p, %Y
+  %i = ptrtoint ptr %X to i64
+  %p = inttoptr i64 %i to ptr
+  %cmp = icmp eq ptr %p, %Y
   ret i1 %cmp
 }
 
-define i1 @func_pointer_different_types(i16* %X, i8* %Y) {
+define i1 @func_pointer_different_types(ptr %X, ptr %Y) {
 ; CHECK-LABEL: @func_pointer_different_types(
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i16* [[X:%.*]] to i8*
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8* [[TMP1]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %i = ptrtoint i16* %X to i64
-  %p = inttoptr i64 %i to i8*
-  %cmp = icmp eq i8* %p, %Y
+  %i = ptrtoint ptr %X to i64
+  %p = inttoptr i64 %i to ptr
+  %cmp = icmp eq ptr %p, %Y
   ret i1 %cmp
 }
 
-declare i8* @gen8ptr()
+declare ptr @gen8ptr()
 
-define i1 @func_commutative(i16* %X) {
+define i1 @func_commutative(ptr %X) {
 ; CHECK-LABEL: @func_commutative(
-; CHECK-NEXT:    [[Y:%.*]] = call i8* @gen8ptr()
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i16* [[X:%.*]] to i8*
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8* [[Y]], [[TMP1]]
+; CHECK-NEXT:    [[Y:%.*]] = call ptr @gen8ptr()
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[Y]], [[X:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %Y = call i8* @gen8ptr() ; thwart complexity-based canonicalization
-  %i = ptrtoint i16* %X to i64
-  %p = inttoptr i64 %i to i8*
-  %cmp = icmp eq i8* %Y, %p
+  %Y = call ptr @gen8ptr() ; thwart complexity-based canonicalization
+  %i = ptrtoint ptr %X to i64
+  %p = inttoptr i64 %i to ptr
+  %cmp = icmp eq ptr %Y, %p
   ret i1 %cmp
 }
 
 ; Negative test - Wrong Integer type.
 
-define i1 @func_integer_type_too_small(i16* %X, i8* %Y) {
+define i1 @func_integer_type_too_small(ptr %X, ptr %Y) {
 ; CHECK-LABEL: @func_integer_type_too_small(
-; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint i16* [[X:%.*]] to i64
+; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[X:%.*]] to i64
 ; CHECK-NEXT:    [[TMP2:%.*]] = and i64 [[TMP1]], 4294967295
-; CHECK-NEXT:    [[P:%.*]] = inttoptr i64 [[TMP2]] to i8*
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i8* [[P]], [[Y:%.*]]
+; CHECK-NEXT:    [[P:%.*]] = inttoptr i64 [[TMP2]] to ptr
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[P]], [[Y:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %i = ptrtoint i16* %X to i32
-  %p = inttoptr i32 %i to i8*
-  %cmp = icmp eq i8* %Y, %p
+  %i = ptrtoint ptr %X to i32
+  %p = inttoptr i32 %i to ptr
+  %cmp = icmp eq ptr %Y, %p
   ret i1 %cmp
 }
 
 ; Negative test - Pointers in different address space
 
-define i1 @func_ptr_different_addrspace(i8* %X, i16 addrspace(3)* %Y){
+define i1 @func_ptr_different_addrspace(ptr %X, ptr addrspace(3) %Y){
 ; CHECK-LABEL: @func_ptr_different_addrspace(
-; CHECK-NEXT:    [[I:%.*]] = ptrtoint i8* [[X:%.*]] to i64
-; CHECK-NEXT:    [[P:%.*]] = inttoptr i64 [[I]] to i16 addrspace(3)*
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i16 addrspace(3)* [[P]], [[Y:%.*]]
+; CHECK-NEXT:    [[I:%.*]] = ptrtoint ptr [[X:%.*]] to i64
+; CHECK-NEXT:    [[P:%.*]] = inttoptr i64 [[I]] to ptr addrspace(3)
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr addrspace(3) [[P]], [[Y:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %i = ptrtoint i8* %X to i64
-  %p = inttoptr i64 %i to i16 addrspace(3)*
-  %cmp = icmp eq i16 addrspace(3)* %Y, %p
+  %i = ptrtoint ptr %X to i64
+  %p = inttoptr i64 %i to ptr addrspace(3)
+  %cmp = icmp eq ptr addrspace(3) %Y, %p
   ret i1 %cmp
 }
 
 ; Negative test - Pointers in different address space
 
-define i1 @func_ptr_different_addrspace1(i8 addrspace(2)* %X, i16* %Y){
+define i1 @func_ptr_different_addrspace1(ptr addrspace(2) %X, ptr %Y){
 ; CHECK-LABEL: @func_ptr_different_addrspace1(
-; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint i8 addrspace(2)* [[X:%.*]] to i32
+; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr addrspace(2) [[X:%.*]] to i32
 ; CHECK-NEXT:    [[I:%.*]] = zext i32 [[TMP1]] to i64
-; CHECK-NEXT:    [[P:%.*]] = inttoptr i64 [[I]] to i16*
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i16* [[P]], [[Y:%.*]]
+; CHECK-NEXT:    [[P:%.*]] = inttoptr i64 [[I]] to ptr
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[P]], [[Y:%.*]]
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
-  %i = ptrtoint i8 addrspace(2)* %X to i64
-  %p = inttoptr i64 %i to i16*
-  %cmp = icmp eq i16* %Y, %p
+  %i = ptrtoint ptr addrspace(2) %X to i64
+  %p = inttoptr i64 %i to ptr
+  %cmp = icmp eq ptr %Y, %p
   ret i1 %cmp
 }
index fb79fc59c95c455243af1cc5f0ee3387279e127f..58d12ab9cd2ab74ebd72ed81016cbf1faa812cd8 100644 (file)
@@ -7,7 +7,7 @@
 ; targets with 16-bit int.
 
 declare i16 @putchar(i16)
-declare i16 @puts(i8*)
+declare i16 @puts(ptr)
 
 @empty = constant [1 x i8] c"\00"
 
@@ -17,8 +17,7 @@ define void @xform_puts(i16 %c) {
 ; CHECK-NEXT:    ret void
 ;
 ; Transform puts("") to putchar("\n").
-  %s = getelementptr [1 x i8], [1 x i8]* @empty, i32 0, i32 0
-  call i16 @puts(i8* %s)
+  call i16 @puts(ptr @empty)
 
   ret void
 }
index c686bb1e1e108a53f544db05e097e79da63452fd..c6b69f2f2c249673a256e7ab964020f01d4fa230 100644 (file)
@@ -2,31 +2,31 @@
 
 declare void @readnone_but_may_throw() readnone
 
-define void @f_0(i32* %ptr) {
+define void @f_0(ptr %ptr) {
 ; CHECK-LABEL: @f_0(
 entry:
-; CHECK:  store i32 10, i32* %ptr
+; CHECK:  store i32 10, ptr %ptr
 ; CHECK-NEXT:  call void @readnone_but_may_throw()
-; CHECK-NEXT:  store i32 20, i32* %ptr, align 4
+; CHECK-NEXT:  store i32 20, ptr %ptr, align 4
 ; CHECK:  ret void
 
-  store i32 10, i32* %ptr
+  store i32 10, ptr %ptr
   call void @readnone_but_may_throw()
-  store i32 20, i32* %ptr
+  store i32 20, ptr %ptr
   ret void
 }
 
-define void @f_1(i1 %cond, i32* %ptr) {
+define void @f_1(i1 %cond, ptr %ptr) {
 ; CHECK-LABEL: @f_1(
-; CHECK:  store i32 10, i32* %ptr
+; CHECK:  store i32 10, ptr %ptr
 ; CHECK-NEXT:  call void @readnone_but_may_throw()
 
-  store i32 10, i32* %ptr
+  store i32 10, ptr %ptr
   call void @readnone_but_may_throw()
   br i1 %cond, label %left, label %merge
 
 left:
-  store i32 20, i32* %ptr
+  store i32 20, ptr %ptr
   br label %merge
 
 merge:
index 605e921cc28a01c1152e02f4ebcf25a7c023d1e6..edda8b6072af9a1fd1d750cbb9292257b1bfc268 100644 (file)
@@ -1,18 +1,18 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --scrub-attributes
 ; RUN: opt -S -passes=instcombine < %s | FileCheck %s
 
-define dso_local void @_Z3fooPv(i8* nocapture %0) local_unnamed_addr #0 {
+define dso_local void @_Z3fooPv(ptr nocapture %0) local_unnamed_addr #0 {
 ; CHECK-LABEL: @_Z3fooPv(
-; CHECK-NEXT:    tail call void @free(i8* [[TMP0:%.*]])
+; CHECK-NEXT:    tail call void @free(ptr [[TMP0:%.*]])
 ; CHECK-NEXT:    ret void
 ;
-  %2 = tail call align 16 dereferenceable_or_null(6) i8* @realloc(i8* %0, i64 6) #3
-  tail call void @free(i8* %2) #3
+  %2 = tail call align 16 dereferenceable_or_null(6) ptr @realloc(ptr %0, i64 6) #3
+  tail call void @free(ptr %2) #3
   ret void
 }
 
-declare dso_local noalias noundef i8* @realloc(i8* allocptr nocapture, i64 noundef) local_unnamed_addr #1
-declare dso_local void @free(i8* allocptr nocapture noundef) local_unnamed_addr #2
+declare dso_local noalias noundef ptr @realloc(ptr allocptr nocapture, i64 noundef) local_unnamed_addr #1
+declare dso_local void @free(ptr allocptr nocapture noundef) local_unnamed_addr #2
 
 attributes #0 = { mustprogress nounwind uwtable willreturn }
 attributes #1 = { inaccessiblemem_or_argmemonly mustprogress nounwind willreturn allockind("realloc") }
index 81b54225518f3058903e3923eeeb95cbd6c1409e..1542707d79c1ae973ef48223f34a4d0426eef44b 100644 (file)
@@ -1,24 +1,24 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare i8* @realloc(i8* allocptr, i64) allockind("realloc") allocsize(1)
-declare noalias i8* @malloc(i64) allockind("alloc,uninitialized")
+declare ptr @realloc(ptr allocptr, i64) allockind("realloc") allocsize(1)
+declare noalias ptr @malloc(i64) allockind("alloc,uninitialized")
 
 
-define i8* @realloc_null_ptr() #0 {
+define ptr @realloc_null_ptr() #0 {
 ; CHECK-LABEL: @realloc_null_ptr(
-; CHECK-NEXT:    [[MALLOC:%.*]] = call dereferenceable_or_null(100) i8* @malloc(i64 100)
-; CHECK-NEXT:    ret i8* [[MALLOC]]
+; CHECK-NEXT:    [[MALLOC:%.*]] = call dereferenceable_or_null(100) ptr @malloc(i64 100)
+; CHECK-NEXT:    ret ptr [[MALLOC]]
 ;
-  %call = call i8* @realloc(i8* null, i64 100) #2
-  ret i8* %call
+  %call = call ptr @realloc(ptr null, i64 100) #2
+  ret ptr %call
 }
 
-define i8* @realloc_unknown_ptr(i8* %ptr) #0 {
+define ptr @realloc_unknown_ptr(ptr %ptr) #0 {
 ; CHECK-LABEL: @realloc_unknown_ptr(
-; CHECK-NEXT:    [[CALL:%.*]] = call dereferenceable_or_null(100) i8* @realloc(i8* [[PTR:%.*]], i64 100)
-; CHECK-NEXT:    ret i8* [[CALL]]
+; CHECK-NEXT:    [[CALL:%.*]] = call dereferenceable_or_null(100) ptr @realloc(ptr [[PTR:%.*]], i64 100)
+; CHECK-NEXT:    ret ptr [[CALL]]
 ;
-  %call = call i8* @realloc(i8* %ptr, i64 100) #2
-  ret i8* %call
+  %call = call ptr @realloc(ptr %ptr, i64 100) #2
+  ret ptr %call
 }
index c0ffdbceccc0030c131fe5bb034c007d1e577950..74fdbf388373bef4149115c093416ade830645b5 100644 (file)
@@ -59,13 +59,13 @@ loop:                                             ; preds = %loop, %entry
   br label %loop
 }
 
-define i64 @test_or4(i64 %a, i64* %p) {
+define i64 @test_or4(i64 %a, ptr %p) {
 ; CHECK-LABEL: @test_or4(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[LOOP:%.*]]
 ; CHECK:       loop:
 ; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ [[A:%.*]], [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
-; CHECK-NEXT:    [[STEP:%.*]] = load volatile i64, i64* [[P:%.*]], align 4
+; CHECK-NEXT:    [[STEP:%.*]] = load volatile i64, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[IV_NEXT]] = or i64 [[IV]], [[STEP]]
 ; CHECK-NEXT:    tail call void @use(i64 [[IV_NEXT]])
 ; CHECK-NEXT:    br label [[LOOP]]
@@ -75,7 +75,7 @@ entry:
 
 loop:                                             ; preds = %loop, %entry
   %iv = phi i64 [ %a, %entry ], [ %iv.next, %loop ]
-  %step = load volatile i64, i64* %p
+  %step = load volatile i64, ptr %p
   %iv.next = or i64 %iv, %step
   tail call void @use(i64 %iv.next)
   br label %loop
@@ -140,13 +140,13 @@ loop:                                             ; preds = %loop, %entry
 }
 
 
-define i64 @test_and4(i64 %a, i64* %p) {
+define i64 @test_and4(i64 %a, ptr %p) {
 ; CHECK-LABEL: @test_and4(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[LOOP:%.*]]
 ; CHECK:       loop:
 ; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ [[A:%.*]], [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
-; CHECK-NEXT:    [[STEP:%.*]] = load volatile i64, i64* [[P:%.*]], align 4
+; CHECK-NEXT:    [[STEP:%.*]] = load volatile i64, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[IV_NEXT]] = and i64 [[IV]], [[STEP]]
 ; CHECK-NEXT:    tail call void @use(i64 [[IV_NEXT]])
 ; CHECK-NEXT:    br label [[LOOP]]
@@ -156,7 +156,7 @@ entry:
 
 loop:                                             ; preds = %loop, %entry
   %iv = phi i64 [ %a, %entry ], [ %iv.next, %loop ]
-  %step = load volatile i64, i64* %p
+  %step = load volatile i64, ptr %p
   %iv.next = and i64 %iv, %step
   tail call void @use(i64 %iv.next)
   br label %loop
index 40f5c0fdc95de350b1109f6d769b04c59358b662..cc450ecb1c1ef9b3d732b439d73a2e21deefb7ff 100644 (file)
@@ -72,13 +72,13 @@ define i8 @reduce_add_zext_long_external_use(<128 x i1> %x) {
 ; CHECK-NEXT:    [[TMP4:%.*]] = sub i8 0, [[TMP3]]
 ; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <128 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = sext i1 [[TMP5]] to i8
-; CHECK-NEXT:    store i8 [[EXT]], i8* @glob, align 1
+; CHECK-NEXT:    store i8 [[EXT]], ptr @glob, align 1
 ; CHECK-NEXT:    ret i8 [[TMP4]]
 ;
   %sext = sext <128 x i1> %x to <128 x i8>
   %res = call i8 @llvm.vector.reduce.add.v128i8(<128 x i8> %sext)
   %ext = extractelement <128 x i8> %sext, i32 0
-  store i8 %ext, i8* @glob, align 1
+  store i8 %ext, ptr @glob, align 1
   ret i8 %res
 }
 
@@ -90,13 +90,13 @@ define i64 @reduce_add_zext_external_use(<8 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = zext i8 [[TMP2]] to i64
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <8 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = zext i1 [[TMP4]] to i64
-; CHECK-NEXT:    store i64 [[EXT]], i64* @glob1, align 8
+; CHECK-NEXT:    store i64 [[EXT]], ptr @glob1, align 8
 ; CHECK-NEXT:    ret i64 [[TMP3]]
 ;
   %zext = zext <8 x i1> %x to <8 x i64>
   %res = call i64 @llvm.vector.reduce.add.v8i64(<8 x i64> %zext)
   %ext = extractelement <8 x i64> %zext, i32 0
-  store i64 %ext, i64* @glob1, align 8
+  store i64 %ext, ptr @glob1, align 8
   ret i64 %res
 }
 
index 3311f13df4333865008647f2be2a32189fd8d0f1..52a2a2cd42903f05ce411940d010087c10552bfc 100644 (file)
@@ -69,13 +69,13 @@ define i8 @reduce_and_zext_long_external_use(<128 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = sext i1 [[TMP2]] to i8
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <128 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = sext i1 [[TMP4]] to i8
-; CHECK-NEXT:    store i8 [[EXT]], i8* @glob, align 1
+; CHECK-NEXT:    store i8 [[EXT]], ptr @glob, align 1
 ; CHECK-NEXT:    ret i8 [[TMP3]]
 ;
   %sext = sext <128 x i1> %x to <128 x i8>
   %res = call i8 @llvm.vector.reduce.and.v128i8(<128 x i8> %sext)
   %ext = extractelement <128 x i8> %sext, i32 0
-  store i8 %ext, i8* @glob, align 1
+  store i8 %ext, ptr @glob, align 1
   ret i8 %res
 }
 
@@ -87,96 +87,80 @@ define i64 @reduce_and_zext_external_use(<8 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = zext i1 [[TMP2]] to i64
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <8 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = zext i1 [[TMP4]] to i64
-; CHECK-NEXT:    store i64 [[EXT]], i64* @glob1, align 8
+; CHECK-NEXT:    store i64 [[EXT]], ptr @glob1, align 8
 ; CHECK-NEXT:    ret i64 [[TMP3]]
 ;
   %zext = zext <8 x i1> %x to <8 x i64>
   %res = call i64 @llvm.vector.reduce.and.v8i64(<8 x i64> %zext)
   %ext = extractelement <8 x i64> %zext, i32 0
-  store i64 %ext, i64* @glob1, align 8
+  store i64 %ext, ptr @glob1, align 8
   ret i64 %res
 }
 
-define i1 @reduce_and_pointer_cast(i8* %arg, i8* %arg1) {
+define i1 @reduce_and_pointer_cast(ptr %arg, ptr %arg1) {
 ; CHECK-LABEL: @reduce_and_pointer_cast(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i8* [[ARG1:%.*]] to i64*
-; CHECK-NEXT:    [[LHS1:%.*]] = load i64, i64* [[TMP0]], align 8
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8* [[ARG:%.*]] to i64*
-; CHECK-NEXT:    [[RHS2:%.*]] = load i64, i64* [[TMP1]], align 8
+; CHECK-NEXT:    [[LHS1:%.*]] = load i64, ptr [[ARG1:%.*]], align 8
+; CHECK-NEXT:    [[RHS2:%.*]] = load i64, ptr [[ARG:%.*]], align 8
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i64 [[LHS1]], [[RHS2]]
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
 bb:
-  %ptr1 = bitcast i8* %arg1 to <8 x i8>*
-  %ptr2 = bitcast i8* %arg to <8 x i8>*
-  %lhs = load <8 x i8>, <8 x i8>* %ptr1
-  %rhs = load <8 x i8>, <8 x i8>* %ptr2
+  %lhs = load <8 x i8>, ptr %arg1
+  %rhs = load <8 x i8>, ptr %arg
   %cmp = icmp eq <8 x i8> %lhs, %rhs
   %all_eq = call i1 @llvm.vector.reduce.and.v8i32(<8 x i1> %cmp)
   ret i1 %all_eq
 }
 
-define i1 @reduce_and_pointer_cast_wide(i8* %arg, i8* %arg1) {
+define i1 @reduce_and_pointer_cast_wide(ptr %arg, ptr %arg1) {
 ; CHECK-LABEL: @reduce_and_pointer_cast_wide(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[PTR1:%.*]] = bitcast i8* [[ARG1:%.*]] to <8 x i16>*
-; CHECK-NEXT:    [[PTR2:%.*]] = bitcast i8* [[ARG:%.*]] to <8 x i16>*
-; CHECK-NEXT:    [[LHS:%.*]] = load <8 x i16>, <8 x i16>* [[PTR1]], align 16
-; CHECK-NEXT:    [[RHS:%.*]] = load <8 x i16>, <8 x i16>* [[PTR2]], align 16
+; CHECK-NEXT:    [[LHS:%.*]] = load <8 x i16>, ptr [[ARG1:%.*]], align 16
+; CHECK-NEXT:    [[RHS:%.*]] = load <8 x i16>, ptr [[ARG:%.*]], align 16
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ne <8 x i16> [[LHS]], [[RHS]]
 ; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i1> [[CMP]] to i8
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i8 [[TMP0]], 0
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
 bb:
-  %ptr1 = bitcast i8* %arg1 to <8 x i16>*
-  %ptr2 = bitcast i8* %arg to <8 x i16>*
-  %lhs = load <8 x i16>, <8 x i16>* %ptr1
-  %rhs = load <8 x i16>, <8 x i16>* %ptr2
+  %lhs = load <8 x i16>, ptr %arg1
+  %rhs = load <8 x i16>, ptr %arg
   %cmp = icmp eq <8 x i16> %lhs, %rhs
   %all_eq = call i1 @llvm.vector.reduce.and.v8i32(<8 x i1> %cmp)
   ret i1 %all_eq
 }
 
-define i1 @reduce_and_pointer_cast_ne(i8* %arg, i8* %arg1) {
+define i1 @reduce_and_pointer_cast_ne(ptr %arg, ptr %arg1) {
 ; CHECK-LABEL: @reduce_and_pointer_cast_ne(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i8* [[ARG1:%.*]] to i64*
-; CHECK-NEXT:    [[LHS1:%.*]] = load i64, i64* [[TMP0]], align 8
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8* [[ARG:%.*]] to i64*
-; CHECK-NEXT:    [[RHS2:%.*]] = load i64, i64* [[TMP1]], align 8
+; CHECK-NEXT:    [[LHS1:%.*]] = load i64, ptr [[ARG1:%.*]], align 8
+; CHECK-NEXT:    [[RHS2:%.*]] = load i64, ptr [[ARG:%.*]], align 8
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i64 [[LHS1]], [[RHS2]]
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
 bb:
-  %ptr1 = bitcast i8* %arg1 to <8 x i8>*
-  %ptr2 = bitcast i8* %arg to <8 x i8>*
-  %lhs = load <8 x i8>, <8 x i8>* %ptr1
-  %rhs = load <8 x i8>, <8 x i8>* %ptr2
+  %lhs = load <8 x i8>, ptr %arg1
+  %rhs = load <8 x i8>, ptr %arg
   %cmp = icmp eq <8 x i8> %lhs, %rhs
   %all_eq = call i1 @llvm.vector.reduce.and.v8i32(<8 x i1> %cmp)
   %any_ne = xor i1 %all_eq, 1
   ret i1 %any_ne
 }
 
-define i1 @reduce_and_pointer_cast_ne_wide(i8* %arg, i8* %arg1) {
+define i1 @reduce_and_pointer_cast_ne_wide(ptr %arg, ptr %arg1) {
 ; CHECK-LABEL: @reduce_and_pointer_cast_ne_wide(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[PTR1:%.*]] = bitcast i8* [[ARG1:%.*]] to <8 x i16>*
-; CHECK-NEXT:    [[PTR2:%.*]] = bitcast i8* [[ARG:%.*]] to <8 x i16>*
-; CHECK-NEXT:    [[LHS:%.*]] = load <8 x i16>, <8 x i16>* [[PTR1]], align 16
-; CHECK-NEXT:    [[RHS:%.*]] = load <8 x i16>, <8 x i16>* [[PTR2]], align 16
+; CHECK-NEXT:    [[LHS:%.*]] = load <8 x i16>, ptr [[ARG1:%.*]], align 16
+; CHECK-NEXT:    [[RHS:%.*]] = load <8 x i16>, ptr [[ARG:%.*]], align 16
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ne <8 x i16> [[LHS]], [[RHS]]
 ; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i1> [[CMP]] to i8
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne i8 [[TMP0]], 0
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
 bb:
-  %ptr1 = bitcast i8* %arg1 to <8 x i16>*
-  %ptr2 = bitcast i8* %arg to <8 x i16>*
-  %lhs = load <8 x i16>, <8 x i16>* %ptr1
-  %rhs = load <8 x i16>, <8 x i16>* %ptr2
+  %lhs = load <8 x i16>, ptr %arg1
+  %rhs = load <8 x i16>, ptr %arg
   %cmp = icmp eq <8 x i16> %lhs, %rhs
   %all_eq = call i1 @llvm.vector.reduce.and.v8i32(<8 x i1> %cmp)
   %any_ne = xor i1 %all_eq, 1
index 012129ef6fed88c4eb57b1635a02ded2a70cc3d1..8214bad098af8be8ed9e43f561541e40b6991c10 100644 (file)
@@ -67,13 +67,13 @@ define i8 @reduce_mul_zext_long_external_use(<128 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = zext i1 [[TMP2]] to i8
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <128 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = sext i1 [[TMP4]] to i8
-; CHECK-NEXT:    store i8 [[EXT]], i8* @glob, align 1
+; CHECK-NEXT:    store i8 [[EXT]], ptr @glob, align 1
 ; CHECK-NEXT:    ret i8 [[TMP3]]
 ;
   %sext = sext <128 x i1> %x to <128 x i8>
   %res = call i8 @llvm.vector.reduce.mul.v128i8(<128 x i8> %sext)
   %ext = extractelement <128 x i8> %sext, i32 0
-  store i8 %ext, i8* @glob, align 1
+  store i8 %ext, ptr @glob, align 1
   ret i8 %res
 }
 
@@ -85,13 +85,13 @@ define i64 @reduce_mul_zext_external_use(<8 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = zext i1 [[TMP2]] to i64
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <8 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = zext i1 [[TMP4]] to i64
-; CHECK-NEXT:    store i64 [[EXT]], i64* @glob1, align 8
+; CHECK-NEXT:    store i64 [[EXT]], ptr @glob1, align 8
 ; CHECK-NEXT:    ret i64 [[TMP3]]
 ;
   %zext = zext <8 x i1> %x to <8 x i64>
   %res = call i64 @llvm.vector.reduce.mul.v8i64(<8 x i64> %zext)
   %ext = extractelement <8 x i64> %zext, i32 0
-  store i64 %ext, i64* @glob1, align 8
+  store i64 %ext, ptr @glob1, align 8
   ret i64 %res
 }
 
index 502aed25fde78630ac09f18bc7e8eb980f1789e6..80c1d97d2ebe3b7f05c21dd96e371724df0aad6e 100644 (file)
@@ -69,13 +69,13 @@ define i8 @reduce_or_zext_long_external_use(<128 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = sext i1 [[TMP2]] to i8
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <128 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = sext i1 [[TMP4]] to i8
-; CHECK-NEXT:    store i8 [[EXT]], i8* @glob, align 1
+; CHECK-NEXT:    store i8 [[EXT]], ptr @glob, align 1
 ; CHECK-NEXT:    ret i8 [[TMP3]]
 ;
   %sext = sext <128 x i1> %x to <128 x i8>
   %res = call i8 @llvm.vector.reduce.or.v128i8(<128 x i8> %sext)
   %ext = extractelement <128 x i8> %sext, i32 0
-  store i8 %ext, i8* @glob, align 1
+  store i8 %ext, ptr @glob, align 1
   ret i8 %res
 }
 
@@ -87,54 +87,46 @@ define i64 @reduce_or_zext_external_use(<8 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = zext i1 [[TMP2]] to i64
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <8 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = zext i1 [[TMP4]] to i64
-; CHECK-NEXT:    store i64 [[EXT]], i64* @glob1, align 8
+; CHECK-NEXT:    store i64 [[EXT]], ptr @glob1, align 8
 ; CHECK-NEXT:    ret i64 [[TMP3]]
 ;
   %zext = zext <8 x i1> %x to <8 x i64>
   %res = call i64 @llvm.vector.reduce.or.v8i64(<8 x i64> %zext)
   %ext = extractelement <8 x i64> %zext, i32 0
-  store i64 %ext, i64* @glob1, align 8
+  store i64 %ext, ptr @glob1, align 8
   ret i64 %res
 }
 
-define i1 @reduce_or_pointer_cast(i8* %arg, i8* %arg1) {
+define i1 @reduce_or_pointer_cast(ptr %arg, ptr %arg1) {
 ; CHECK-LABEL: @reduce_or_pointer_cast(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i8* [[ARG1:%.*]] to i64*
-; CHECK-NEXT:    [[LHS1:%.*]] = load i64, i64* [[TMP0]], align 8
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8* [[ARG:%.*]] to i64*
-; CHECK-NEXT:    [[RHS2:%.*]] = load i64, i64* [[TMP1]], align 8
+; CHECK-NEXT:    [[LHS1:%.*]] = load i64, ptr [[ARG1:%.*]], align 8
+; CHECK-NEXT:    [[RHS2:%.*]] = load i64, ptr [[ARG:%.*]], align 8
 ; CHECK-NEXT:    [[DOTNOT:%.*]] = icmp eq i64 [[LHS1]], [[RHS2]]
 ; CHECK-NEXT:    ret i1 [[DOTNOT]]
 ;
 bb:
-  %ptr1 = bitcast i8* %arg1 to <8 x i8>*
-  %ptr2 = bitcast i8* %arg to <8 x i8>*
-  %lhs = load <8 x i8>, <8 x i8>* %ptr1
-  %rhs = load <8 x i8>, <8 x i8>* %ptr2
+  %lhs = load <8 x i8>, ptr %arg1
+  %rhs = load <8 x i8>, ptr %arg
   %cmp = icmp ne <8 x i8> %lhs, %rhs
   %any_ne = call i1 @llvm.vector.reduce.or.v8i32(<8 x i1> %cmp)
   %all_eq = xor i1 %any_ne, 1
   ret i1 %all_eq
 }
 
-define i1 @reduce_or_pointer_cast_wide(i8* %arg, i8* %arg1) {
+define i1 @reduce_or_pointer_cast_wide(ptr %arg, ptr %arg1) {
 ; CHECK-LABEL: @reduce_or_pointer_cast_wide(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[PTR1:%.*]] = bitcast i8* [[ARG1:%.*]] to <8 x i16>*
-; CHECK-NEXT:    [[PTR2:%.*]] = bitcast i8* [[ARG:%.*]] to <8 x i16>*
-; CHECK-NEXT:    [[LHS:%.*]] = load <8 x i16>, <8 x i16>* [[PTR1]], align 16
-; CHECK-NEXT:    [[RHS:%.*]] = load <8 x i16>, <8 x i16>* [[PTR2]], align 16
+; CHECK-NEXT:    [[LHS:%.*]] = load <8 x i16>, ptr [[ARG1:%.*]], align 16
+; CHECK-NEXT:    [[RHS:%.*]] = load <8 x i16>, ptr [[ARG:%.*]], align 16
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ne <8 x i16> [[LHS]], [[RHS]]
 ; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i1> [[CMP]] to i8
 ; CHECK-NEXT:    [[DOTNOT:%.*]] = icmp eq i8 [[TMP0]], 0
 ; CHECK-NEXT:    ret i1 [[DOTNOT]]
 ;
 bb:
-  %ptr1 = bitcast i8* %arg1 to <8 x i16>*
-  %ptr2 = bitcast i8* %arg to <8 x i16>*
-  %lhs = load <8 x i16>, <8 x i16>* %ptr1
-  %rhs = load <8 x i16>, <8 x i16>* %ptr2
+  %lhs = load <8 x i16>, ptr %arg1
+  %rhs = load <8 x i16>, ptr %arg
   %cmp = icmp ne <8 x i16> %lhs, %rhs
   %any_ne = call i1 @llvm.vector.reduce.or.v8i32(<8 x i1> %cmp)
   %all_eq = xor i1 %any_ne, 1
@@ -142,43 +134,35 @@ bb:
 }
 
 
-define i1 @reduce_or_pointer_cast_ne(i8* %arg, i8* %arg1) {
+define i1 @reduce_or_pointer_cast_ne(ptr %arg, ptr %arg1) {
 ; CHECK-LABEL: @reduce_or_pointer_cast_ne(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast i8* [[ARG1:%.*]] to i64*
-; CHECK-NEXT:    [[LHS1:%.*]] = load i64, i64* [[TMP0]], align 8
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8* [[ARG:%.*]] to i64*
-; CHECK-NEXT:    [[RHS2:%.*]] = load i64, i64* [[TMP1]], align 8
+; CHECK-NEXT:    [[LHS1:%.*]] = load i64, ptr [[ARG1:%.*]], align 8
+; CHECK-NEXT:    [[RHS2:%.*]] = load i64, ptr [[ARG:%.*]], align 8
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i64 [[LHS1]], [[RHS2]]
 ; CHECK-NEXT:    ret i1 [[TMP2]]
 ;
 bb:
-  %ptr1 = bitcast i8* %arg1 to <8 x i8>*
-  %ptr2 = bitcast i8* %arg to <8 x i8>*
-  %lhs = load <8 x i8>, <8 x i8>* %ptr1
-  %rhs = load <8 x i8>, <8 x i8>* %ptr2
+  %lhs = load <8 x i8>, ptr %arg1
+  %rhs = load <8 x i8>, ptr %arg
   %cmp = icmp ne <8 x i8> %lhs, %rhs
   %any_ne = call i1 @llvm.vector.reduce.or.v8i32(<8 x i1> %cmp)
   ret i1 %any_ne
 }
 
-define i1 @reduce_or_pointer_cast_ne_wide(i8* %arg, i8* %arg1) {
+define i1 @reduce_or_pointer_cast_ne_wide(ptr %arg, ptr %arg1) {
 ; CHECK-LABEL: @reduce_or_pointer_cast_ne_wide(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[PTR1:%.*]] = bitcast i8* [[ARG1:%.*]] to <8 x i16>*
-; CHECK-NEXT:    [[PTR2:%.*]] = bitcast i8* [[ARG:%.*]] to <8 x i16>*
-; CHECK-NEXT:    [[LHS:%.*]] = load <8 x i16>, <8 x i16>* [[PTR1]], align 16
-; CHECK-NEXT:    [[RHS:%.*]] = load <8 x i16>, <8 x i16>* [[PTR2]], align 16
+; CHECK-NEXT:    [[LHS:%.*]] = load <8 x i16>, ptr [[ARG1:%.*]], align 16
+; CHECK-NEXT:    [[RHS:%.*]] = load <8 x i16>, ptr [[ARG:%.*]], align 16
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ne <8 x i16> [[LHS]], [[RHS]]
 ; CHECK-NEXT:    [[TMP0:%.*]] = bitcast <8 x i1> [[CMP]] to i8
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne i8 [[TMP0]], 0
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
 bb:
-  %ptr1 = bitcast i8* %arg1 to <8 x i16>*
-  %ptr2 = bitcast i8* %arg to <8 x i16>*
-  %lhs = load <8 x i16>, <8 x i16>* %ptr1
-  %rhs = load <8 x i16>, <8 x i16>* %ptr2
+  %lhs = load <8 x i16>, ptr %arg1
+  %rhs = load <8 x i16>, ptr %arg
   %cmp = icmp ne <8 x i16> %lhs, %rhs
   %any_ne = call i1 @llvm.vector.reduce.or.v8i32(<8 x i1> %cmp)
   ret i1 %any_ne
index e1973954d3acdb4734ea4dd6eb5581df74359aad..a2ac7ac189c7071a514e658e1192fde37c12e7b1 100644 (file)
@@ -67,13 +67,13 @@ define i8 @reduce_smax_zext_long_external_use(<128 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = sext i1 [[TMP2]] to i8
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <128 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = sext i1 [[TMP4]] to i8
-; CHECK-NEXT:    store i8 [[EXT]], i8* @glob, align 1
+; CHECK-NEXT:    store i8 [[EXT]], ptr @glob, align 1
 ; CHECK-NEXT:    ret i8 [[TMP3]]
 ;
   %sext = sext <128 x i1> %x to <128 x i8>
   %res = call i8 @llvm.vector.reduce.smax.v128i8(<128 x i8> %sext)
   %ext = extractelement <128 x i8> %sext, i32 0
-  store i8 %ext, i8* @glob, align 1
+  store i8 %ext, ptr @glob, align 1
   ret i8 %res
 }
 
@@ -85,13 +85,13 @@ define i64 @reduce_smax_zext_external_use(<8 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = zext i1 [[TMP2]] to i64
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <8 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = zext i1 [[TMP4]] to i64
-; CHECK-NEXT:    store i64 [[EXT]], i64* @glob1, align 8
+; CHECK-NEXT:    store i64 [[EXT]], ptr @glob1, align 8
 ; CHECK-NEXT:    ret i64 [[TMP3]]
 ;
   %zext = zext <8 x i1> %x to <8 x i64>
   %res = call i64 @llvm.vector.reduce.smax.v8i64(<8 x i64> %zext)
   %ext = extractelement <8 x i64> %zext, i32 0
-  store i64 %ext, i64* @glob1, align 8
+  store i64 %ext, ptr @glob1, align 8
   ret i64 %res
 }
 
index c7d55bbf130bf94c1c57811d336a28b28f3161a5..1050f617385b69f765a03494c32eca445737a600 100644 (file)
@@ -67,13 +67,13 @@ define i8 @reduce_smin_zext_long_external_use(<128 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = sext i1 [[TMP2]] to i8
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <128 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = sext i1 [[TMP4]] to i8
-; CHECK-NEXT:    store i8 [[EXT]], i8* @glob, align 1
+; CHECK-NEXT:    store i8 [[EXT]], ptr @glob, align 1
 ; CHECK-NEXT:    ret i8 [[TMP3]]
 ;
   %sext = sext <128 x i1> %x to <128 x i8>
   %res = call i8 @llvm.vector.reduce.smin.v128i8(<128 x i8> %sext)
   %ext = extractelement <128 x i8> %sext, i32 0
-  store i8 %ext, i8* @glob, align 1
+  store i8 %ext, ptr @glob, align 1
   ret i8 %res
 }
 
@@ -85,13 +85,13 @@ define i64 @reduce_smin_zext_external_use(<8 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = zext i1 [[TMP2]] to i64
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <8 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = zext i1 [[TMP4]] to i64
-; CHECK-NEXT:    store i64 [[EXT]], i64* @glob1, align 8
+; CHECK-NEXT:    store i64 [[EXT]], ptr @glob1, align 8
 ; CHECK-NEXT:    ret i64 [[TMP3]]
 ;
   %zext = zext <8 x i1> %x to <8 x i64>
   %res = call i64 @llvm.vector.reduce.smin.v8i64(<8 x i64> %zext)
   %ext = extractelement <8 x i64> %zext, i32 0
-  store i64 %ext, i64* @glob1, align 8
+  store i64 %ext, ptr @glob1, align 8
   ret i64 %res
 }
 
index bdd3ed6fc82bba82e186e8d6d1a939a6fd5c7263..73ce5840c17a692373e027847c22eae54c6169f9 100644 (file)
@@ -67,13 +67,13 @@ define i8 @reduce_umax_zext_long_external_use(<128 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = sext i1 [[TMP2]] to i8
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <128 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = sext i1 [[TMP4]] to i8
-; CHECK-NEXT:    store i8 [[EXT]], i8* @glob, align 1
+; CHECK-NEXT:    store i8 [[EXT]], ptr @glob, align 1
 ; CHECK-NEXT:    ret i8 [[TMP3]]
 ;
   %sext = sext <128 x i1> %x to <128 x i8>
   %res = call i8 @llvm.vector.reduce.umax.v128i8(<128 x i8> %sext)
   %ext = extractelement <128 x i8> %sext, i32 0
-  store i8 %ext, i8* @glob, align 1
+  store i8 %ext, ptr @glob, align 1
   ret i8 %res
 }
 
@@ -85,13 +85,13 @@ define i64 @reduce_umax_zext_external_use(<8 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = zext i1 [[TMP2]] to i64
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <8 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = zext i1 [[TMP4]] to i64
-; CHECK-NEXT:    store i64 [[EXT]], i64* @glob1, align 8
+; CHECK-NEXT:    store i64 [[EXT]], ptr @glob1, align 8
 ; CHECK-NEXT:    ret i64 [[TMP3]]
 ;
   %zext = zext <8 x i1> %x to <8 x i64>
   %res = call i64 @llvm.vector.reduce.umax.v8i64(<8 x i64> %zext)
   %ext = extractelement <8 x i64> %zext, i32 0
-  store i64 %ext, i64* @glob1, align 8
+  store i64 %ext, ptr @glob1, align 8
   ret i64 %res
 }
 
index 90ffee7145ae3eec7d843512ed3672d30cc5e5f7..3e12a1311b148ab110374ea726e16a4e4364ef0b 100644 (file)
@@ -67,13 +67,13 @@ define i8 @reduce_umin_zext_long_external_use(<128 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = sext i1 [[TMP2]] to i8
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <128 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = sext i1 [[TMP4]] to i8
-; CHECK-NEXT:    store i8 [[EXT]], i8* @glob, align 1
+; CHECK-NEXT:    store i8 [[EXT]], ptr @glob, align 1
 ; CHECK-NEXT:    ret i8 [[TMP3]]
 ;
   %sext = sext <128 x i1> %x to <128 x i8>
   %res = call i8 @llvm.vector.reduce.umin.v128i8(<128 x i8> %sext)
   %ext = extractelement <128 x i8> %sext, i32 0
-  store i8 %ext, i8* @glob, align 1
+  store i8 %ext, ptr @glob, align 1
   ret i8 %res
 }
 
@@ -85,13 +85,13 @@ define i64 @reduce_umin_zext_external_use(<8 x i1> %x) {
 ; CHECK-NEXT:    [[TMP3:%.*]] = zext i1 [[TMP2]] to i64
 ; CHECK-NEXT:    [[TMP4:%.*]] = extractelement <8 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = zext i1 [[TMP4]] to i64
-; CHECK-NEXT:    store i64 [[EXT]], i64* @glob1, align 8
+; CHECK-NEXT:    store i64 [[EXT]], ptr @glob1, align 8
 ; CHECK-NEXT:    ret i64 [[TMP3]]
 ;
   %zext = zext <8 x i1> %x to <8 x i64>
   %res = call i64 @llvm.vector.reduce.umin.v8i64(<8 x i64> %zext)
   %ext = extractelement <8 x i64> %zext, i32 0
-  store i64 %ext, i64* @glob1, align 8
+  store i64 %ext, ptr @glob1, align 8
   ret i64 %res
 }
 
index 90151d1591fa084547f7e0b9bc1ffe1e1681fef9..68864d5d05884eb447d28b736a25ff7d6f9a57d4 100644 (file)
@@ -77,13 +77,13 @@ define i8 @reduce_xor_zext_long_external_use(<128 x i1> %x) {
 ; CHECK-NEXT:    [[TMP5:%.*]] = sub nsw i8 0, [[TMP4]]
 ; CHECK-NEXT:    [[TMP6:%.*]] = extractelement <128 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = sext i1 [[TMP6]] to i8
-; CHECK-NEXT:    store i8 [[EXT]], i8* @glob, align 1
+; CHECK-NEXT:    store i8 [[EXT]], ptr @glob, align 1
 ; CHECK-NEXT:    ret i8 [[TMP5]]
 ;
   %sext = sext <128 x i1> %x to <128 x i8>
   %res = call i8 @llvm.vector.reduce.xor.v128i8(<128 x i8> %sext)
   %ext = extractelement <128 x i8> %sext, i32 0
-  store i8 %ext, i8* @glob, align 1
+  store i8 %ext, ptr @glob, align 1
   ret i8 %res
 }
 
@@ -96,13 +96,13 @@ define i64 @reduce_xor_zext_external_use(<8 x i1> %x) {
 ; CHECK-NEXT:    [[TMP4:%.*]] = zext i8 [[TMP3]] to i64
 ; CHECK-NEXT:    [[TMP5:%.*]] = extractelement <8 x i1> [[X]], i64 0
 ; CHECK-NEXT:    [[EXT:%.*]] = zext i1 [[TMP5]] to i64
-; CHECK-NEXT:    store i64 [[EXT]], i64* @glob1, align 8
+; CHECK-NEXT:    store i64 [[EXT]], ptr @glob1, align 8
 ; CHECK-NEXT:    ret i64 [[TMP4]]
 ;
   %zext = zext <8 x i1> %x to <8 x i64>
   %res = call i64 @llvm.vector.reduce.xor.v8i64(<8 x i64> %zext)
   %ext = extractelement <8 x i64> %zext, i32 0
-  store i64 %ext, i64* @glob1, align 8
+  store i64 %ext, ptr @glob1, align 8
   ret i64 %res
 }
 
index 4befc68055837b7b0f2e8ec9dfa4aa18bae3efe0..26b231668077b63cc8473ed6edabef83682b9fb5 100644 (file)
@@ -484,12 +484,12 @@ define <2 x i64> @test20(<2 x i64> %X, <2 x i1> %C) {
   ret <2 x i64> %R
 }
 
-define i32 @test21(i1 %c0, i32* %p) {
+define i32 @test21(i1 %c0, ptr %p) {
 ; CHECK-LABEL: @test21(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C0:%.*]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
 ; CHECK:       if.then:
-; CHECK-NEXT:    [[V:%.*]] = load volatile i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT:    [[V:%.*]] = load volatile i32, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[PHI_BO:%.*]] = srem i32 [[V]], 5
 ; CHECK-NEXT:    br label [[IF_END]]
 ; CHECK:       if.end:
@@ -500,7 +500,7 @@ entry:
   br i1 %c0, label %if.then, label %if.end
 
 if.then:
-  %v = load volatile i32, i32* %p
+  %v = load volatile i32, ptr %p
   br label %if.end
 
 if.end:
@@ -512,15 +512,15 @@ if.end:
 @a = common global [5 x i16] zeroinitializer, align 2
 @b = common global i16 0, align 2
 
-define i32 @pr27968_0(i1 %c0, i32* %p) {
+define i32 @pr27968_0(i1 %c0, ptr %p) {
 ; CHECK-LABEL: @pr27968_0(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C0:%.*]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
 ; CHECK:       if.then:
-; CHECK-NEXT:    [[V:%.*]] = load volatile i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT:    [[V:%.*]] = load volatile i32, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    br label [[IF_END]]
 ; CHECK:       if.end:
-; CHECK-NEXT:    br i1 icmp eq (i16* getelementptr inbounds ([5 x i16], [5 x i16]* @a, i64 0, i64 4), i16* @b), label [[REM_IS_SAFE:%.*]], label [[REM_IS_UNSAFE:%.*]]
+; CHECK-NEXT:    br i1 icmp eq (ptr getelementptr inbounds ([5 x i16], ptr @a, i64 0, i64 4), ptr @b), label [[REM_IS_SAFE:%.*]], label [[REM_IS_UNSAFE:%.*]]
 ; CHECK:       rem.is.safe:
 ; CHECK-NEXT:    ret i32 0
 ; CHECK:       rem.is.unsafe:
@@ -530,27 +530,27 @@ entry:
   br i1 %c0, label %if.then, label %if.end
 
 if.then:
-  %v = load volatile i32, i32* %p
+  %v = load volatile i32, ptr %p
   br label %if.end
 
 if.end:
   %lhs = phi i32 [ %v, %if.then ], [ 5, %entry ]
-  br i1 icmp eq (i16* getelementptr inbounds ([5 x i16], [5 x i16]* @a, i64 0, i64 4), i16* @b), label %rem.is.safe, label %rem.is.unsafe
+  br i1 icmp eq (ptr getelementptr inbounds ([5 x i16], ptr @a, i64 0, i64 4), ptr @b), label %rem.is.safe, label %rem.is.unsafe
 
 rem.is.safe:
-  %rem = srem i32 %lhs, zext (i1 icmp eq (i16* getelementptr inbounds ([5 x i16], [5 x i16]* @a, i64 0, i64 4), i16* @b) to i32)
+  %rem = srem i32 %lhs, zext (i1 icmp eq (ptr getelementptr inbounds ([5 x i16], ptr @a, i64 0, i64 4), ptr @b) to i32)
   ret i32 %rem
 
 rem.is.unsafe:
   ret i32 0
 }
 
-define i32 @pr27968_1(i1 %c0, i1 %always_false, i32* %p) {
+define i32 @pr27968_1(i1 %c0, i1 %always_false, ptr %p) {
 ; CHECK-LABEL: @pr27968_1(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C0:%.*]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
 ; CHECK:       if.then:
-; CHECK-NEXT:    [[V:%.*]] = load volatile i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT:    [[V:%.*]] = load volatile i32, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    br label [[IF_END]]
 ; CHECK:       if.end:
 ; CHECK-NEXT:    [[LHS:%.*]] = phi i32 [ [[V]], [[IF_THEN]] ], [ 5, [[ENTRY:%.*]] ]
@@ -565,7 +565,7 @@ entry:
   br i1 %c0, label %if.then, label %if.end
 
 if.then:
-  %v = load volatile i32, i32* %p
+  %v = load volatile i32, ptr %p
   br label %if.end
 
 if.end:
@@ -580,15 +580,15 @@ rem.is.unsafe:
   ret i32 0
 }
 
-define i32 @pr27968_2(i1 %c0, i32* %p) {
+define i32 @pr27968_2(i1 %c0, ptr %p) {
 ; CHECK-LABEL: @pr27968_2(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C0:%.*]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
 ; CHECK:       if.then:
-; CHECK-NEXT:    [[V:%.*]] = load volatile i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT:    [[V:%.*]] = load volatile i32, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    br label [[IF_END]]
 ; CHECK:       if.end:
-; CHECK-NEXT:    br i1 icmp eq (i16* getelementptr inbounds ([5 x i16], [5 x i16]* @a, i64 0, i64 4), i16* @b), label [[REM_IS_SAFE:%.*]], label [[REM_IS_UNSAFE:%.*]]
+; CHECK-NEXT:    br i1 icmp eq (ptr getelementptr inbounds ([5 x i16], ptr @a, i64 0, i64 4), ptr @b), label [[REM_IS_SAFE:%.*]], label [[REM_IS_UNSAFE:%.*]]
 ; CHECK:       rem.is.safe:
 ; CHECK-NEXT:    ret i32 0
 ; CHECK:       rem.is.unsafe:
@@ -598,27 +598,27 @@ entry:
   br i1 %c0, label %if.then, label %if.end
 
 if.then:
-  %v = load volatile i32, i32* %p
+  %v = load volatile i32, ptr %p
   br label %if.end
 
 if.end:
   %lhs = phi i32 [ %v, %if.then ], [ 5, %entry ]
-  br i1 icmp eq (i16* getelementptr inbounds ([5 x i16], [5 x i16]* @a, i64 0, i64 4), i16* @b), label %rem.is.safe, label %rem.is.unsafe
+  br i1 icmp eq (ptr getelementptr inbounds ([5 x i16], ptr @a, i64 0, i64 4), ptr @b), label %rem.is.safe, label %rem.is.unsafe
 
 rem.is.safe:
-  %rem = urem i32 %lhs, zext (i1 icmp eq (i16* getelementptr inbounds ([5 x i16], [5 x i16]* @a, i64 0, i64 4), i16* @b) to i32)
+  %rem = urem i32 %lhs, zext (i1 icmp eq (ptr getelementptr inbounds ([5 x i16], ptr @a, i64 0, i64 4), ptr @b) to i32)
   ret i32 %rem
 
 rem.is.unsafe:
   ret i32 0
 }
 
-define i32 @pr27968_3(i1 %c0, i1 %always_false, i32* %p) {
+define i32 @pr27968_3(i1 %c0, i1 %always_false, ptr %p) {
 ; CHECK-LABEL: @pr27968_3(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[C0:%.*]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
 ; CHECK:       if.then:
-; CHECK-NEXT:    [[V:%.*]] = load volatile i32, i32* [[P:%.*]], align 4
+; CHECK-NEXT:    [[V:%.*]] = load volatile i32, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[PHI_BO:%.*]] = and i32 [[V]], 2147483647
 ; CHECK-NEXT:    br label [[IF_END]]
 ; CHECK:       if.end:
@@ -633,7 +633,7 @@ entry:
   br i1 %c0, label %if.then, label %if.end
 
 if.then:
-  %v = load volatile i32, i32* %p
+  %v = load volatile i32, ptr %p
   br label %if.end
 
 if.end:
@@ -728,15 +728,15 @@ define i1 @test26(i32 %A, i32 %B) {
   ret i1 %E
 }
 
-define i1 @test27(i32 %A, i32* %remdst) {
+define i1 @test27(i32 %A, ptr %remdst) {
 ; CHECK-LABEL: @test27(
 ; CHECK-NEXT:    [[B:%.*]] = srem i32 [[A:%.*]], -2147483648
-; CHECK-NEXT:    store i32 [[B]], i32* [[REMDST:%.*]], align 1
+; CHECK-NEXT:    store i32 [[B]], ptr [[REMDST:%.*]], align 1
 ; CHECK-NEXT:    [[C:%.*]] = icmp ne i32 [[B]], 0
 ; CHECK-NEXT:    ret i1 [[C]]
 ;
   %B = srem i32 %A, 2147483648 ; signbit
-  store i32 %B, i32* %remdst, align 1 ; extra use of rem
+  store i32 %B, ptr %remdst, align 1 ; extra use of rem
   %C = icmp ne i32 %B, 0
   ret i1 %C
 }
index 962cbade85da9d3306c0e849c82f3a07502a7067..d431055f0c21b73602e6f8899ad3abf3d903a2ce 100644 (file)
@@ -274,7 +274,7 @@ end:                                              ; preds = %for.body
   ret double %f_prod.0.lcssa
 }
 
-define i32 @test_int_phi_operands(i32* %arr_d) {
+define i32 @test_int_phi_operands(ptr %arr_d) {
 ; CHECK-LABEL: @test_int_phi_operands(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
@@ -296,8 +296,8 @@ entry:
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
   %f_prod.01 = phi i32 [ 0, %entry ], [ %mul, %for.body ]
-  %arrayidx = getelementptr inbounds i32, i32* %arr_d, i64 %i.02
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %arr_d, i64 %i.02
+  %0 = load i32, ptr %arrayidx, align 4
   %mul = mul nsw i32 %f_prod.01, %0
   %inc = add i64 %i.02, 1
   %cmp = icmp ult i64 %inc, 1000
@@ -308,7 +308,7 @@ end:                                 ; preds = %for.body
   ret i32 %f_prod.0.lcssa
 }
 
-define i32 @test_int_phi_operands_initalise_to_non_zero(i32* %arr_d) {
+define i32 @test_int_phi_operands_initalise_to_non_zero(ptr %arr_d) {
 ; CHECK-LABEL: @test_int_phi_operands_initalise_to_non_zero(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[FOR_BODY:%.*]]
@@ -330,8 +330,8 @@ entry:
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
   %f_prod.01 = phi i32 [ 1, %entry ], [ %mul, %for.body ]
-  %arrayidx = getelementptr inbounds i32, i32* %arr_d, i64 %i.02
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %arr_d, i64 %i.02
+  %0 = load i32, ptr %arrayidx, align 4
   %mul = mul i32 %f_prod.01, %0
   %inc = add i64 %i.02, 1
   %cmp = icmp ult i64 %inc, 1000
@@ -342,7 +342,7 @@ end:                                 ; preds = %for.body
   ret i32 %f_prod.0.lcssa
 }
 
-define i32 @test_multiple_int_phi_operands(i32* %arr_d, i1 %entry_cond) {
+define i32 @test_multiple_int_phi_operands(ptr %arr_d, i1 %entry_cond) {
 ; CHECK-LABEL: @test_multiple_int_phi_operands(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[ENTRY_COND:%.*]], label [[FOR_BODY:%.*]], label [[ENTRY_2:%.*]]
@@ -369,8 +369,8 @@ entry_2:
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [0, %entry_2], [ %inc, %for.body ]
   %f_prod.01 = phi i32 [ 0, %entry ], [0, %entry_2], [ %mul, %for.body ]
-  %arrayidx = getelementptr inbounds i32, i32* %arr_d, i64 %i.02
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %arr_d, i64 %i.02
+  %0 = load i32, ptr %arrayidx, align 4
   %mul = mul i32 %f_prod.01, %0
   %inc = add i64 %i.02, 1
   %cmp = icmp ult i64 %inc, 1000
@@ -381,7 +381,7 @@ end:                                              ; preds = %for.body
   ret i32 %f_prod.0.lcssa
 }
 
-define i32 @test_multiple_int_phi_operands_initalise_to_non_zero(i32* %arr_d, i1 %entry_cond) {
+define i32 @test_multiple_int_phi_operands_initalise_to_non_zero(ptr %arr_d, i1 %entry_cond) {
 ; CHECK-LABEL: @test_multiple_int_phi_operands_initalise_to_non_zero(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[ENTRY_COND:%.*]], label [[FOR_BODY:%.*]], label [[ENTRY_2:%.*]]
@@ -408,8 +408,8 @@ entry_2:
 for.body:                                         ; preds = %entry, %for.body
   %i.02 = phi i64 [ 0, %entry ], [0, %entry_2], [ %inc, %for.body ]
   %f_prod.01 = phi i32 [ 0, %entry ], [1, %entry_2], [ %mul, %for.body ]
-  %arrayidx = getelementptr inbounds i32, i32* %arr_d, i64 %i.02
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %arr_d, i64 %i.02
+  %0 = load i32, ptr %arrayidx, align 4
   %mul = mul i32 %f_prod.01, %0
   %inc = add i64 %i.02, 1
   %cmp = icmp ult i64 %inc, 1000
index 300fa0c49c88ab853010880f94264a8bea3ea1e2..582916827b61f7f3188820a168c742d084c72fbe 100644 (file)
@@ -549,9 +549,9 @@ define i1 @t9_commutative_logical(i8 %base, i8 %offset) {
 
 ;-------------------------------------------------------------------------------
 
-define i1 @t10(i64 %base, i64* nonnull %offsetptr) {
+define i1 @t10(i64 %base, ptr nonnull %offsetptr) {
 ; CHECK-LABEL: @t10(
-; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint i64* [[OFFSETPTR:%.*]] to i64
+; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint ptr [[OFFSETPTR:%.*]] to i64
 ; CHECK-NEXT:    [[ADJUSTED:%.*]] = sub i64 [[BASE:%.*]], [[OFFSET]]
 ; CHECK-NEXT:    call void @use64(i64 [[ADJUSTED]])
 ; CHECK-NEXT:    [[NO_UNDERFLOW:%.*]] = icmp ule i64 [[OFFSET]], [[BASE]]
@@ -561,7 +561,7 @@ define i1 @t10(i64 %base, i64* nonnull %offsetptr) {
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult i64 [[OFFSET]], [[BASE]]
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %offset = ptrtoint i64* %offsetptr to i64
+  %offset = ptrtoint ptr %offsetptr to i64
 
   %adjusted = sub i64 %base, %offset
   call void @use64(i64 %adjusted)
@@ -573,9 +573,9 @@ define i1 @t10(i64 %base, i64* nonnull %offsetptr) {
   ret i1 %r
 }
 
-define i1 @t10_logical(i64 %base, i64* nonnull %offsetptr) {
+define i1 @t10_logical(i64 %base, ptr nonnull %offsetptr) {
 ; CHECK-LABEL: @t10_logical(
-; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint i64* [[OFFSETPTR:%.*]] to i64
+; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint ptr [[OFFSETPTR:%.*]] to i64
 ; CHECK-NEXT:    [[ADJUSTED:%.*]] = sub i64 [[BASE:%.*]], [[OFFSET]]
 ; CHECK-NEXT:    call void @use64(i64 [[ADJUSTED]])
 ; CHECK-NEXT:    [[NO_UNDERFLOW:%.*]] = icmp ule i64 [[OFFSET]], [[BASE]]
@@ -585,7 +585,7 @@ define i1 @t10_logical(i64 %base, i64* nonnull %offsetptr) {
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult i64 [[OFFSET]], [[BASE]]
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %offset = ptrtoint i64* %offsetptr to i64
+  %offset = ptrtoint ptr %offsetptr to i64
 
   %adjusted = sub i64 %base, %offset
   call void @use64(i64 %adjusted)
@@ -596,9 +596,9 @@ define i1 @t10_logical(i64 %base, i64* nonnull %offsetptr) {
   %r = select i1 %not_null, i1 %no_underflow, i1 false
   ret i1 %r
 }
-define i1 @t11_commutative(i64 %base, i64* nonnull %offsetptr) {
+define i1 @t11_commutative(i64 %base, ptr nonnull %offsetptr) {
 ; CHECK-LABEL: @t11_commutative(
-; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint i64* [[OFFSETPTR:%.*]] to i64
+; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint ptr [[OFFSETPTR:%.*]] to i64
 ; CHECK-NEXT:    [[ADJUSTED:%.*]] = sub i64 [[BASE:%.*]], [[OFFSET]]
 ; CHECK-NEXT:    call void @use64(i64 [[ADJUSTED]])
 ; CHECK-NEXT:    [[NO_UNDERFLOW:%.*]] = icmp ule i64 [[OFFSET]], [[BASE]]
@@ -608,7 +608,7 @@ define i1 @t11_commutative(i64 %base, i64* nonnull %offsetptr) {
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult i64 [[OFFSET]], [[BASE]]
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %offset = ptrtoint i64* %offsetptr to i64
+  %offset = ptrtoint ptr %offsetptr to i64
 
   %adjusted = sub i64 %base, %offset
   call void @use64(i64 %adjusted)
@@ -620,9 +620,9 @@ define i1 @t11_commutative(i64 %base, i64* nonnull %offsetptr) {
   ret i1 %r
 }
 
-define i1 @t11_commutative_logical(i64 %base, i64* nonnull %offsetptr) {
+define i1 @t11_commutative_logical(i64 %base, ptr nonnull %offsetptr) {
 ; CHECK-LABEL: @t11_commutative_logical(
-; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint i64* [[OFFSETPTR:%.*]] to i64
+; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint ptr [[OFFSETPTR:%.*]] to i64
 ; CHECK-NEXT:    [[ADJUSTED:%.*]] = sub i64 [[BASE:%.*]], [[OFFSET]]
 ; CHECK-NEXT:    call void @use64(i64 [[ADJUSTED]])
 ; CHECK-NEXT:    [[NO_UNDERFLOW:%.*]] = icmp ule i64 [[OFFSET]], [[BASE]]
@@ -632,7 +632,7 @@ define i1 @t11_commutative_logical(i64 %base, i64* nonnull %offsetptr) {
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult i64 [[OFFSET]], [[BASE]]
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %offset = ptrtoint i64* %offsetptr to i64
+  %offset = ptrtoint ptr %offsetptr to i64
 
   %adjusted = sub i64 %base, %offset
   call void @use64(i64 %adjusted)
@@ -644,9 +644,9 @@ define i1 @t11_commutative_logical(i64 %base, i64* nonnull %offsetptr) {
   ret i1 %r
 }
 
-define i1 @t12(i64 %base, i64* nonnull %offsetptr) {
+define i1 @t12(i64 %base, ptr nonnull %offsetptr) {
 ; CHECK-LABEL: @t12(
-; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint i64* [[OFFSETPTR:%.*]] to i64
+; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint ptr [[OFFSETPTR:%.*]] to i64
 ; CHECK-NEXT:    [[ADJUSTED:%.*]] = sub i64 [[BASE:%.*]], [[OFFSET]]
 ; CHECK-NEXT:    call void @use64(i64 [[ADJUSTED]])
 ; CHECK-NEXT:    [[NO_UNDERFLOW:%.*]] = icmp ugt i64 [[OFFSET]], [[BASE]]
@@ -656,7 +656,7 @@ define i1 @t12(i64 %base, i64* nonnull %offsetptr) {
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp uge i64 [[OFFSET]], [[BASE]]
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %offset = ptrtoint i64* %offsetptr to i64
+  %offset = ptrtoint ptr %offsetptr to i64
 
   %adjusted = sub i64 %base, %offset
   call void @use64(i64 %adjusted)
@@ -668,9 +668,9 @@ define i1 @t12(i64 %base, i64* nonnull %offsetptr) {
   ret i1 %r
 }
 
-define i1 @t12_logical(i64 %base, i64* nonnull %offsetptr) {
+define i1 @t12_logical(i64 %base, ptr nonnull %offsetptr) {
 ; CHECK-LABEL: @t12_logical(
-; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint i64* [[OFFSETPTR:%.*]] to i64
+; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint ptr [[OFFSETPTR:%.*]] to i64
 ; CHECK-NEXT:    [[ADJUSTED:%.*]] = sub i64 [[BASE:%.*]], [[OFFSET]]
 ; CHECK-NEXT:    call void @use64(i64 [[ADJUSTED]])
 ; CHECK-NEXT:    [[NO_UNDERFLOW:%.*]] = icmp ugt i64 [[OFFSET]], [[BASE]]
@@ -680,7 +680,7 @@ define i1 @t12_logical(i64 %base, i64* nonnull %offsetptr) {
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp uge i64 [[OFFSET]], [[BASE]]
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %offset = ptrtoint i64* %offsetptr to i64
+  %offset = ptrtoint ptr %offsetptr to i64
 
   %adjusted = sub i64 %base, %offset
   call void @use64(i64 %adjusted)
@@ -691,9 +691,9 @@ define i1 @t12_logical(i64 %base, i64* nonnull %offsetptr) {
   %r = select i1 %not_null, i1 true, i1 %no_underflow
   ret i1 %r
 }
-define i1 @t13(i64 %base, i64* nonnull %offsetptr) {
+define i1 @t13(i64 %base, ptr nonnull %offsetptr) {
 ; CHECK-LABEL: @t13(
-; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint i64* [[OFFSETPTR:%.*]] to i64
+; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint ptr [[OFFSETPTR:%.*]] to i64
 ; CHECK-NEXT:    [[ADJUSTED:%.*]] = sub i64 [[BASE:%.*]], [[OFFSET]]
 ; CHECK-NEXT:    call void @use64(i64 [[ADJUSTED]])
 ; CHECK-NEXT:    [[NO_UNDERFLOW:%.*]] = icmp ugt i64 [[OFFSET]], [[BASE]]
@@ -703,7 +703,7 @@ define i1 @t13(i64 %base, i64* nonnull %offsetptr) {
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp uge i64 [[OFFSET]], [[BASE]]
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %offset = ptrtoint i64* %offsetptr to i64
+  %offset = ptrtoint ptr %offsetptr to i64
 
   %adjusted = sub i64 %base, %offset
   call void @use64(i64 %adjusted)
@@ -715,9 +715,9 @@ define i1 @t13(i64 %base, i64* nonnull %offsetptr) {
   ret i1 %r
 }
 
-define i1 @t13_logical(i64 %base, i64* nonnull %offsetptr) {
+define i1 @t13_logical(i64 %base, ptr nonnull %offsetptr) {
 ; CHECK-LABEL: @t13_logical(
-; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint i64* [[OFFSETPTR:%.*]] to i64
+; CHECK-NEXT:    [[OFFSET:%.*]] = ptrtoint ptr [[OFFSETPTR:%.*]] to i64
 ; CHECK-NEXT:    [[ADJUSTED:%.*]] = sub i64 [[BASE:%.*]], [[OFFSET]]
 ; CHECK-NEXT:    call void @use64(i64 [[ADJUSTED]])
 ; CHECK-NEXT:    [[NO_UNDERFLOW:%.*]] = icmp ugt i64 [[OFFSET]], [[BASE]]
@@ -727,7 +727,7 @@ define i1 @t13_logical(i64 %base, i64* nonnull %offsetptr) {
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp uge i64 [[OFFSET]], [[BASE]]
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
-  %offset = ptrtoint i64* %offsetptr to i64
+  %offset = ptrtoint ptr %offsetptr to i64
 
   %adjusted = sub i64 %base, %offset
   call void @use64(i64 %adjusted)
index 15cd9f4899cc3d6d8da69bd44d242d4f058c0258..fece47534819e48403cdda9c3759b519a3d15e1c 100644 (file)
@@ -288,18 +288,18 @@ define i32 @rotl_safe_i32(i32 %x, i32 %y) {
 
 ; Extra uses don't change anything.
 
-define i16 @rotl_safe_i16_commute_extra_use(i16 %x, i16 %y, i16* %p) {
+define i16 @rotl_safe_i16_commute_extra_use(i16 %x, i16 %y, ptr %p) {
 ; CHECK-LABEL: @rotl_safe_i16_commute_extra_use(
 ; CHECK-NEXT:    [[NEGY:%.*]] = sub i16 0, [[Y:%.*]]
 ; CHECK-NEXT:    [[NEGYMASK:%.*]] = and i16 [[NEGY]], 15
-; CHECK-NEXT:    store i16 [[NEGYMASK]], i16* [[P:%.*]], align 2
+; CHECK-NEXT:    store i16 [[NEGYMASK]], ptr [[P:%.*]], align 2
 ; CHECK-NEXT:    [[R:%.*]] = call i16 @llvm.fshl.i16(i16 [[X:%.*]], i16 [[X]], i16 [[Y]])
 ; CHECK-NEXT:    ret i16 [[R]]
 ;
   %negy = sub i16 0, %y
   %ymask = and i16 %y, 15
   %negymask = and i16 %negy, 15
-  store i16 %negymask, i16* %p
+  store i16 %negymask, ptr %p
   %shl = shl i16 %x, %ymask
   %shr = lshr i16 %x, %negymask
   %r = or i16 %shl, %shr
@@ -324,14 +324,14 @@ define i64 @rotr_safe_i64(i64 %x, i64 %y) {
 
 ; Extra uses don't change anything.
 
-define i8 @rotr_safe_i8_commute_extra_use(i8 %x, i8 %y, i8* %p) {
+define i8 @rotr_safe_i8_commute_extra_use(i8 %x, i8 %y, ptr %p) {
 ; CHECK-LABEL: @rotr_safe_i8_commute_extra_use(
 ; CHECK-NEXT:    [[NEGY:%.*]] = sub i8 0, [[Y:%.*]]
 ; CHECK-NEXT:    [[YMASK:%.*]] = and i8 [[Y]], 7
 ; CHECK-NEXT:    [[NEGYMASK:%.*]] = and i8 [[NEGY]], 7
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i8 [[X:%.*]], [[NEGYMASK]]
 ; CHECK-NEXT:    [[SHR:%.*]] = lshr i8 [[X]], [[YMASK]]
-; CHECK-NEXT:    store i8 [[SHR]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[SHR]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[R:%.*]] = or i8 [[SHL]], [[SHR]]
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
@@ -340,7 +340,7 @@ define i8 @rotr_safe_i8_commute_extra_use(i8 %x, i8 %y, i8* %p) {
   %negymask = and i8 %negy, 7
   %shl = shl i8 %x, %negymask
   %shr = lshr i8 %x, %ymask
-  store i8 %shr, i8* %p
+  store i8 %shr, ptr %p
   %r = or i8 %shl, %shr
   ret i8 %r
 }
@@ -892,12 +892,12 @@ define i64 @rotr_select_zext_shamt(i64 %x, i32 %y) {
 
 define i32 @rotl_constant_expr(i32 %shamt) {
 ; CHECK-LABEL: @rotl_constant_expr(
-; CHECK-NEXT:    [[SHR:%.*]] = lshr i32 ptrtoint (i8* @external_global to i32), [[SHAMT:%.*]]
-; CHECK-NEXT:    [[R:%.*]] = or i32 [[SHR]], shl (i32 ptrtoint (i8* @external_global to i32), i32 11)
+; CHECK-NEXT:    [[SHR:%.*]] = lshr i32 ptrtoint (ptr @external_global to i32), [[SHAMT:%.*]]
+; CHECK-NEXT:    [[R:%.*]] = or i32 [[SHR]], shl (i32 ptrtoint (ptr @external_global to i32), i32 11)
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
-  %shr = lshr i32 ptrtoint (i8* @external_global to i32), %shamt
-  %r = or i32 %shr, shl (i32 ptrtoint (i8* @external_global to i32), i32 11)
+  %shr = lshr i32 ptrtoint (ptr @external_global to i32), %shamt
+  %r = or i32 %shr, shl (i32 ptrtoint (ptr @external_global to i32), i32 11)
   ret i32 %r
 }
 
index b3ade21fb39aeaf6dffb568f57fa70dc33610cfc..e7805618edf6f16cad109a1782a527760ca27507 100644 (file)
@@ -1,17 +1,16 @@
 ; RUN: opt -passes=instcombine -S -o - %s | FileCheck %s
 
-declare dso_local i32 @bar(i8*)
+declare dso_local i32 @bar(ptr)
 
 ; Function Attrs: nounwind
 define internal i32 @foo() #0 !dbg !1 {
 ; CHECK:  %[[VLA:.*]] = alloca [2 x i32]
-; CHECK:  call void @llvm.dbg.declare(metadata [2 x i32]* %[[VLA]], {{.*}}, metadata !DIExpression())
+; CHECK:  call void @llvm.dbg.declare(metadata ptr %[[VLA]], {{.*}}, metadata !DIExpression())
 
 entry:
   %vla = alloca i32, i64 2, align 4, !dbg !16
-  call void @llvm.dbg.declare(metadata i32* %vla, metadata !19, metadata !DIExpression()), !dbg !20
-  %0 = bitcast i32* %vla to i8*, !dbg !21
-  %call = call i32 @bar(i8* %0), !dbg !22
+  call void @llvm.dbg.declare(metadata ptr %vla, metadata !19, metadata !DIExpression()), !dbg !20
+  %call = call i32 @bar(ptr %vla), !dbg !22
   unreachable
 }
 
index bf6710be003f565cdd5568aa8fba48bb688bc929..716c504446f73280cd3500d8f0406186565ccf14 100644 (file)
@@ -1052,15 +1052,15 @@ define i8 @test_scalar_usub_add(i8 %a, i8 %b) {
   ret i8 %res
 }
 
-define i8 @test_scalar_usub_add_extra_use(i8 %a, i8 %b, i8* %p) {
+define i8 @test_scalar_usub_add_extra_use(i8 %a, i8 %b, ptr %p) {
 ; CHECK-LABEL: @test_scalar_usub_add_extra_use(
 ; CHECK-NEXT:    [[SAT:%.*]] = call i8 @llvm.usub.sat.i8(i8 [[A:%.*]], i8 [[B:%.*]])
-; CHECK-NEXT:    store i8 [[SAT]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[SAT]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[RES:%.*]] = add i8 [[SAT]], [[B]]
 ; CHECK-NEXT:    ret i8 [[RES]]
 ;
   %sat = call i8 @llvm.usub.sat.i8(i8 %a, i8 %b)
-  store i8 %sat, i8* %p
+  store i8 %sat, ptr %p
   %res = add i8 %sat, %b
   ret i8 %res
 }
@@ -1106,15 +1106,15 @@ define i8 @test_scalar_usub_sub(i8 %a, i8 %b) {
   ret i8 %res
 }
 
-define i8 @test_scalar_usub_sub_extra_use(i8 %a, i8 %b, i8* %p) {
+define i8 @test_scalar_usub_sub_extra_use(i8 %a, i8 %b, ptr %p) {
 ; CHECK-LABEL: @test_scalar_usub_sub_extra_use(
 ; CHECK-NEXT:    [[SAT:%.*]] = call i8 @llvm.usub.sat.i8(i8 [[A:%.*]], i8 [[B:%.*]])
-; CHECK-NEXT:    store i8 [[SAT]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[SAT]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[RES:%.*]] = sub i8 [[A]], [[SAT]]
 ; CHECK-NEXT:    ret i8 [[RES]]
 ;
   %sat = call i8 @llvm.usub.sat.i8(i8 %a, i8 %b)
-  store i8 %sat, i8* %p
+  store i8 %sat, ptr %p
   %res = sub i8 %a, %sat
   ret i8 %res
 }
@@ -1162,15 +1162,15 @@ define i8 @test_scalar_uadd_sub(i8 %a, i8 %b) {
   ret i8 %res
 }
 
-define i8 @test_scalar_uadd_sub_extra_use(i8 %a, i8 %b, i8* %p) {
+define i8 @test_scalar_uadd_sub_extra_use(i8 %a, i8 %b, ptr %p) {
 ; CHECK-LABEL: @test_scalar_uadd_sub_extra_use(
 ; CHECK-NEXT:    [[SAT:%.*]] = call i8 @llvm.uadd.sat.i8(i8 [[A:%.*]], i8 [[B:%.*]])
-; CHECK-NEXT:    store i8 [[SAT]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[SAT]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[RES:%.*]] = sub i8 [[SAT]], [[B]]
 ; CHECK-NEXT:    ret i8 [[RES]]
 ;
   %sat = call i8 @llvm.uadd.sat.i8(i8 %a, i8 %b)
-  store i8 %sat, i8* %p
+  store i8 %sat, ptr %p
   %res = sub i8 %sat, %b
   ret i8 %res
 }
index 5804d7c31701f84cdd5723dc11165c882b98cae2..dcf4abe10425b9979b63e46737f12597fb156a6a 100644 (file)
@@ -1,14 +1,14 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-define void @trunc_nxv2i64_to_nxv2i32(i32* %ptr, <vscale x 4 x i32> %v) {
+define void @trunc_nxv2i64_to_nxv2i32(ptr %ptr, <vscale x 4 x i32> %v) {
 ; CHECK-LABEL: @trunc_nxv2i64_to_nxv2i32(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[TMP0:%.*]] = call <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 31)
 ; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <vscale x 4 x i32> [[V:%.*]] to <vscale x 2 x i64>
 ; CHECK-NEXT:    [[TMP2:%.*]] = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[TMP0]])
 ; CHECK-NEXT:    [[TMP3:%.*]] = trunc <vscale x 2 x i64> [[TMP1]] to <vscale x 2 x i32>
-; CHECK-NEXT:    call void @llvm.aarch64.sve.st1.nxv2i32(<vscale x 2 x i32> [[TMP3]], <vscale x 2 x i1> [[TMP2]], i32* [[PTR:%.*]])
+; CHECK-NEXT:    call void @llvm.aarch64.sve.st1.nxv2i32(<vscale x 2 x i32> [[TMP3]], <vscale x 2 x i1> [[TMP2]], ptr [[PTR:%.*]])
 ; CHECK-NEXT:    ret void
 ;
 entry:
@@ -16,10 +16,10 @@ entry:
   %1 = bitcast <vscale x 4 x i32> %v to <vscale x 2 x i64>
   %2 = call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> %0)
   %3 = trunc <vscale x 2 x i64> %1 to <vscale x 2 x i32>
-  call void @llvm.aarch64.sve.st1.nxv2i32(<vscale x 2 x i32> %3, <vscale x 2 x i1> %2, i32* %ptr)
+  call void @llvm.aarch64.sve.st1.nxv2i32(<vscale x 2 x i32> %3, <vscale x 2 x i1> %2, ptr %ptr)
   ret void
 }
 
-declare void @llvm.aarch64.sve.st1.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32*)
+declare void @llvm.aarch64.sve.st1.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, ptr)
 declare <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1>)
 declare <vscale x 16 x i1> @llvm.aarch64.sve.ptrue.nxv16i1(i32 %pattern)
index 43800361f7c583cda927aae6eeaceebe6d91ccd2..424470aa929e1d13ff8ac82e5cada8e7b850401d 100644 (file)
@@ -1,82 +1,82 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-define i32 @extract_load(<4 x i32>* %p) {
+define i32 @extract_load(ptr %p) {
 ;
 ; CHECK-LABEL: @extract_load(
-; CHECK-NEXT:    [[X:%.*]] = load <4 x i32>, <4 x i32>* [[P:%.*]], align 4
+; CHECK-NEXT:    [[X:%.*]] = load <4 x i32>, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[EXT:%.*]] = extractelement <4 x i32> [[X]], i64 1
 ; CHECK-NEXT:    ret i32 [[EXT]]
 ;
-  %x = load <4 x i32>, <4 x i32>* %p, align 4
+  %x = load <4 x i32>, ptr %p, align 4
   %ext = extractelement <4 x i32> %x, i32 1
   ret i32 %ext
 }
 
-define double @extract_load_fp(<4 x double>* %p) {
+define double @extract_load_fp(ptr %p) {
 ;
 ; CHECK-LABEL: @extract_load_fp(
-; CHECK-NEXT:    [[X:%.*]] = load <4 x double>, <4 x double>* [[P:%.*]], align 32
+; CHECK-NEXT:    [[X:%.*]] = load <4 x double>, ptr [[P:%.*]], align 32
 ; CHECK-NEXT:    [[EXT:%.*]] = extractelement <4 x double> [[X]], i64 3
 ; CHECK-NEXT:    ret double [[EXT]]
 ;
-  %x = load <4 x double>, <4 x double>* %p, align 32
+  %x = load <4 x double>, ptr %p, align 32
   %ext = extractelement <4 x double> %x, i32 3
   ret double %ext
 }
 
-define double @extract_load_volatile(<4 x double>* %p) {
+define double @extract_load_volatile(ptr %p) {
 ;
 ; CHECK-LABEL: @extract_load_volatile(
-; CHECK-NEXT:    [[X:%.*]] = load volatile <4 x double>, <4 x double>* [[P:%.*]], align 32
+; CHECK-NEXT:    [[X:%.*]] = load volatile <4 x double>, ptr [[P:%.*]], align 32
 ; CHECK-NEXT:    [[EXT:%.*]] = extractelement <4 x double> [[X]], i64 2
 ; CHECK-NEXT:    ret double [[EXT]]
 ;
-  %x = load volatile <4 x double>, <4 x double>* %p
+  %x = load volatile <4 x double>, ptr %p
   %ext = extractelement <4 x double> %x, i32 2
   ret double %ext
 }
 
-define double @extract_load_extra_use(<4 x double>* %p, <4 x double>* %p2) {
+define double @extract_load_extra_use(ptr %p, ptr %p2) {
 ;
 ; CHECK-LABEL: @extract_load_extra_use(
-; CHECK-NEXT:    [[X:%.*]] = load <4 x double>, <4 x double>* [[P:%.*]], align 8
+; CHECK-NEXT:    [[X:%.*]] = load <4 x double>, ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[EXT:%.*]] = extractelement <4 x double> [[X]], i64 0
-; CHECK-NEXT:    store <4 x double> [[X]], <4 x double>* [[P2:%.*]], align 32
+; CHECK-NEXT:    store <4 x double> [[X]], ptr [[P2:%.*]], align 32
 ; CHECK-NEXT:    ret double [[EXT]]
 ;
-  %x = load <4 x double>, <4 x double>* %p, align 8
+  %x = load <4 x double>, ptr %p, align 8
   %ext = extractelement <4 x double> %x, i32 0
-  store <4 x double> %x, <4 x double>* %p2
+  store <4 x double> %x, ptr %p2
   ret double %ext
 }
 
-define double @extract_load_variable_index(<4 x double>* %p, i32 %y) {
+define double @extract_load_variable_index(ptr %p, i32 %y) {
 ;
 ; CHECK-LABEL: @extract_load_variable_index(
-; CHECK-NEXT:    [[X:%.*]] = load <4 x double>, <4 x double>* [[P:%.*]], align 32
+; CHECK-NEXT:    [[X:%.*]] = load <4 x double>, ptr [[P:%.*]], align 32
 ; CHECK-NEXT:    [[EXT:%.*]] = extractelement <4 x double> [[X]], i32 [[Y:%.*]]
 ; CHECK-NEXT:    ret double [[EXT]]
 ;
-  %x = load <4 x double>, <4 x double>* %p
+  %x = load <4 x double>, ptr %p
   %ext = extractelement <4 x double> %x, i32 %y
   ret double %ext
 }
 
-define void @scalarize_phi(i32 * %n, float * %inout) {
+define void @scalarize_phi(ptr %n, ptr %inout) {
 ;
 ; CHECK-LABEL: @scalarize_phi(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[T0:%.*]] = load volatile float, float* [[INOUT:%.*]], align 4
+; CHECK-NEXT:    [[T0:%.*]] = load volatile float, ptr [[INOUT:%.*]], align 4
 ; CHECK-NEXT:    br label [[FOR_COND:%.*]]
 ; CHECK:       for.cond:
 ; CHECK-NEXT:    [[TMP0:%.*]] = phi float [ [[T0]], [[ENTRY:%.*]] ], [ [[TMP1:%.*]], [[FOR_BODY:%.*]] ]
 ; CHECK-NEXT:    [[I_0:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
-; CHECK-NEXT:    [[T1:%.*]] = load i32, i32* [[N:%.*]], align 4
+; CHECK-NEXT:    [[T1:%.*]] = load i32, ptr [[N:%.*]], align 4
 ; CHECK-NEXT:    [[CMP_NOT:%.*]] = icmp eq i32 [[I_0]], [[T1]]
 ; CHECK-NEXT:    br i1 [[CMP_NOT]], label [[FOR_END:%.*]], label [[FOR_BODY]]
 ; CHECK:       for.body:
-; CHECK-NEXT:    store volatile float [[TMP0]], float* [[INOUT]], align 4
+; CHECK-NEXT:    store volatile float [[TMP0]], ptr [[INOUT]], align 4
 ; CHECK-NEXT:    [[TMP1]] = fmul float [[TMP0]], 0x4002A3D700000000
 ; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_0]], 1
 ; CHECK-NEXT:    br label [[FOR_COND]]
@@ -84,7 +84,7 @@ define void @scalarize_phi(i32 * %n, float * %inout) {
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %t0 = load volatile float, float * %inout, align 4
+  %t0 = load volatile float, ptr %inout, align 4
   %insert = insertelement <4 x float> poison, float %t0, i32 0
   %splat = shufflevector <4 x float> %insert, <4 x float> poison, <4 x i32> zeroinitializer
   %insert1 = insertelement <4 x float> poison, float 3.0, i32 0
@@ -93,13 +93,13 @@ entry:
 for.cond:
   %x.0 = phi <4 x float> [ %splat, %entry ], [ %mul, %for.body ]
   %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
-  %t1 = load i32, i32 * %n, align 4
+  %t1 = load i32, ptr %n, align 4
   %cmp = icmp ne i32 %i.0, %t1
   br i1 %cmp, label %for.body, label %for.end
 
 for.body:
   %t2 = extractelement <4 x float> %x.0, i32 1
-  store volatile float %t2, float * %inout, align 4
+  store volatile float %t2, ptr %inout, align 4
   %mul = fmul <4 x float> %x.0, <float 0x4002A3D700000000, float 0x4002A3D700000000, float 0x4002A3D700000000, float 0x4002A3D700000000>
   %inc = add nsw i32 %i.0, 1
   br label %for.cond
@@ -180,32 +180,32 @@ define i8 @extract_element_binop_nonsplat_variable_index(<4 x i8> %x, i32 %y) {
   ret i8 %r
 }
 
-define float @extract_element_load(<4 x float> %x, <4 x float>* %ptr) {
+define float @extract_element_load(<4 x float> %x, ptr %ptr) {
 ;
 ; CHECK-LABEL: @extract_element_load(
-; CHECK-NEXT:    [[LOAD:%.*]] = load <4 x float>, <4 x float>* [[PTR:%.*]], align 16
+; CHECK-NEXT:    [[LOAD:%.*]] = load <4 x float>, ptr [[PTR:%.*]], align 16
 ; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x float> [[LOAD]], i64 2
 ; CHECK-NEXT:    [[TMP2:%.*]] = extractelement <4 x float> [[X:%.*]], i64 2
 ; CHECK-NEXT:    [[R:%.*]] = fadd float [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret float [[R]]
 ;
-  %load = load <4 x float>, <4 x float>* %ptr
+  %load = load <4 x float>, ptr %ptr
   %add = fadd <4 x float> %x, %load
   %r = extractelement <4 x float> %add, i32 2
   ret float %r
 }
 
-define float @extract_element_multi_Use_load(<4 x float> %x, <4 x float>* %ptr0, <4 x float>* %ptr1) {
+define float @extract_element_multi_Use_load(<4 x float> %x, ptr %ptr0, ptr %ptr1) {
 ;
 ; CHECK-LABEL: @extract_element_multi_Use_load(
-; CHECK-NEXT:    [[LOAD:%.*]] = load <4 x float>, <4 x float>* [[PTR0:%.*]], align 16
-; CHECK-NEXT:    store <4 x float> [[LOAD]], <4 x float>* [[PTR1:%.*]], align 16
+; CHECK-NEXT:    [[LOAD:%.*]] = load <4 x float>, ptr [[PTR0:%.*]], align 16
+; CHECK-NEXT:    store <4 x float> [[LOAD]], ptr [[PTR1:%.*]], align 16
 ; CHECK-NEXT:    [[ADD:%.*]] = fadd <4 x float> [[LOAD]], [[X:%.*]]
 ; CHECK-NEXT:    [[R:%.*]] = extractelement <4 x float> [[ADD]], i64 2
 ; CHECK-NEXT:    ret float [[R]]
 ;
-  %load = load <4 x float>, <4 x float>* %ptr0
-  store <4 x float> %load, <4 x float>* %ptr1
+  %load = load <4 x float>, ptr %ptr0
+  store <4 x float> %load, ptr %ptr1
   %add = fadd <4 x float> %x, %load
   %r = extractelement <4 x float> %add, i32 2
   ret float %r
@@ -347,13 +347,13 @@ define i1 @extractelt_vector_fcmp_not_cheap_to_scalarize_multi_use(<2 x float> %
 ;
 ; CHECK-LABEL: @extractelt_vector_fcmp_not_cheap_to_scalarize_multi_use(
 ; CHECK-NEXT:    [[ADD:%.*]] = fadd <2 x float> [[ARG1:%.*]], [[ARG2:%.*]]
-; CHECK-NEXT:    store volatile <2 x float> [[ADD]], <2 x float>* undef, align 8
+; CHECK-NEXT:    store volatile <2 x float> [[ADD]], ptr undef, align 8
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp oeq <2 x float> [[ADD]], [[ARG0:%.*]]
 ; CHECK-NEXT:    [[EXT:%.*]] = extractelement <2 x i1> [[CMP]], i64 0
 ; CHECK-NEXT:    ret i1 [[EXT]]
 ;
   %add = fadd <2 x float> %arg1, %arg2
-  store volatile <2 x float> %add, <2 x float>* undef
+  store volatile <2 x float> %add, ptr undef
   %cmp = fcmp oeq <2 x float> %arg0, %add
   %ext = extractelement <2 x i1> %cmp, i32 0
   ret i1 %ext
index 7fda07b9259252e78c6221bcc39ad4f789435af2..fe6dc526bd50ee6965cc388cd821036775b1992d 100644 (file)
@@ -1,82 +1,82 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-define i32 @extract_load(<4 x i32>* %p) {
+define i32 @extract_load(ptr %p) {
 ;
 ; CHECK-LABEL: @extract_load(
-; CHECK-NEXT:    [[X:%.*]] = load <4 x i32>, <4 x i32>* [[P:%.*]], align 4
+; CHECK-NEXT:    [[X:%.*]] = load <4 x i32>, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[EXT:%.*]] = extractelement <4 x i32> [[X]], i64 1
 ; CHECK-NEXT:    ret i32 [[EXT]]
 ;
-  %x = load <4 x i32>, <4 x i32>* %p, align 4
+  %x = load <4 x i32>, ptr %p, align 4
   %ext = extractelement <4 x i32> %x, i32 1
   ret i32 %ext
 }
 
-define double @extract_load_fp(<4 x double>* %p) {
+define double @extract_load_fp(ptr %p) {
 ;
 ; CHECK-LABEL: @extract_load_fp(
-; CHECK-NEXT:    [[X:%.*]] = load <4 x double>, <4 x double>* [[P:%.*]], align 32
+; CHECK-NEXT:    [[X:%.*]] = load <4 x double>, ptr [[P:%.*]], align 32
 ; CHECK-NEXT:    [[EXT:%.*]] = extractelement <4 x double> [[X]], i64 3
 ; CHECK-NEXT:    ret double [[EXT]]
 ;
-  %x = load <4 x double>, <4 x double>* %p, align 32
+  %x = load <4 x double>, ptr %p, align 32
   %ext = extractelement <4 x double> %x, i32 3
   ret double %ext
 }
 
-define double @extract_load_volatile(<4 x double>* %p) {
+define double @extract_load_volatile(ptr %p) {
 ;
 ; CHECK-LABEL: @extract_load_volatile(
-; CHECK-NEXT:    [[X:%.*]] = load volatile <4 x double>, <4 x double>* [[P:%.*]], align 32
+; CHECK-NEXT:    [[X:%.*]] = load volatile <4 x double>, ptr [[P:%.*]], align 32
 ; CHECK-NEXT:    [[EXT:%.*]] = extractelement <4 x double> [[X]], i64 2
 ; CHECK-NEXT:    ret double [[EXT]]
 ;
-  %x = load volatile <4 x double>, <4 x double>* %p
+  %x = load volatile <4 x double>, ptr %p
   %ext = extractelement <4 x double> %x, i32 2
   ret double %ext
 }
 
-define double @extract_load_extra_use(<4 x double>* %p, <4 x double>* %p2) {
+define double @extract_load_extra_use(ptr %p, ptr %p2) {
 ;
 ; CHECK-LABEL: @extract_load_extra_use(
-; CHECK-NEXT:    [[X:%.*]] = load <4 x double>, <4 x double>* [[P:%.*]], align 8
+; CHECK-NEXT:    [[X:%.*]] = load <4 x double>, ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[EXT:%.*]] = extractelement <4 x double> [[X]], i64 0
-; CHECK-NEXT:    store <4 x double> [[X]], <4 x double>* [[P2:%.*]], align 32
+; CHECK-NEXT:    store <4 x double> [[X]], ptr [[P2:%.*]], align 32
 ; CHECK-NEXT:    ret double [[EXT]]
 ;
-  %x = load <4 x double>, <4 x double>* %p, align 8
+  %x = load <4 x double>, ptr %p, align 8
   %ext = extractelement <4 x double> %x, i32 0
-  store <4 x double> %x, <4 x double>* %p2
+  store <4 x double> %x, ptr %p2
   ret double %ext
 }
 
-define double @extract_load_variable_index(<4 x double>* %p, i32 %y) {
+define double @extract_load_variable_index(ptr %p, i32 %y) {
 ;
 ; CHECK-LABEL: @extract_load_variable_index(
-; CHECK-NEXT:    [[X:%.*]] = load <4 x double>, <4 x double>* [[P:%.*]], align 32
+; CHECK-NEXT:    [[X:%.*]] = load <4 x double>, ptr [[P:%.*]], align 32
 ; CHECK-NEXT:    [[EXT:%.*]] = extractelement <4 x double> [[X]], i32 [[Y:%.*]]
 ; CHECK-NEXT:    ret double [[EXT]]
 ;
-  %x = load <4 x double>, <4 x double>* %p
+  %x = load <4 x double>, ptr %p
   %ext = extractelement <4 x double> %x, i32 %y
   ret double %ext
 }
 
-define void @scalarize_phi(i32 * %n, float * %inout) {
+define void @scalarize_phi(ptr %n, ptr %inout) {
 ;
 ; CHECK-LABEL: @scalarize_phi(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[T0:%.*]] = load volatile float, float* [[INOUT:%.*]], align 4
+; CHECK-NEXT:    [[T0:%.*]] = load volatile float, ptr [[INOUT:%.*]], align 4
 ; CHECK-NEXT:    br label [[FOR_COND:%.*]]
 ; CHECK:       for.cond:
 ; CHECK-NEXT:    [[TMP0:%.*]] = phi float [ [[T0]], [[ENTRY:%.*]] ], [ [[TMP1:%.*]], [[FOR_BODY:%.*]] ]
 ; CHECK-NEXT:    [[I_0:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
-; CHECK-NEXT:    [[T1:%.*]] = load i32, i32* [[N:%.*]], align 4
+; CHECK-NEXT:    [[T1:%.*]] = load i32, ptr [[N:%.*]], align 4
 ; CHECK-NEXT:    [[CMP_NOT:%.*]] = icmp eq i32 [[I_0]], [[T1]]
 ; CHECK-NEXT:    br i1 [[CMP_NOT]], label [[FOR_END:%.*]], label [[FOR_BODY]]
 ; CHECK:       for.body:
-; CHECK-NEXT:    store volatile float [[TMP0]], float* [[INOUT]], align 4
+; CHECK-NEXT:    store volatile float [[TMP0]], ptr [[INOUT]], align 4
 ; CHECK-NEXT:    [[TMP1]] = fmul float [[TMP0]], 0x4002A3D700000000
 ; CHECK-NEXT:    [[INC]] = add nuw nsw i32 [[I_0]], 1
 ; CHECK-NEXT:    br label [[FOR_COND]]
@@ -84,7 +84,7 @@ define void @scalarize_phi(i32 * %n, float * %inout) {
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %t0 = load volatile float, float * %inout, align 4
+  %t0 = load volatile float, ptr %inout, align 4
   %insert = insertelement <4 x float> undef, float %t0, i32 0
   %splat = shufflevector <4 x float> %insert, <4 x float> undef, <4 x i32> zeroinitializer
   %insert1 = insertelement <4 x float> undef, float 3.0, i32 0
@@ -93,13 +93,13 @@ entry:
 for.cond:
   %x.0 = phi <4 x float> [ %splat, %entry ], [ %mul, %for.body ]
   %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
-  %t1 = load i32, i32 * %n, align 4
+  %t1 = load i32, ptr %n, align 4
   %cmp = icmp ne i32 %i.0, %t1
   br i1 %cmp, label %for.body, label %for.end
 
 for.body:
   %t2 = extractelement <4 x float> %x.0, i32 1
-  store volatile float %t2, float * %inout, align 4
+  store volatile float %t2, ptr %inout, align 4
   %mul = fmul <4 x float> %x.0, <float 0x4002A3D700000000, float 0x4002A3D700000000, float 0x4002A3D700000000, float 0x4002A3D700000000>
   %inc = add nsw i32 %i.0, 1
   br label %for.cond
@@ -180,32 +180,32 @@ define i8 @extract_element_binop_nonsplat_variable_index(<4 x i8> %x, i32 %y) {
   ret i8 %r
 }
 
-define float @extract_element_load(<4 x float> %x, <4 x float>* %ptr) {
+define float @extract_element_load(<4 x float> %x, ptr %ptr) {
 ;
 ; CHECK-LABEL: @extract_element_load(
-; CHECK-NEXT:    [[LOAD:%.*]] = load <4 x float>, <4 x float>* [[PTR:%.*]], align 16
+; CHECK-NEXT:    [[LOAD:%.*]] = load <4 x float>, ptr [[PTR:%.*]], align 16
 ; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x float> [[LOAD]], i64 2
 ; CHECK-NEXT:    [[TMP2:%.*]] = extractelement <4 x float> [[X:%.*]], i64 2
 ; CHECK-NEXT:    [[R:%.*]] = fadd float [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret float [[R]]
 ;
-  %load = load <4 x float>, <4 x float>* %ptr
+  %load = load <4 x float>, ptr %ptr
   %add = fadd <4 x float> %x, %load
   %r = extractelement <4 x float> %add, i32 2
   ret float %r
 }
 
-define float @extract_element_multi_Use_load(<4 x float> %x, <4 x float>* %ptr0, <4 x float>* %ptr1) {
+define float @extract_element_multi_Use_load(<4 x float> %x, ptr %ptr0, ptr %ptr1) {
 ;
 ; CHECK-LABEL: @extract_element_multi_Use_load(
-; CHECK-NEXT:    [[LOAD:%.*]] = load <4 x float>, <4 x float>* [[PTR0:%.*]], align 16
-; CHECK-NEXT:    store <4 x float> [[LOAD]], <4 x float>* [[PTR1:%.*]], align 16
+; CHECK-NEXT:    [[LOAD:%.*]] = load <4 x float>, ptr [[PTR0:%.*]], align 16
+; CHECK-NEXT:    store <4 x float> [[LOAD]], ptr [[PTR1:%.*]], align 16
 ; CHECK-NEXT:    [[ADD:%.*]] = fadd <4 x float> [[LOAD]], [[X:%.*]]
 ; CHECK-NEXT:    [[R:%.*]] = extractelement <4 x float> [[ADD]], i64 2
 ; CHECK-NEXT:    ret float [[R]]
 ;
-  %load = load <4 x float>, <4 x float>* %ptr0
-  store <4 x float> %load, <4 x float>* %ptr1
+  %load = load <4 x float>, ptr %ptr0
+  store <4 x float> %load, ptr %ptr1
   %add = fadd <4 x float> %x, %load
   %r = extractelement <4 x float> %add, i32 2
   ret float %r
@@ -345,13 +345,13 @@ define i1 @extractelt_vector_fcmp_not_cheap_to_scalarize_multi_use(<2 x float> %
 ;
 ; CHECK-LABEL: @extractelt_vector_fcmp_not_cheap_to_scalarize_multi_use(
 ; CHECK-NEXT:    [[ADD:%.*]] = fadd <2 x float> [[ARG1:%.*]], [[ARG2:%.*]]
-; CHECK-NEXT:    store volatile <2 x float> [[ADD]], <2 x float>* undef, align 8
+; CHECK-NEXT:    store volatile <2 x float> [[ADD]], ptr undef, align 8
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp oeq <2 x float> [[ADD]], [[ARG0:%.*]]
 ; CHECK-NEXT:    [[EXT:%.*]] = extractelement <2 x i1> [[CMP]], i64 0
 ; CHECK-NEXT:    ret i1 [[EXT]]
 ;
   %add = fadd <2 x float> %arg1, %arg2
-  store volatile <2 x float> %add, <2 x float>* undef
+  store volatile <2 x float> %add, ptr undef
   %cmp = fcmp oeq <2 x float> %arg0, %add
   %ext = extractelement <2 x i1> %cmp, i32 0
   ret i1 %ext
index 3f8fdda9efc07978b50816d3c0e3063a077a5c2a..7ac1d76d94a9f5906be66b5eaa150954e73cd096 100644 (file)
@@ -85,10 +85,10 @@ define i64 @test_sdiv_canonicalize_constexpr(i64 %L1) {
 ; currently opt folds (sub nsw i64 0, constexpr) -> (sub i64, 0, constexpr).
 ; sdiv canonicalize requires a nsw sub.
 ; CHECK-LABEL: @test_sdiv_canonicalize_constexpr(
-; CHECK-NEXT:    [[B4:%.*]] = sdiv i64 [[L1:%.*]], sub (i64 0, i64 ptrtoint (i32* @X to i64))
+; CHECK-NEXT:    [[B4:%.*]] = sdiv i64 [[L1:%.*]], sub (i64 0, i64 ptrtoint (ptr @X to i64))
 ; CHECK-NEXT:    ret i64 [[B4]]
 ;
-  %v1 = ptrtoint i32* @X to i64
+  %v1 = ptrtoint ptr @X to i64
   %B8 = sub nsw i64 0, %v1
   %B4 = sdiv i64 %L1, %B8
   ret i64 %B4
index 16fbb8a6dab11dbc2abb3e557a86f99d020de721..883652e1f761d0334dd9236fe10de7f5b890116e 100644 (file)
@@ -431,11 +431,11 @@ define i1 @not_false_not_use3(i1 %x, i1 %y) {
 define i1 @demorgan_select_infloop1(i1 %L) {
 ; CHECK-LABEL: @demorgan_select_infloop1(
 ; CHECK-NEXT:    [[NOT_L:%.*]] = xor i1 [[L:%.*]], true
-; CHECK-NEXT:    [[C15:%.*]] = select i1 [[NOT_L]], i1 xor (i1 and (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1), i1 icmp ne (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1)), i1 true), i1 false
+; CHECK-NEXT:    [[C15:%.*]] = select i1 [[NOT_L]], i1 xor (i1 and (i1 icmp eq (ptr getelementptr inbounds (i16, ptr @g2, i64 1), ptr @g1), i1 icmp ne (ptr getelementptr inbounds (i16, ptr @g2, i64 1), ptr @g1)), i1 true), i1 false
 ; CHECK-NEXT:    ret i1 [[C15]]
 ;
   %not.L = xor i1 %L, true
-  %C15 = select i1 %not.L, i1 xor (i1 and (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1), i1 icmp ne (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1)), i1 true), i1 false
+  %C15 = select i1 %not.L, i1 xor (i1 and (i1 icmp eq (ptr getelementptr inbounds (i16, ptr @g2, i64 1), ptr @g1), i1 icmp ne (ptr getelementptr inbounds (i16, ptr @g2, i64 1), ptr @g1)), i1 true), i1 false
   ret i1 %C15
 }
 
@@ -443,11 +443,11 @@ define i1 @demorgan_select_infloop1(i1 %L) {
 define i1 @demorgan_select_infloop2(i1 %L) {
 ; CHECK-LABEL: @demorgan_select_infloop2(
 ; CHECK-NEXT:    [[NOT_L:%.*]] = xor i1 [[L:%.*]], true
-; CHECK-NEXT:    [[C15:%.*]] = select i1 [[NOT_L]], i1 true, i1 xor (i1 and (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1), i1 icmp ne (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1)), i1 true)
+; CHECK-NEXT:    [[C15:%.*]] = select i1 [[NOT_L]], i1 true, i1 xor (i1 and (i1 icmp eq (ptr getelementptr inbounds (i16, ptr @g2, i64 1), ptr @g1), i1 icmp ne (ptr getelementptr inbounds (i16, ptr @g2, i64 1), ptr @g1)), i1 true)
 ; CHECK-NEXT:    ret i1 [[C15]]
 ;
   %not.L = xor i1 %L, true
-  %C15 = select i1 %not.L, i1 true, i1 xor (i1 and (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1), i1 icmp ne (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1)), i1 true)
+  %C15 = select i1 %not.L, i1 true, i1 xor (i1 and (i1 icmp eq (ptr getelementptr inbounds (i16, ptr @g2, i64 1), ptr @g1), i1 icmp ne (ptr getelementptr inbounds (i16, ptr @g2, i64 1), ptr @g1)), i1 true)
   ret i1 %C15
 }
 
index f9a708b2ee8c4d271f673eaf2d8b6bec88e259d5..e23461155dbf800418008bcd6c4937f60f95ad9f 100644 (file)
@@ -1226,12 +1226,12 @@ define i32 @select_replace_nested(i32 %x, i32 %y, i32 %z) {
 ; loops.
 define i32 @select_replace_constexpr(i32 %x, i32 %y, i32 %z) {
 ; CHECK-LABEL: @select_replace_constexpr(
-; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 [[X:%.*]], ptrtoint (i32* @g to i32)
+; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 [[X:%.*]], ptrtoint (ptr @g to i32)
 ; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[X]], [[Y:%.*]]
 ; CHECK-NEXT:    [[S:%.*]] = select i1 [[C]], i32 [[ADD]], i32 [[Z:%.*]]
 ; CHECK-NEXT:    ret i32 [[S]]
 ;
-  %c = icmp eq i32 %x, ptrtoint (i32* @g to i32)
+  %c = icmp eq i32 %x, ptrtoint (ptr @g to i32)
   %add = add i32 %x, %y
   %s = select i1 %c, i32 %add, i32 %z
   ret i32 %s
index 4dff0ccc9400f7687a7ba2d8a1cdb18ce127ef50..624728e190cff36ed068237f45d144edd0fc3d9d 100644 (file)
@@ -536,89 +536,89 @@ define <2 x i32> @test_cttz_not_bw_vec(<2 x i32> %x) {
   ret <2 x i32> %res
 }
 
-define i32 @test_multiuse_def(i32 %x, i32* %p) {
+define i32 @test_multiuse_def(i32 %x, ptr %p) {
 ; CHECK-LABEL: @test_multiuse_def(
 ; CHECK-NEXT:    [[CT:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[X:%.*]], i1 false), !range [[RNG1]]
-; CHECK-NEXT:    store i32 [[CT]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[CT]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i32 [[CT]]
 ;
   %ct = tail call i32 @llvm.ctlz.i32(i32 %x, i1 false)
   %tobool = icmp ne i32 %x, 0
   %cond = select i1 %tobool, i32 %ct, i32 32
-  store i32 %ct, i32* %p
+  store i32 %ct, ptr %p
   ret i32 %cond
 }
 
-define i32 @test_multiuse_undef(i32 %x, i32* %p) {
+define i32 @test_multiuse_undef(i32 %x, ptr %p) {
 ; CHECK-LABEL: @test_multiuse_undef(
 ; CHECK-NEXT:    [[CT:%.*]] = tail call i32 @llvm.ctlz.i32(i32 [[X:%.*]], i1 false), !range [[RNG1]]
-; CHECK-NEXT:    store i32 [[CT]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[CT]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i32 [[CT]]
 ;
   %ct = tail call i32 @llvm.ctlz.i32(i32 %x, i1 true)
   %tobool = icmp ne i32 %x, 0
   %cond = select i1 %tobool, i32 %ct, i32 32
-  store i32 %ct, i32* %p
+  store i32 %ct, ptr %p
   ret i32 %cond
 }
 
-define i64 @test_multiuse_zext_def(i32 %x, i64* %p) {
+define i64 @test_multiuse_zext_def(i32 %x, ptr %p) {
 ; CHECK-LABEL: @test_multiuse_zext_def(
 ; CHECK-NEXT:    [[CT:%.*]] = tail call i32 @llvm.cttz.i32(i32 [[X:%.*]], i1 false), !range [[RNG1]]
 ; CHECK-NEXT:    [[CONV:%.*]] = zext i32 [[CT]] to i64
-; CHECK-NEXT:    store i64 [[CONV]], i64* [[P:%.*]], align 4
+; CHECK-NEXT:    store i64 [[CONV]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i64 [[CONV]]
 ;
   %ct = tail call i32 @llvm.cttz.i32(i32 %x, i1 false)
   %conv = zext i32 %ct to i64
   %tobool = icmp ne i32 %x, 0
   %cond = select i1 %tobool, i64 %conv, i64 32
-  store i64 %conv, i64* %p
+  store i64 %conv, ptr %p
   ret i64 %cond
 }
 
-define i64 @test_multiuse_zext_undef(i32 %x, i64* %p) {
+define i64 @test_multiuse_zext_undef(i32 %x, ptr %p) {
 ; CHECK-LABEL: @test_multiuse_zext_undef(
 ; CHECK-NEXT:    [[CT:%.*]] = tail call i32 @llvm.cttz.i32(i32 [[X:%.*]], i1 false), !range [[RNG1]]
 ; CHECK-NEXT:    [[CONV:%.*]] = zext i32 [[CT]] to i64
-; CHECK-NEXT:    store i64 [[CONV]], i64* [[P:%.*]], align 4
+; CHECK-NEXT:    store i64 [[CONV]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i64 [[CONV]]
 ;
   %ct = tail call i32 @llvm.cttz.i32(i32 %x, i1 true)
   %conv = zext i32 %ct to i64
   %tobool = icmp ne i32 %x, 0
   %cond = select i1 %tobool, i64 %conv, i64 32
-  store i64 %conv, i64* %p
+  store i64 %conv, ptr %p
   ret i64 %cond
 }
 
-define i16 @test_multiuse_trunc_def(i64 %x, i16 *%p) {
+define i16 @test_multiuse_trunc_def(i64 %x, ptr %p) {
 ; CHECK-LABEL: @test_multiuse_trunc_def(
 ; CHECK-NEXT:    [[CT:%.*]] = tail call i64 @llvm.cttz.i64(i64 [[X:%.*]], i1 false), !range [[RNG2]]
 ; CHECK-NEXT:    [[CONV:%.*]] = trunc i64 [[CT]] to i16
-; CHECK-NEXT:    store i16 [[CONV]], i16* [[P:%.*]], align 2
+; CHECK-NEXT:    store i16 [[CONV]], ptr [[P:%.*]], align 2
 ; CHECK-NEXT:    ret i16 [[CONV]]
 ;
   %ct = tail call i64 @llvm.cttz.i64(i64 %x, i1 false)
   %conv = trunc i64 %ct to i16
   %tobool = icmp ne i64 %x, 0
   %cond = select i1 %tobool, i16 %conv, i16 64
-  store i16 %conv, i16* %p
+  store i16 %conv, ptr %p
   ret i16 %cond
 }
 
-define i16 @test_multiuse_trunc_undef(i64 %x, i16 *%p) {
+define i16 @test_multiuse_trunc_undef(i64 %x, ptr %p) {
 ; CHECK-LABEL: @test_multiuse_trunc_undef(
 ; CHECK-NEXT:    [[CT:%.*]] = tail call i64 @llvm.cttz.i64(i64 [[X:%.*]], i1 false), !range [[RNG2]]
 ; CHECK-NEXT:    [[CONV:%.*]] = trunc i64 [[CT]] to i16
-; CHECK-NEXT:    store i16 [[CONV]], i16* [[P:%.*]], align 2
+; CHECK-NEXT:    store i16 [[CONV]], ptr [[P:%.*]], align 2
 ; CHECK-NEXT:    ret i16 [[CONV]]
 ;
   %ct = tail call i64 @llvm.cttz.i64(i64 %x, i1 true)
   %conv = trunc i64 %ct to i16
   %tobool = icmp ne i64 %x, 0
   %cond = select i1 %tobool, i16 %conv, i16 64
-  store i16 %conv, i16* %p
+  store i16 %conv, ptr %p
   ret i16 %cond
 }
 
index 906dfb57c764689082e849576e764e6c04ddfe59..2ce9c03d7f3f740b74ab6c12e11776b19a6470c0 100644 (file)
@@ -1,36 +1,36 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-define i64 @cmpxchg_0(i64* %ptr, i64 %compare, i64 %new_value) {
+define i64 @cmpxchg_0(ptr %ptr, i64 %compare, i64 %new_value) {
 ; CHECK-LABEL: @cmpxchg_0(
-; CHECK-NEXT:    %tmp0 = cmpxchg i64* %ptr, i64 %compare, i64 %new_value seq_cst seq_cst
+; CHECK-NEXT:    %tmp0 = cmpxchg ptr %ptr, i64 %compare, i64 %new_value seq_cst seq_cst
 ; CHECK-NEXT:    %tmp2 = extractvalue { i64, i1 } %tmp0, 0
 ; CHECK-NEXT:    ret i64 %tmp2
 ;
-  %tmp0 = cmpxchg i64* %ptr, i64 %compare, i64 %new_value seq_cst seq_cst
+  %tmp0 = cmpxchg ptr %ptr, i64 %compare, i64 %new_value seq_cst seq_cst
   %tmp1 = extractvalue { i64, i1 } %tmp0, 1
   %tmp2 = extractvalue { i64, i1 } %tmp0, 0
   %tmp3 = select i1 %tmp1, i64 %compare, i64 %tmp2
   ret i64 %tmp3
 }
 
-define i64 @cmpxchg_1(i64* %ptr, i64 %compare, i64 %new_value) {
+define i64 @cmpxchg_1(ptr %ptr, i64 %compare, i64 %new_value) {
 ; CHECK-LABEL: @cmpxchg_1(
-; CHECK-NEXT:    %tmp0 = cmpxchg i64* %ptr, i64 %compare, i64 %new_value seq_cst seq_cst
+; CHECK-NEXT:    %tmp0 = cmpxchg ptr %ptr, i64 %compare, i64 %new_value seq_cst seq_cst
 ; CHECK-NEXT:    ret i64 %compare
 ;
-  %tmp0 = cmpxchg i64* %ptr, i64 %compare, i64 %new_value seq_cst seq_cst
+  %tmp0 = cmpxchg ptr %ptr, i64 %compare, i64 %new_value seq_cst seq_cst
   %tmp1 = extractvalue { i64, i1 } %tmp0, 1
   %tmp2 = extractvalue { i64, i1 } %tmp0, 0
   %tmp3 = select i1 %tmp1, i64 %tmp2, i64 %compare
   ret i64 %tmp3
 }
 
-define i64 @cmpxchg_2(i64* %ptr, i64 %compare, i64 %new_value) {
+define i64 @cmpxchg_2(ptr %ptr, i64 %compare, i64 %new_value) {
 ; CHECK-LABEL: @cmpxchg_2(
-; CHECK-NEXT:    %tmp0 = cmpxchg i64* %ptr, i64 %compare, i64 %new_value acq_rel monotonic
+; CHECK-NEXT:    %tmp0 = cmpxchg ptr %ptr, i64 %compare, i64 %new_value acq_rel monotonic
 ; CHECK-NEXT:    ret i64 %compare
 ;
-  %tmp0 = cmpxchg i64* %ptr, i64 %compare, i64 %new_value acq_rel monotonic
+  %tmp0 = cmpxchg ptr %ptr, i64 %compare, i64 %new_value acq_rel monotonic
   %tmp1 = extractvalue { i64, i1 } %tmp0, 1
   %tmp2 = extractvalue { i64, i1 } %tmp0, 0
   %tmp3 = select i1 %tmp1, i64 %compare, i64 %tmp2
index 7fcd90ec3af4836ef3e26409a221215b81148e4b..7755745bf3d620c020e1a97ddddbcd1a93f8651e 100644 (file)
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-define i32* @test1a(i32* %p, i32* %q) {
+define ptr @test1a(ptr %p, ptr %q) {
 ; CHECK-LABEL: @test1a(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i32* [[P:%.*]], [[Q:%.*]]
-; CHECK-NEXT:    [[SELECT_V:%.*]] = select i1 [[CMP]], i32* [[P]], i32* [[Q]]
-; CHECK-NEXT:    [[SELECT:%.*]] = getelementptr i32, i32* [[SELECT_V]], i64 4
-; CHECK-NEXT:    ret i32* [[SELECT]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt ptr [[P:%.*]], [[Q:%.*]]
+; CHECK-NEXT:    [[SELECT_V:%.*]] = select i1 [[CMP]], ptr [[P]], ptr [[Q]]
+; CHECK-NEXT:    [[SELECT:%.*]] = getelementptr i32, ptr [[SELECT_V]], i64 4
+; CHECK-NEXT:    ret ptr [[SELECT]]
 ;
-  %gep1 = getelementptr i32, i32* %p, i64 4
-  %gep2 = getelementptr i32, i32* %q, i64 4
-  %cmp = icmp ugt i32* %p, %q
-  %select = select i1 %cmp, i32* %gep1, i32* %gep2
-  ret i32* %select
+  %gep1 = getelementptr i32, ptr %p, i64 4
+  %gep2 = getelementptr i32, ptr %q, i64 4
+  %cmp = icmp ugt ptr %p, %q
+  %select = select i1 %cmp, ptr %gep1, ptr %gep2
+  ret ptr %select
 }
 
-define i32* @test1b(i32* %p, i32* %q) {
+define ptr @test1b(ptr %p, ptr %q) {
 ; CHECK-LABEL: @test1b(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i32* [[P:%.*]], [[Q:%.*]]
-; CHECK-NEXT:    [[SELECT_V:%.*]] = select i1 [[CMP]], i32* [[P]], i32* [[Q]]
-; CHECK-NEXT:    [[SELECT:%.*]] = getelementptr i32, i32* [[SELECT_V]], i64 4
-; CHECK-NEXT:    ret i32* [[SELECT]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt ptr [[P:%.*]], [[Q:%.*]]
+; CHECK-NEXT:    [[SELECT_V:%.*]] = select i1 [[CMP]], ptr [[P]], ptr [[Q]]
+; CHECK-NEXT:    [[SELECT:%.*]] = getelementptr i32, ptr [[SELECT_V]], i64 4
+; CHECK-NEXT:    ret ptr [[SELECT]]
 ;
-  %gep1 = getelementptr inbounds i32, i32* %p, i64 4
-  %gep2 = getelementptr i32, i32* %q, i64 4
-  %cmp = icmp ugt i32* %p, %q
-  %select = select i1 %cmp, i32* %gep1, i32* %gep2
-  ret i32* %select
+  %gep1 = getelementptr inbounds i32, ptr %p, i64 4
+  %gep2 = getelementptr i32, ptr %q, i64 4
+  %cmp = icmp ugt ptr %p, %q
+  %select = select i1 %cmp, ptr %gep1, ptr %gep2
+  ret ptr %select
 }
 
-define i32* @test1c(i32* %p, i32* %q) {
+define ptr @test1c(ptr %p, ptr %q) {
 ; CHECK-LABEL: @test1c(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i32* [[P:%.*]], [[Q:%.*]]
-; CHECK-NEXT:    [[SELECT_V:%.*]] = select i1 [[CMP]], i32* [[P]], i32* [[Q]]
-; CHECK-NEXT:    [[SELECT:%.*]] = getelementptr i32, i32* [[SELECT_V]], i64 4
-; CHECK-NEXT:    ret i32* [[SELECT]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt ptr [[P:%.*]], [[Q:%.*]]
+; CHECK-NEXT:    [[SELECT_V:%.*]] = select i1 [[CMP]], ptr [[P]], ptr [[Q]]
+; CHECK-NEXT:    [[SELECT:%.*]] = getelementptr i32, ptr [[SELECT_V]], i64 4
+; CHECK-NEXT:    ret ptr [[SELECT]]
 ;
-  %gep1 = getelementptr i32, i32* %p, i64 4
-  %gep2 = getelementptr inbounds i32, i32* %q, i64 4
-  %cmp = icmp ugt i32* %p, %q
-  %select = select i1 %cmp, i32* %gep1, i32* %gep2
-  ret i32* %select
+  %gep1 = getelementptr i32, ptr %p, i64 4
+  %gep2 = getelementptr inbounds i32, ptr %q, i64 4
+  %cmp = icmp ugt ptr %p, %q
+  %select = select i1 %cmp, ptr %gep1, ptr %gep2
+  ret ptr %select
 }
 
-define i32* @test1d(i32* %p, i32* %q) {
+define ptr @test1d(ptr %p, ptr %q) {
 ; CHECK-LABEL: @test1d(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i32* [[P:%.*]], [[Q:%.*]]
-; CHECK-NEXT:    [[SELECT_V:%.*]] = select i1 [[CMP]], i32* [[P]], i32* [[Q]]
-; CHECK-NEXT:    [[SELECT:%.*]] = getelementptr inbounds i32, i32* [[SELECT_V]], i64 4
-; CHECK-NEXT:    ret i32* [[SELECT]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt ptr [[P:%.*]], [[Q:%.*]]
+; CHECK-NEXT:    [[SELECT_V:%.*]] = select i1 [[CMP]], ptr [[P]], ptr [[Q]]
+; CHECK-NEXT:    [[SELECT:%.*]] = getelementptr inbounds i32, ptr [[SELECT_V]], i64 4
+; CHECK-NEXT:    ret ptr [[SELECT]]
 ;
-  %gep1 = getelementptr inbounds i32, i32* %p, i64 4
-  %gep2 = getelementptr inbounds i32, i32* %q, i64 4
-  %cmp = icmp ugt i32* %p, %q
-  %select = select i1 %cmp, i32* %gep1, i32* %gep2
-  ret i32* %select
+  %gep1 = getelementptr inbounds i32, ptr %p, i64 4
+  %gep2 = getelementptr inbounds i32, ptr %q, i64 4
+  %cmp = icmp ugt ptr %p, %q
+  %select = select i1 %cmp, ptr %gep1, ptr %gep2
+  ret ptr %select
 }
 
-define i32* @test2(i32* %p, i64 %x, i64 %y) {
+define ptr @test2(ptr %p, i64 %x, i64 %y) {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:    [[TMP1:%.*]] = call i64 @llvm.umax.i64(i64 [[X:%.*]], i64 [[Y:%.*]])
-; CHECK-NEXT:    [[SELECT:%.*]] = getelementptr inbounds i32, i32* [[P:%.*]], i64 [[TMP1]]
-; CHECK-NEXT:    ret i32* [[SELECT]]
+; CHECK-NEXT:    [[SELECT:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 [[TMP1]]
+; CHECK-NEXT:    ret ptr [[SELECT]]
 ;
-  %gep1 = getelementptr inbounds i32, i32* %p, i64 %x
-  %gep2 = getelementptr inbounds i32, i32* %p, i64 %y
+  %gep1 = getelementptr inbounds i32, ptr %p, i64 %x
+  %gep2 = getelementptr inbounds i32, ptr %p, i64 %y
   %cmp = icmp ugt i64 %x, %y
-  %select = select i1 %cmp, i32* %gep1, i32* %gep2
-  ret i32* %select
+  %select = select i1 %cmp, ptr %gep1, ptr %gep2
+  ret ptr %select
 }
 
 ; PR50183
-define i32* @test2a(i32* %p, i64 %x, i64 %y) {
+define ptr @test2a(ptr %p, i64 %x, i64 %y) {
 ; CHECK-LABEL: @test2a(
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i64 [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[SELECT_IDX:%.*]] = select i1 [[CMP]], i64 [[X]], i64 0
-; CHECK-NEXT:    [[SELECT:%.*]] = getelementptr i32, i32* [[P:%.*]], i64 [[SELECT_IDX]]
-; CHECK-NEXT:    ret i32* [[SELECT]]
+; CHECK-NEXT:    [[SELECT:%.*]] = getelementptr i32, ptr [[P:%.*]], i64 [[SELECT_IDX]]
+; CHECK-NEXT:    ret ptr [[SELECT]]
 ;
-  %gep = getelementptr inbounds i32, i32* %p, i64 %x
+  %gep = getelementptr inbounds i32, ptr %p, i64 %x
   %cmp = icmp ugt i64 %x, %y
-  %select = select i1 %cmp, i32* %gep, i32* %p
-  ret i32* %select
+  %select = select i1 %cmp, ptr %gep, ptr %p
+  ret ptr %select
 }
 
 ; PR50183
-define i32* @test2b(i32* %p, i64 %x, i64 %y) {
+define ptr @test2b(ptr %p, i64 %x, i64 %y) {
 ; CHECK-LABEL: @test2b(
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i64 [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[SELECT_IDX:%.*]] = select i1 [[CMP]], i64 0, i64 [[X]]
-; CHECK-NEXT:    [[SELECT:%.*]] = getelementptr i32, i32* [[P:%.*]], i64 [[SELECT_IDX]]
-; CHECK-NEXT:    ret i32* [[SELECT]]
+; CHECK-NEXT:    [[SELECT:%.*]] = getelementptr i32, ptr [[P:%.*]], i64 [[SELECT_IDX]]
+; CHECK-NEXT:    ret ptr [[SELECT]]
 ;
-  %gep = getelementptr inbounds i32, i32* %p, i64 %x
+  %gep = getelementptr inbounds i32, ptr %p, i64 %x
   %cmp = icmp ugt i64 %x, %y
-  %select = select i1 %cmp, i32* %p, i32* %gep
-  ret i32* %select
+  %select = select i1 %cmp, ptr %p, ptr %gep
+  ret ptr %select
 }
 
 ; PR51069
-define i32* @test2c(i32* %p, i64 %x, i64 %y) {
+define ptr @test2c(ptr %p, i64 %x, i64 %y) {
 ; CHECK-LABEL: @test2c(
-; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds i32, i32* [[P:%.*]], i64 [[X:%.*]]
+; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 [[X:%.*]]
 ; CHECK-NEXT:    [[ICMP:%.*]] = icmp ugt i64 [[X]], [[Y:%.*]]
 ; CHECK-NEXT:    [[SEL_IDX:%.*]] = select i1 [[ICMP]], i64 0, i64 6
-; CHECK-NEXT:    [[SEL:%.*]] = getelementptr i32, i32* [[GEP1]], i64 [[SEL_IDX]]
-; CHECK-NEXT:    ret i32* [[SEL]]
+; CHECK-NEXT:    [[SEL:%.*]] = getelementptr i32, ptr [[GEP1]], i64 [[SEL_IDX]]
+; CHECK-NEXT:    ret ptr [[SEL]]
 ;
-  %gep1 = getelementptr inbounds i32, i32* %p, i64 %x
-  %gep2 = getelementptr inbounds i32, i32* %gep1, i64 6
+  %gep1 = getelementptr inbounds i32, ptr %p, i64 %x
+  %gep2 = getelementptr inbounds i32, ptr %gep1, i64 6
   %icmp = icmp ugt i64 %x, %y
-  %sel = select i1 %icmp, i32* %gep1, i32* %gep2
-  ret i32* %sel
+  %sel = select i1 %icmp, ptr %gep1, ptr %gep2
+  ret ptr %sel
 }
 
 ; PR51069
-define i32* @test2d(i32* %p, i64 %x, i64 %y) {
+define ptr @test2d(ptr %p, i64 %x, i64 %y) {
 ; CHECK-LABEL: @test2d(
-; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds i32, i32* [[P:%.*]], i64 [[X:%.*]]
+; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 [[X:%.*]]
 ; CHECK-NEXT:    [[ICMP:%.*]] = icmp ugt i64 [[X]], [[Y:%.*]]
 ; CHECK-NEXT:    [[SEL_IDX:%.*]] = select i1 [[ICMP]], i64 6, i64 0
-; CHECK-NEXT:    [[SEL:%.*]] = getelementptr i32, i32* [[GEP1]], i64 [[SEL_IDX]]
-; CHECK-NEXT:    ret i32* [[SEL]]
+; CHECK-NEXT:    [[SEL:%.*]] = getelementptr i32, ptr [[GEP1]], i64 [[SEL_IDX]]
+; CHECK-NEXT:    ret ptr [[SEL]]
 ;
-  %gep1 = getelementptr inbounds i32, i32* %p, i64 %x
-  %gep2 = getelementptr inbounds i32, i32* %gep1, i64 6
+  %gep1 = getelementptr inbounds i32, ptr %p, i64 %x
+  %gep2 = getelementptr inbounds i32, ptr %gep1, i64 6
   %icmp = icmp ugt i64 %x, %y
-  %sel = select i1 %icmp, i32* %gep2, i32* %gep1
-  ret i32* %sel
+  %sel = select i1 %icmp, ptr %gep2, ptr %gep1
+  ret ptr %sel
 }
 
 ; Three (or more) operand GEPs are currently expected to not be optimised,
 ; though they could be in principle.
 
-define i32* @test3a([4 x i32]* %p, i64 %x, i64 %y) {
+define ptr @test3a(ptr %p, i64 %x, i64 %y) {
 ; CHECK-LABEL: @test3a(
-; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [4 x i32], [4 x i32]* [[P:%.*]], i64 2, i64 [[X:%.*]]
-; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [4 x i32], [4 x i32]* [[P]], i64 2, i64 [[Y:%.*]]
+; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [4 x i32], ptr [[P:%.*]], i64 2, i64 [[X:%.*]]
+; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [4 x i32], ptr [[P]], i64 2, i64 [[Y:%.*]]
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i64 [[X]], [[Y]]
-; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[CMP]], i32* [[GEP1]], i32* [[GEP2]]
-; CHECK-NEXT:    ret i32* [[SELECT]]
+; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[CMP]], ptr [[GEP1]], ptr [[GEP2]]
+; CHECK-NEXT:    ret ptr [[SELECT]]
 ;
-  %gep1 = getelementptr inbounds [4 x i32], [4 x i32]* %p, i64 2, i64 %x
-  %gep2 = getelementptr inbounds [4 x i32], [4 x i32]* %p, i64 2, i64 %y
+  %gep1 = getelementptr inbounds [4 x i32], ptr %p, i64 2, i64 %x
+  %gep2 = getelementptr inbounds [4 x i32], ptr %p, i64 2, i64 %y
   %cmp = icmp ugt i64 %x, %y
-  %select = select i1 %cmp, i32* %gep1, i32* %gep2
-  ret i32* %select
+  %select = select i1 %cmp, ptr %gep1, ptr %gep2
+  ret ptr %select
 }
 
-define i32* @test3b([4 x i32]* %p, [4 x i32]* %q, i64 %x, i64 %y) {
+define ptr @test3b(ptr %p, ptr %q, i64 %x, i64 %y) {
 ; CHECK-LABEL: @test3b(
-; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [4 x i32], [4 x i32]* [[P:%.*]], i64 2, i64 [[X:%.*]]
-; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [4 x i32], [4 x i32]* [[Q:%.*]], i64 2, i64 [[X]]
+; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [4 x i32], ptr [[P:%.*]], i64 2, i64 [[X:%.*]]
+; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [4 x i32], ptr [[Q:%.*]], i64 2, i64 [[X]]
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i64 [[X]], [[Y:%.*]]
-; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[CMP]], i32* [[GEP1]], i32* [[GEP2]]
-; CHECK-NEXT:    ret i32* [[SELECT]]
+; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[CMP]], ptr [[GEP1]], ptr [[GEP2]]
+; CHECK-NEXT:    ret ptr [[SELECT]]
 ;
-  %gep1 = getelementptr inbounds [4 x i32], [4 x i32]* %p, i64 2, i64 %x
-  %gep2 = getelementptr inbounds [4 x i32], [4 x i32]* %q, i64 2, i64 %x
+  %gep1 = getelementptr inbounds [4 x i32], ptr %p, i64 2, i64 %x
+  %gep2 = getelementptr inbounds [4 x i32], ptr %q, i64 2, i64 %x
   %cmp = icmp ugt i64 %x, %y
-  %select = select i1 %cmp, i32* %gep1, i32* %gep2
-  ret i32* %select
+  %select = select i1 %cmp, ptr %gep1, ptr %gep2
+  ret ptr %select
 }
 
-define i32* @test3c([4 x i32]* %p, i32* %q, i64 %x, i64 %y) {
+define ptr @test3c(ptr %p, ptr %q, i64 %x, i64 %y) {
 ; CHECK-LABEL: @test3c(
-; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [4 x i32], [4 x i32]* [[P:%.*]], i64 [[X:%.*]], i64 2
-; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds i32, i32* [[Q:%.*]], i64 [[X]]
+; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [4 x i32], ptr [[P:%.*]], i64 [[X:%.*]], i64 2
+; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds i32, ptr [[Q:%.*]], i64 [[X]]
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i64 [[X]], [[Y:%.*]]
-; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[CMP]], i32* [[GEP1]], i32* [[GEP2]]
-; CHECK-NEXT:    ret i32* [[SELECT]]
+; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[CMP]], ptr [[GEP1]], ptr [[GEP2]]
+; CHECK-NEXT:    ret ptr [[SELECT]]
 ;
-  %gep1 = getelementptr inbounds [4 x i32], [4 x i32]* %p, i64 %x, i64 2
-  %gep2 = getelementptr inbounds i32, i32* %q, i64 %x
+  %gep1 = getelementptr inbounds [4 x i32], ptr %p, i64 %x, i64 2
+  %gep2 = getelementptr inbounds i32, ptr %q, i64 %x
   %cmp = icmp ugt i64 %x, %y
-  %select = select i1 %cmp, i32* %gep1, i32* %gep2
-  ret i32* %select
+  %select = select i1 %cmp, ptr %gep1, ptr %gep2
+  ret ptr %select
 }
 
-define i32* @test3d(i32* %p, [4 x i32]* %q, i64 %x, i64 %y) {
+define ptr @test3d(ptr %p, ptr %q, i64 %x, i64 %y) {
 ; CHECK-LABEL: @test3d(
-; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds i32, i32* [[P:%.*]], i64 [[X:%.*]]
-; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [4 x i32], [4 x i32]* [[Q:%.*]], i64 [[X]], i64 2
+; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 [[X:%.*]]
+; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [4 x i32], ptr [[Q:%.*]], i64 [[X]], i64 2
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i64 [[X]], [[Y:%.*]]
-; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[CMP]], i32* [[GEP1]], i32* [[GEP2]]
-; CHECK-NEXT:    ret i32* [[SELECT]]
+; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[CMP]], ptr [[GEP1]], ptr [[GEP2]]
+; CHECK-NEXT:    ret ptr [[SELECT]]
 ;
-  %gep1 = getelementptr inbounds i32, i32* %p, i64 %x
-  %gep2 = getelementptr inbounds [4 x i32], [4 x i32]* %q, i64 %x, i64 2
+  %gep1 = getelementptr inbounds i32, ptr %p, i64 %x
+  %gep2 = getelementptr inbounds [4 x i32], ptr %q, i64 %x, i64 2
   %cmp = icmp ugt i64 %x, %y
-  %select = select i1 %cmp, i32* %gep1, i32* %gep2
-  ret i32* %select
+  %select = select i1 %cmp, ptr %gep1, ptr %gep2
+  ret ptr %select
 }
 
 ; Shouldn't be optimised as it would mean introducing an extra select
 
-define i32* @test4(i32* %p, i32* %q, i64 %x, i64 %y) {
+define ptr @test4(ptr %p, ptr %q, i64 %x, i64 %y) {
 ; CHECK-LABEL: @test4(
-; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds i32, i32* [[P:%.*]], i64 [[X:%.*]]
-; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds i32, i32* [[Q:%.*]], i64 [[Y:%.*]]
+; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 [[X:%.*]]
+; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds i32, ptr [[Q:%.*]], i64 [[Y:%.*]]
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i64 [[X]], [[Y]]
-; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[CMP]], i32* [[GEP1]], i32* [[GEP2]]
-; CHECK-NEXT:    ret i32* [[SELECT]]
+; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[CMP]], ptr [[GEP1]], ptr [[GEP2]]
+; CHECK-NEXT:    ret ptr [[SELECT]]
 ;
-  %gep1 = getelementptr inbounds i32, i32* %p, i64 %x
-  %gep2 = getelementptr inbounds i32, i32* %q, i64 %y
+  %gep1 = getelementptr inbounds i32, ptr %p, i64 %x
+  %gep2 = getelementptr inbounds i32, ptr %q, i64 %y
   %cmp = icmp ugt i64 %x, %y
-  %select = select i1 %cmp, i32* %gep1, i32* %gep2
-  ret i32* %select
+  %select = select i1 %cmp, ptr %gep1, ptr %gep2
+  ret ptr %select
 }
 
 ; We cannot create a select with a vector condition but scalar operands.
 
-define <2 x i64*> @test5(i64* %p1, i64* %p2, <2 x i64> %idx, <2 x i1> %cc) {
+define <2 x ptr> @test5(ptr %p1, ptr %p2, <2 x i64> %idx, <2 x i1> %cc) {
 ; CHECK-LABEL: @test5(
-; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr i64, i64* [[P1:%.*]], <2 x i64> [[IDX:%.*]]
-; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr i64, i64* [[P2:%.*]], <2 x i64> [[IDX]]
-; CHECK-NEXT:    [[SELECT:%.*]] = select <2 x i1> [[CC:%.*]], <2 x i64*> [[GEP1]], <2 x i64*> [[GEP2]]
-; CHECK-NEXT:    ret <2 x i64*> [[SELECT]]
+; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr i64, ptr [[P1:%.*]], <2 x i64> [[IDX:%.*]]
+; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr i64, ptr [[P2:%.*]], <2 x i64> [[IDX]]
+; CHECK-NEXT:    [[SELECT:%.*]] = select <2 x i1> [[CC:%.*]], <2 x ptr> [[GEP1]], <2 x ptr> [[GEP2]]
+; CHECK-NEXT:    ret <2 x ptr> [[SELECT]]
 ;
-  %gep1 = getelementptr i64, i64* %p1, <2 x i64> %idx
-  %gep2 = getelementptr i64, i64* %p2, <2 x i64> %idx
-  %select = select <2 x i1> %cc, <2 x i64*> %gep1, <2 x i64*> %gep2
-  ret <2 x i64*> %select
+  %gep1 = getelementptr i64, ptr %p1, <2 x i64> %idx
+  %gep2 = getelementptr i64, ptr %p2, <2 x i64> %idx
+  %select = select <2 x i1> %cc, <2 x ptr> %gep1, <2 x ptr> %gep2
+  ret <2 x ptr> %select
 }
 
 ; PR51069 - multiple uses
-define i32* @test6(i32* %p, i64 %x, i64 %y) {
+define ptr @test6(ptr %p, i64 %x, i64 %y) {
 ; CHECK-LABEL: @test6(
-; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds i32, i32* [[P:%.*]], i64 [[X:%.*]]
+; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 [[X:%.*]]
 ; CHECK-NEXT:    [[ICMP:%.*]] = icmp ugt i64 [[X]], [[Y:%.*]]
 ; CHECK-NEXT:    [[SEL_IDX:%.*]] = select i1 [[ICMP]], i64 [[Y]], i64 0
-; CHECK-NEXT:    [[SEL:%.*]] = getelementptr i32, i32* [[GEP1]], i64 [[SEL_IDX]]
-; CHECK-NEXT:    call void @use_i32p(i32* [[GEP1]])
-; CHECK-NEXT:    ret i32* [[SEL]]
+; CHECK-NEXT:    [[SEL:%.*]] = getelementptr i32, ptr [[GEP1]], i64 [[SEL_IDX]]
+; CHECK-NEXT:    call void @use_i32p(ptr [[GEP1]])
+; CHECK-NEXT:    ret ptr [[SEL]]
 ;
-  %gep1 = getelementptr inbounds i32, i32* %p, i64 %x
-  %gep2 = getelementptr inbounds i32, i32* %gep1, i64 %y
+  %gep1 = getelementptr inbounds i32, ptr %p, i64 %x
+  %gep2 = getelementptr inbounds i32, ptr %gep1, i64 %y
   %icmp = icmp ugt i64 %x, %y
-  %sel = select i1 %icmp, i32* %gep2, i32* %gep1
-  call void @use_i32p(i32* %gep1)
-  ret i32* %sel
+  %sel = select i1 %icmp, ptr %gep2, ptr %gep1
+  call void @use_i32p(ptr %gep1)
+  ret ptr %sel
 }
-declare void @use_i32p(i32*)
+declare void @use_i32p(ptr)
 
 ; We cannot create a select-with-idx with a vector condition but scalar idx.
 
-define <2 x i64*> @test7(<2 x i64*> %p1, i64 %idx, <2 x i1> %cc) {
+define <2 x ptr> @test7(<2 x ptr> %p1, i64 %idx, <2 x i1> %cc) {
 ; CHECK-LABEL: @test7(
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i64, <2 x i64*> [[P1:%.*]], i64 [[IDX]]
-; CHECK-NEXT:    [[SELECT:%.*]] = select <2 x i1> [[CC:%.*]], <2 x i64*> [[P1:%.*]], <2 x i64*> [[GEP]]
-; CHECK-NEXT:    ret <2 x i64*> [[SELECT]]
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i64, <2 x ptr> [[P1:%.*]], i64 [[IDX]]
+; CHECK-NEXT:    [[SELECT:%.*]] = select <2 x i1> [[CC:%.*]], <2 x ptr> [[P1:%.*]], <2 x ptr> [[GEP]]
+; CHECK-NEXT:    ret <2 x ptr> [[SELECT]]
 ;
-  %gep = getelementptr i64, <2 x i64*> %p1, i64 %idx
-  %select = select <2 x i1> %cc, <2 x i64*> %p1, <2 x i64*> %gep
-  ret <2 x i64*> %select
+  %gep = getelementptr i64, <2 x ptr> %p1, i64 %idx
+  %select = select <2 x i1> %cc, <2 x ptr> %p1, <2 x ptr> %gep
+  ret <2 x ptr> %select
 }
index a9a5d638065e18201d0393840ad866603dea9ea4..aba2c115e190e7b6f942941208c5b70413d4249d 100644 (file)
@@ -2,14 +2,14 @@
 
 declare void @test2()
 
-define i32 @test(i1 %cond, i32 *%P) {
+define i32 @test(i1 %cond, ptr %P) {
   %A = alloca i32
-  store i32 1, i32* %P
-  store i32 1, i32* %A
+  store i32 1, ptr %P
+  store i32 1, ptr %A
 
   call void @test2() readonly
 
-  %P2 = select i1 %cond, i32 *%P, i32* %A
-  %V = load i32, i32* %P2
+  %P2 = select i1 %cond, ptr %P, ptr %A
+  %V = load i32, ptr %P2
   ret i32 %V
 }
index 1fde6ec60d86b45d00700699625205883be2276f..10ee77e7b1ff7e7494eb175f71c18ca8fe5f35b6 100644 (file)
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
 ; Fold zeroing of inactive lanes into the load's passthrough parameter.
-define <4 x float> @masked_load_and_zero_inactive_1(<4 x float>* %ptr, <4 x i1> %mask) {
+define <4 x float> @masked_load_and_zero_inactive_1(ptr %ptr, <4 x i1> %mask) {
 ; CHECK-LABEL: @masked_load_and_zero_inactive_1(
-; CHECK: %load = call <4 x float> @llvm.masked.load.v4f32.p0v4f32(<4 x float>* %ptr, i32 4, <4 x i1> %mask, <4 x float> zeroinitializer)
+; CHECK: %load = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %ptr, i32 4, <4 x i1> %mask, <4 x float> zeroinitializer)
 ; CHECK-NEXT: ret <4 x float> %load
-  %load = call <4 x float> @llvm.masked.load.v4f32.p0v4f32(<4 x float>* %ptr, i32 4, <4 x i1> %mask, <4 x float> undef)
+  %load = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %ptr, i32 4, <4 x i1> %mask, <4 x float> undef)
   %masked = select <4 x i1> %mask, <4 x float> %load, <4 x float> zeroinitializer
   ret <4 x float> %masked
 }
 
 ; As above but reuse the load's existing passthrough.
-define <4 x i32> @masked_load_and_zero_inactive_2(<4 x i32>* %ptr, <4 x i1> %mask) {
+define <4 x i32> @masked_load_and_zero_inactive_2(ptr %ptr, <4 x i1> %mask) {
 ; CHECK-LABEL: @masked_load_and_zero_inactive_2(
-; CHECK: %load = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %ptr, i32 4, <4 x i1> %mask, <4 x i32> zeroinitializer)
+; CHECK: %load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %ptr, i32 4, <4 x i1> %mask, <4 x i32> zeroinitializer)
 ; CHECK-NEXT: ret <4 x i32> %load
-  %load = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %ptr, i32 4, <4 x i1> %mask, <4 x i32> zeroinitializer)
+  %load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %ptr, i32 4, <4 x i1> %mask, <4 x i32> zeroinitializer)
   %masked = select <4 x i1> %mask, <4 x i32> %load, <4 x i32> zeroinitializer
   ret <4 x i32> %masked
 }
 
 ; No transform when the load's passthrough cannot be reused or altered.
-define <4 x i32> @masked_load_and_zero_inactive_3(<4 x i32>* %ptr, <4 x i1> %mask, <4 x i32> %passthrough) {
+define <4 x i32> @masked_load_and_zero_inactive_3(ptr %ptr, <4 x i1> %mask, <4 x i32> %passthrough) {
 ; CHECK-LABEL: @masked_load_and_zero_inactive_3(
-; CHECK: %load = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %ptr, i32 4, <4 x i1> %mask, <4 x i32> %passthrough)
+; CHECK: %load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %ptr, i32 4, <4 x i1> %mask, <4 x i32> %passthrough)
 ; CHECK-NEXT: %masked = select <4 x i1> %mask, <4 x i32> %load, <4 x i32> zeroinitializer
 ; CHECK-NEXT: ret <4 x i32> %masked
-  %load = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %ptr, i32 4, <4 x i1> %mask, <4 x i32> %passthrough)
+  %load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %ptr, i32 4, <4 x i1> %mask, <4 x i32> %passthrough)
   %masked = select <4 x i1> %mask, <4 x i32> %load, <4 x i32> zeroinitializer
   ret <4 x i32> %masked
 }
 
 ; Remove redundant select when its mask doesn't overlap with the load mask.
-define <4 x i32> @masked_load_and_zero_inactive_4(<4 x i32>* %ptr, <4 x i1> %inv_mask) {
+define <4 x i32> @masked_load_and_zero_inactive_4(ptr %ptr, <4 x i1> %inv_mask) {
 ; CHECK-LABEL: @masked_load_and_zero_inactive_4(
 ; CHECK: %mask = xor <4 x i1> %inv_mask, <i1 true, i1 true, i1 true, i1 true>
-; CHECK-NEXT: %load = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %ptr, i32 4, <4 x i1> %mask, <4 x i32> zeroinitializer)
+; CHECK-NEXT: %load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %ptr, i32 4, <4 x i1> %mask, <4 x i32> zeroinitializer)
 ; CHECK-NEXT: ret <4 x i32> %load
   %mask = xor <4 x i1> %inv_mask, <i1 true, i1 true, i1 true, i1 true>
-  %load = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %ptr, i32 4, <4 x i1> %mask, <4 x i32> undef)
+  %load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %ptr, i32 4, <4 x i1> %mask, <4 x i32> undef)
   %masked = select <4 x i1> %inv_mask, <4 x i32> zeroinitializer, <4 x i32> %load
   ret <4 x i32> %masked
 }
 
 ; As above but reuse the load's existing passthrough.
-define <4 x i32> @masked_load_and_zero_inactive_5(<4 x i32>* %ptr, <4 x i1> %inv_mask) {
+define <4 x i32> @masked_load_and_zero_inactive_5(ptr %ptr, <4 x i1> %inv_mask) {
 ; CHECK-LABEL: @masked_load_and_zero_inactive_5(
 ; CHECK: %mask = xor <4 x i1> %inv_mask, <i1 true, i1 true, i1 true, i1 true>
-; CHECK-NEXT: %load = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %ptr, i32 4, <4 x i1> %mask, <4 x i32> zeroinitializer)
+; CHECK-NEXT: %load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %ptr, i32 4, <4 x i1> %mask, <4 x i32> zeroinitializer)
 ; CHECK-NEXT: ret <4 x i32> %load
   %mask = xor <4 x i1> %inv_mask, <i1 true, i1 true, i1 true, i1 true>
-  %load = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %ptr, i32 4, <4 x i1> %mask, <4 x i32> zeroinitializer)
+  %load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %ptr, i32 4, <4 x i1> %mask, <4 x i32> zeroinitializer)
   %masked = select <4 x i1> %inv_mask, <4 x i32> zeroinitializer, <4 x i32> %load
   ret <4 x i32> %masked
 }
 
 ; No transform when the load's passthrough cannot be reused or altered.
-define <4 x i32> @masked_load_and_zero_inactive_6(<4 x i32>* %ptr, <4 x i1> %inv_mask, <4 x i32> %passthrough) {
+define <4 x i32> @masked_load_and_zero_inactive_6(ptr %ptr, <4 x i1> %inv_mask, <4 x i32> %passthrough) {
 ; CHECK-LABEL: @masked_load_and_zero_inactive_6(
 ; CHECK: %mask = xor <4 x i1> %inv_mask, <i1 true, i1 true, i1 true, i1 true>
-; CHECK-NEXT: %load = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %ptr, i32 4, <4 x i1> %mask, <4 x i32> %passthrough)
+; CHECK-NEXT: %load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %ptr, i32 4, <4 x i1> %mask, <4 x i32> %passthrough)
 ; CHECK-NEXT: %masked = select <4 x i1> %inv_mask, <4 x i32> zeroinitializer, <4 x i32> %load
 ; CHECK-NEXT: ret <4 x i32> %masked
   %mask = xor <4 x i1> %inv_mask, <i1 true, i1 true, i1 true, i1 true>
-  %load = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %ptr, i32 4, <4 x i1> %mask, <4 x i32> %passthrough)
+  %load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %ptr, i32 4, <4 x i1> %mask, <4 x i32> %passthrough)
   %masked = select <4 x i1> %inv_mask, <4 x i32> zeroinitializer, <4 x i32> %load
   ret <4 x i32> %masked
 }
 
 ; No transform when select and load masks have no relation.
-define <4 x i32> @masked_load_and_zero_inactive_7(<4 x i32>* %ptr, <4 x i1> %mask1, <4 x i1> %mask2) {
+define <4 x i32> @masked_load_and_zero_inactive_7(ptr %ptr, <4 x i1> %mask1, <4 x i1> %mask2) {
 ; CHECK-LABEL: @masked_load_and_zero_inactive_7(
-; CHECK: %load = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %ptr, i32 4, <4 x i1> %mask1, <4 x i32> zeroinitializer)
+; CHECK: %load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %ptr, i32 4, <4 x i1> %mask1, <4 x i32> zeroinitializer)
 ; CHECK-NEXT: %masked = select <4 x i1> %mask2, <4 x i32> zeroinitializer, <4 x i32> %load
 ; CHECK-NEXT: ret <4 x i32> %masked
-  %load = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %ptr, i32 4, <4 x i1> %mask1, <4 x i32> zeroinitializer)
+  %load = call <4 x i32> @llvm.masked.load.v4i32.p0(ptr %ptr, i32 4, <4 x i1> %mask1, <4 x i32> zeroinitializer)
   %masked = select <4 x i1> %mask2, <4 x i32> zeroinitializer, <4 x i32> %load
   ret <4 x i32> %masked
 }
 
 ; A more complex case where we can prove the select mask is a subset of the
 ; load's inactive lanes and thus the load's passthrough takes effect.
-define <4 x float> @masked_load_and_zero_inactive_8(<4 x float>* %ptr, <4 x i1> %inv_mask, <4 x i1> %cond) {
+define <4 x float> @masked_load_and_zero_inactive_8(ptr %ptr, <4 x i1> %inv_mask, <4 x i1> %cond) {
 ; CHECK-LABEL: @masked_load_and_zero_inactive_8(
 ; CHECK: %mask = xor <4 x i1> %inv_mask, <i1 true, i1 true, i1 true, i1 true>
 ; CHECK-NEXT: %pg = and <4 x i1> %mask, %cond
-; CHECK-NEXT: %load = call <4 x float> @llvm.masked.load.v4f32.p0v4f32(<4 x float>* %ptr, i32 4, <4 x i1> %pg, <4 x float> zeroinitializer)
+; CHECK-NEXT: %load = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %ptr, i32 4, <4 x i1> %pg, <4 x float> zeroinitializer)
 ; CHECK-NEXT: ret <4 x float> %load
   %mask = xor <4 x i1> %inv_mask, <i1 true, i1 true, i1 true, i1 true>
   %pg = and <4 x i1> %mask, %cond
-  %load = call <4 x float> @llvm.masked.load.v4f32.p0v4f32(<4 x float>* %ptr, i32 4, <4 x i1> %pg, <4 x float> undef)
+  %load = call <4 x float> @llvm.masked.load.v4f32.p0(ptr %ptr, i32 4, <4 x i1> %pg, <4 x float> undef)
   %masked = select <4 x i1> %inv_mask, <4 x float> zeroinitializer, <4 x float> %load
   ret <4 x float> %masked
 }
 
-define <8 x float> @masked_load_and_scalar_select_cond(<8 x float>* %ptr, <8 x i1> %mask, i1 %cond) {
+define <8 x float> @masked_load_and_scalar_select_cond(ptr %ptr, <8 x i1> %mask, i1 %cond) {
 ; CHECK-LABEL: @masked_load_and_scalar_select_cond(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = call <8 x float> @llvm.masked.load.v8f32.p0v8f32(<8 x float>* [[PTR:%.*]], i32 32, <8 x i1> [[MASK:%.*]], <8 x float> undef)
+; CHECK-NEXT:    [[TMP0:%.*]] = call <8 x float> @llvm.masked.load.v8f32.p0(ptr [[PTR:%.*]], i32 32, <8 x i1> [[MASK:%.*]], <8 x float> undef)
 ; CHECK-NEXT:    [[TMP1:%.*]] = select i1 [[COND:%.*]], <8 x float> zeroinitializer, <8 x float> [[TMP0]]
 ; CHECK-NEXT:    ret <8 x float> [[TMP1]]
 entry:
-  %0 = call <8 x float> @llvm.masked.load.v8f32.p0v8f32(<8 x float>* %ptr, i32 32, <8 x i1> %mask, <8 x float> undef)
+  %0 = call <8 x float> @llvm.masked.load.v8f32.p0(ptr %ptr, i32 32, <8 x i1> %mask, <8 x float> undef)
   %1 = select i1 %cond, <8 x float> zeroinitializer, <8 x float> %0
   ret <8 x float> %1
 }
 
-declare <8 x float> @llvm.masked.load.v8f32.p0v8f32(<8 x float>*, i32 immarg, <8 x i1>, <8 x float>)
-declare <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>*, i32 immarg, <4 x i1>, <4 x i32>)
-declare <4 x float> @llvm.masked.load.v4f32.p0v4f32(<4 x float>*, i32 immarg, <4 x i1>, <4 x float>)
+declare <8 x float> @llvm.masked.load.v8f32.p0(ptr, i32 immarg, <8 x i1>, <8 x float>)
+declare <4 x i32> @llvm.masked.load.v4i32.p0(ptr, i32 immarg, <4 x i1>, <4 x i32>)
+declare <4 x float> @llvm.masked.load.v4f32.p0(ptr, i32 immarg, <4 x i1>, <4 x float>)
index 6682e1750d314c96a0576c1ae5d299c14b520a8d..72344dc917b4da2e661f6340f09e15c326ca13f0 100644 (file)
@@ -30,32 +30,32 @@ define <2 x i8> @smax_smax_common_op_01(<2 x i1> %cond, <2 x i8> %x, <2 x i8> %y
   ret <2 x i8> %sel
 }
 
-define i5 @umin_umin_common_op_10(i1 %cond, i5 %x, i5 %y, i5 %z, i5* %p) {
+define i5 @umin_umin_common_op_10(i1 %cond, i5 %x, i5 %y, i5 %z, ptr %p) {
 ; CHECK-LABEL: @umin_umin_common_op_10(
 ; CHECK-NEXT:    [[M1:%.*]] = call i5 @llvm.umin.i5(i5 [[X:%.*]], i5 [[Z:%.*]])
-; CHECK-NEXT:    store i5 [[M1]], i5* [[P:%.*]], align 1
+; CHECK-NEXT:    store i5 [[M1]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[MINMAXOP:%.*]] = select i1 [[COND:%.*]], i5 [[X]], i5 [[Y:%.*]]
 ; CHECK-NEXT:    [[SEL:%.*]] = call i5 @llvm.umin.i5(i5 [[MINMAXOP]], i5 [[Z]])
 ; CHECK-NEXT:    ret i5 [[SEL]]
 ;
   %m1 = call i5 @llvm.umin.i5(i5 %x, i5 %z)
-  store i5 %m1, i5* %p
+  store i5 %m1, ptr %p
   %m2 = call i5 @llvm.umin.i5(i5 %z, i5 %y)
   %sel = select i1 %cond, i5 %m1, i5 %m2
   ret i5 %sel
 }
 
-define <3 x i5> @umax_umax_common_op_11(i1 %cond, <3 x i5> %x, <3 x i5> %y, <3 x i5> %z, <3 x i5>* %p) {
+define <3 x i5> @umax_umax_common_op_11(i1 %cond, <3 x i5> %x, <3 x i5> %y, <3 x i5> %z, ptr %p) {
 ; CHECK-LABEL: @umax_umax_common_op_11(
 ; CHECK-NEXT:    [[M2:%.*]] = call <3 x i5> @llvm.umax.v3i5(<3 x i5> [[Y:%.*]], <3 x i5> [[Z:%.*]])
-; CHECK-NEXT:    store <3 x i5> [[M2]], <3 x i5>* [[P:%.*]], align 2
+; CHECK-NEXT:    store <3 x i5> [[M2]], ptr [[P:%.*]], align 2
 ; CHECK-NEXT:    [[MINMAXOP:%.*]] = select i1 [[COND:%.*]], <3 x i5> [[X:%.*]], <3 x i5> [[Y]]
 ; CHECK-NEXT:    [[SEL:%.*]] = call <3 x i5> @llvm.umax.v3i5(<3 x i5> [[MINMAXOP]], <3 x i5> [[Z]])
 ; CHECK-NEXT:    ret <3 x i5> [[SEL]]
 ;
   %m1 = call <3 x i5> @llvm.umax.v3i5(<3 x i5> %x, <3 x i5> %z)
   %m2 = call <3 x i5> @llvm.umax.v3i5(<3 x i5> %y, <3 x i5> %z)
-  store <3 x i5> %m2, <3 x i5>* %p
+  store <3 x i5> %m2, ptr %p
   %sel = select i1 %cond, <3 x i5> %m1, <3 x i5> %m2
   ret <3 x i5> %sel
 }
@@ -92,19 +92,19 @@ define i5 @smin_smin_no_common_op(i1 %cond, i5 %x, i5 %y, i5 %z, i5 %w) {
 
 ; negative test - too many uses
 
-define i5 @umin_umin_common_op_10_uses(i1 %cond, i5 %x, i5 %y, i5 %z, i5* %p1, i5* %p2) {
+define i5 @umin_umin_common_op_10_uses(i1 %cond, i5 %x, i5 %y, i5 %z, ptr %p1, ptr %p2) {
 ; CHECK-LABEL: @umin_umin_common_op_10_uses(
 ; CHECK-NEXT:    [[M1:%.*]] = call i5 @llvm.umin.i5(i5 [[X:%.*]], i5 [[Z:%.*]])
-; CHECK-NEXT:    store i5 [[M1]], i5* [[P1:%.*]], align 1
+; CHECK-NEXT:    store i5 [[M1]], ptr [[P1:%.*]], align 1
 ; CHECK-NEXT:    [[M2:%.*]] = call i5 @llvm.umin.i5(i5 [[Z]], i5 [[Y:%.*]])
-; CHECK-NEXT:    store i5 [[M2]], i5* [[P2:%.*]], align 1
+; CHECK-NEXT:    store i5 [[M2]], ptr [[P2:%.*]], align 1
 ; CHECK-NEXT:    [[SEL:%.*]] = select i1 [[COND:%.*]], i5 [[M1]], i5 [[M2]]
 ; CHECK-NEXT:    ret i5 [[SEL]]
 ;
   %m1 = call i5 @llvm.umin.i5(i5 %x, i5 %z)
-  store i5 %m1, i5* %p1
+  store i5 %m1, ptr %p1
   %m2 = call i5 @llvm.umin.i5(i5 %z, i5 %y)
-  store i5 %m2, i5* %p2
+  store i5 %m2, ptr %p2
   %sel = select i1 %cond, i5 %m1, i5 %m2
   ret i5 %sel
 }
index f8c5bb88bb4e304ad242b3a2e4aa246841abbef7..4b01d34de7f38837e4f67a52617a760117c6c2e9 100644 (file)
@@ -83,11 +83,11 @@ define <2 x i1> @xor_and2(<2 x i1> %c, <2 x i32> %X, <2 x i32> %Y) {
 define <2 x i1> @xor_and3(<2 x i1> %c, <2 x i32> %X, <2 x i32> %Y) {
 ; CHECK-LABEL: @xor_and3(
 ; CHECK-NEXT:    [[COMP:%.*]] = icmp uge <2 x i32> [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    [[SEL:%.*]] = select <2 x i1> [[C:%.*]], <2 x i1> [[COMP]], <2 x i1> <i1 icmp ne (i8* inttoptr (i64 1234 to i8*), i8* @glb), i1 true>
+; CHECK-NEXT:    [[SEL:%.*]] = select <2 x i1> [[C:%.*]], <2 x i1> [[COMP]], <2 x i1> <i1 icmp ne (ptr inttoptr (i64 1234 to ptr), ptr @glb), i1 true>
 ; CHECK-NEXT:    ret <2 x i1> [[SEL]]
 ;
   %comp = icmp ult <2 x i32> %X, %Y
-  %sel = select <2 x i1> %c, <2 x i1> %comp, <2 x i1> <i1 icmp eq (i8* @glb, i8* inttoptr (i64 1234 to i8*)), i1 false>
+  %sel = select <2 x i1> %c, <2 x i1> %comp, <2 x i1> <i1 icmp eq (ptr @glb, ptr inttoptr (i64 1234 to ptr)), i1 false>
   %res = xor <2 x i1> %sel, <i1 true, i1 true>
   ret <2 x i1> %res
 }
@@ -120,11 +120,11 @@ define <2 x i1> @xor_or2(<2 x i1> %c, <2 x i32> %X, <2 x i32> %Y) {
 define <2 x i1> @xor_or3(<2 x i1> %c, <2 x i32> %X, <2 x i32> %Y) {
 ; CHECK-LABEL: @xor_or3(
 ; CHECK-NEXT:    [[COMP:%.*]] = icmp uge <2 x i32> [[X:%.*]], [[Y:%.*]]
-; CHECK-NEXT:    [[SEL:%.*]] = select <2 x i1> [[C:%.*]], <2 x i1> <i1 icmp ne (i8* inttoptr (i64 1234 to i8*), i8* @glb), i1 true>, <2 x i1> [[COMP]]
+; CHECK-NEXT:    [[SEL:%.*]] = select <2 x i1> [[C:%.*]], <2 x i1> <i1 icmp ne (ptr inttoptr (i64 1234 to ptr), ptr @glb), i1 true>, <2 x i1> [[COMP]]
 ; CHECK-NEXT:    ret <2 x i1> [[SEL]]
 ;
   %comp = icmp ult <2 x i32> %X, %Y
-  %sel = select <2 x i1> %c, <2 x i1> <i1 icmp eq (i8* @glb, i8* inttoptr (i64 1234 to i8*)), i1 false>, <2 x i1> %comp
+  %sel = select <2 x i1> %c, <2 x i1> <i1 icmp eq (ptr @glb, ptr inttoptr (i64 1234 to ptr)), i1 false>, <2 x i1> %comp
   %res = xor <2 x i1> %sel, <i1 true, i1 true>
   ret <2 x i1> %res
 }
index 515a358e0c490c75c70eaa3968e2abbd9287b66f..2b6dc9d059a1c2790d6351cb47ce1d124b649a0e 100644 (file)
@@ -28,15 +28,13 @@ define i8 @shrink_select(i1 %cond, i32 %x) {
   ret i8 %trunc
 }
 
-define void @min_max_bitcast(<4 x float> %a, <4 x float> %b, <4 x i32>* %ptr1, <4 x i32>* %ptr2) {
+define void @min_max_bitcast(<4 x float> %a, <4 x float> %b, ptr %ptr1, ptr %ptr2) {
 ; CHECK-LABEL: @min_max_bitcast(
 ; CHECK-NEXT:    [[CMP:%.*]] = fcmp olt <4 x float> [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[SEL1_V:%.*]] = select <4 x i1> [[CMP]], <4 x float> [[A]], <4 x float> [[B]], !prof [[PROF0]]
 ; CHECK-NEXT:    [[SEL2_V:%.*]] = select <4 x i1> [[CMP]], <4 x float> [[B]], <4 x float> [[A]], !prof [[PROF0]]
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i32>* [[PTR1:%.*]] to <4 x float>*
-; CHECK-NEXT:    store <4 x float> [[SEL1_V]], <4 x float>* [[TMP1]], align 16
-; CHECK-NEXT:    [[TMP2:%.*]] = bitcast <4 x i32>* [[PTR2:%.*]] to <4 x float>*
-; CHECK-NEXT:    store <4 x float> [[SEL2_V]], <4 x float>* [[TMP2]], align 16
+; CHECK-NEXT:    store <4 x float> [[SEL1_V]], ptr [[PTR1:%.*]], align 16
+; CHECK-NEXT:    store <4 x float> [[SEL2_V]], ptr [[PTR2:%.*]], align 16
 ; CHECK-NEXT:    ret void
 ;
   %cmp = fcmp olt <4 x float> %a, %b
@@ -44,8 +42,8 @@ define void @min_max_bitcast(<4 x float> %a, <4 x float> %b, <4 x i32>* %ptr1, <
   %bc2 = bitcast <4 x float> %b to <4 x i32>
   %sel1 = select <4 x i1> %cmp, <4 x i32> %bc1, <4 x i32> %bc2, !prof !1
   %sel2 = select <4 x i1> %cmp, <4 x i32> %bc2, <4 x i32> %bc1, !prof !1
-  store <4 x i32> %sel1, <4 x i32>* %ptr1
-  store <4 x i32> %sel2, <4 x i32>* %ptr2
+  store <4 x i32> %sel1, ptr %ptr1
+  store <4 x i32> %sel2, ptr %ptr2
   ret void
 }
 
index a54f7a5590ca04857df6d6030e1fe4d8a351e636..40f158c6054fca7280067d4348852e22dce58866 100644 (file)
@@ -12,7 +12,7 @@ define i1 @test1(i32 %A) {
 ;
   %B = icmp eq i32 %A, %A
   ; Never true
-  %C = icmp eq i32* @X, null
+  %C = icmp eq ptr @X, null
   %D = and i1 %B, %C
   ret i1 %D
 }
@@ -23,7 +23,7 @@ define i1 @test1_logical(i32 %A) {
 ;
   %B = icmp eq i32 %A, %A
   ; Never true
-  %C = icmp eq i32* @X, null
+  %C = icmp eq ptr @X, null
   %D = select i1 %B, i1 %C, i1 false
   ret i1 %D
 }
@@ -34,7 +34,7 @@ define i1 @test2(i32 %A) {
 ;
   %B = icmp ne i32 %A, %A
   ; Never false
-  %C = icmp ne i32* @X, null
+  %C = icmp ne ptr @X, null
   %D = or i1 %B, %C
   ret i1 %D
 }
@@ -45,7 +45,7 @@ define i1 @test2_logical(i32 %A) {
 ;
   %B = icmp ne i32 %A, %A
   ; Never false
-  %C = icmp ne i32* @X, null
+  %C = icmp ne ptr @X, null
   %D = select i1 %B, i1 true, i1 %C
   ret i1 %D
 }
index e6d220d8f9b7fd33cf66b969a3b55f2da8c5738f..6dbb93e3c6b7a68050cdd209a1ea4489c445dcc6 100644 (file)
@@ -90,7 +90,7 @@ define i64 @test7(i32 %x) {
   ret i64 %s
 }
 
-define i32 @test8(i8 %a, i32 %f, i1 %p, i32* %z) {
+define i32 @test8(i8 %a, i32 %f, i1 %p, ptr %z) {
 ; CHECK-LABEL: @test8(
 ; CHECK-NEXT:    [[D:%.*]] = lshr i32 [[F:%.*]], 24
 ; CHECK-NEXT:    [[N:%.*]] = select i1 [[P:%.*]], i32 [[D]], i32 0
@@ -204,17 +204,17 @@ define <2 x i32> @test10_vec_undef2(<2 x i32> %i) {
   ret <2 x i32> %D
 }
 
-define void @test11(<2 x i16> %srcA, <2 x i16> %srcB, <2 x i16>* %dst) {
+define void @test11(<2 x i16> %srcA, <2 x i16> %srcB, ptr %dst) {
 ; CHECK-LABEL: @test11(
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp eq <2 x i16> [[SRCB:%.*]], [[SRCA:%.*]]
 ; CHECK-NEXT:    [[SEXT:%.*]] = sext <2 x i1> [[CMP]] to <2 x i16>
-; CHECK-NEXT:    store <2 x i16> [[SEXT]], <2 x i16>* [[DST:%.*]], align 4
+; CHECK-NEXT:    store <2 x i16> [[SEXT]], ptr [[DST:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
   %cmp = icmp eq <2 x i16> %srcB, %srcA
   %sext = sext <2 x i1> %cmp to <2 x i16>
   %tmask = ashr <2 x i16> %sext, <i16 15, i16 15>
-  store <2 x i16> %tmask, <2 x i16>* %dst
+  store <2 x i16> %tmask, ptr %dst
   ret void
 }
 
index 90ea75e0a9b815da66e790c24d2a18a13c33c125..97c5470be350cc9605b82ec37d7b8f7d340b18b5 100644 (file)
@@ -147,14 +147,14 @@ define <2 x i12> @lshr_add_nuw(<2 x i12> %x) {
 
 ; extra use is ok and in this case the result can be simplified to a constant
 
-define i32 @ashr_add_nuw(i32 %x, i32* %p) {
+define i32 @ashr_add_nuw(i32 %x, ptr %p) {
 ; CHECK-LABEL: @ashr_add_nuw(
 ; CHECK-NEXT:    [[A:%.*]] = add nuw i32 [[X:%.*]], 5
-; CHECK-NEXT:    store i32 [[A]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[A]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i32 -1
 ;
   %a = add nuw i32 %x, 5
-  store i32 %a, i32* %p
+  store i32 %a, ptr %p
   %r = ashr i32 -6, %a
   ret i32 %r
 }
@@ -366,15 +366,15 @@ define i32 @shl_nsw_add_negative(i32 %x) {
 ; vectors and extra uses are allowed
 ; nuw propagates to the new shift
 
-define <2 x i8> @shl_nuw_add_negative_splat_uses(<2 x i8> %x, <2 x i8>* %p) {
+define <2 x i8> @shl_nuw_add_negative_splat_uses(<2 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @shl_nuw_add_negative_splat_uses(
 ; CHECK-NEXT:    [[A:%.*]] = add <2 x i8> [[X:%.*]], <i8 -2, i8 -2>
-; CHECK-NEXT:    store <2 x i8> [[A]], <2 x i8>* [[P:%.*]], align 2
+; CHECK-NEXT:    store <2 x i8> [[A]], ptr [[P:%.*]], align 2
 ; CHECK-NEXT:    [[R:%.*]] = shl nuw <2 x i8> <i8 3, i8 3>, [[X]]
 ; CHECK-NEXT:    ret <2 x i8> [[R]]
 ;
   %a = add <2 x i8> %x, <i8 -2, i8 -2>
-  store <2 x i8> %a, <2 x i8>* %p
+  store <2 x i8> %a, ptr %p
   %r = shl nuw <2 x i8> <i8 12, i8 12>, %a
   ret <2 x i8> %r
 }
index 125b888248f34c4eb4a59738711adb532762fa70..2bb741052e53ee5b885798f3ce76fc4a5985ca1a 100644 (file)
@@ -673,16 +673,16 @@ define <2 x i1> @n38_overshift(<2 x i32> %x, <2 x i32> %y) {
 define i1 @constantexpr() {
 ; CHECK-LABEL: @constantexpr(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = load i16, i16* @f.a, align 2
+; CHECK-NEXT:    [[TMP0:%.*]] = load i16, ptr @f.a, align 2
 ; CHECK-NEXT:    [[TMP1:%.*]] = lshr i16 [[TMP0]], 1
-; CHECK-NEXT:    [[TMP2:%.*]] = and i16 [[TMP1]], shl (i16 1, i16 zext (i1 icmp ne (i16 ptrtoint (i16* @f.a to i16), i16 1) to i16))
+; CHECK-NEXT:    [[TMP2:%.*]] = and i16 [[TMP1]], shl (i16 1, i16 zext (i1 icmp ne (i16 ptrtoint (ptr @f.a to i16), i16 1) to i16))
 ; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp ne i16 [[TMP2]], 0
 ; CHECK-NEXT:    ret i1 [[TOBOOL]]
 ;
 entry:
-  %0 = load i16, i16* @f.a
+  %0 = load i16, ptr @f.a
   %shr = ashr i16 %0, 1
-  %shr1 = ashr i16 %shr, zext (i1 icmp ne (i16 ptrtoint (i16* @f.a to i16), i16 1) to i16)
+  %shr1 = ashr i16 %shr, zext (i1 icmp ne (i16 ptrtoint (ptr @f.a to i16), i16 1) to i16)
   %and = and i16 %shr1, 1
   %tobool = icmp ne i16 %and, 0
   ret i1 %tobool
index d2d07687899ebb980661d64512728d2741ac83fa..dd70169c7f17fbc62a8c8bab08f471010b226200 100644 (file)
@@ -202,14 +202,14 @@ define i16 @n11(i32 %x, i16 %y) {
 @Y16 = global i16 42
 define i16 @t01(i32 %x) {
 ; CHECK-LABEL: @t01(
-; CHECK-NEXT:    [[T0:%.*]] = shl i32 [[X:%.*]], ptrtoint (i32* @Y32 to i32)
+; CHECK-NEXT:    [[T0:%.*]] = shl i32 [[X:%.*]], ptrtoint (ptr @Y32 to i32)
 ; CHECK-NEXT:    [[T1:%.*]] = trunc i32 [[T0]] to i16
-; CHECK-NEXT:    [[T2:%.*]] = shl i16 [[T1]], ptrtoint (i16* @Y16 to i16)
+; CHECK-NEXT:    [[T2:%.*]] = shl i16 [[T1]], ptrtoint (ptr @Y16 to i16)
 ; CHECK-NEXT:    ret i16 [[T2]]
 ;
-  %t0 = shl i32 %x, ptrtoint (i32* @Y32 to i32)
+  %t0 = shl i32 %x, ptrtoint (ptr @Y32 to i32)
   %t1 = trunc i32 %t0 to i16
-  %t2 = shl i16 %t1, ptrtoint (i16* @Y16 to i16)
+  %t2 = shl i16 %t1, ptrtoint (ptr @Y16 to i16)
   ret i16 %t2
 }
 
index d26c127f4be71e61c5c1001c8ebacf7dec5b13cc..b96bcd6bab4f1416cb6ba548a074cd2cec83caf1 100644 (file)
@@ -161,8 +161,8 @@ define i64 @constantexpr() {
 ; CHECK-NEXT:    ret i64 0
 ;
   %A = alloca i64
-  %L = load i64, i64* %A
-  %V = add i64 ptrtoint (i32* @X to i64), 0
+  %L = load i64, ptr %A
+  %V = add i64 ptrtoint (ptr @X to i64), 0
   %B2 = shl i64 %V, 0
   %B4 = ashr i64 %B2, %L
   %B = and i64 undef, %B4
index 93c04fc37e1c9387c9e5c36cb8564f015e62be26..76514ab1e2031f0babb6f55459fb3f8de62ea2e6 100644 (file)
@@ -225,17 +225,17 @@ define <2 x i32> @ashr_undef_undef_xor(<2 x i32> %x, <2 x i32> %y) {
   ret <2 x i32> %sh1
 }
 
-define i32 @lshr_or_extra_use(i32 %x, i32 %y, i32* %p) {
+define i32 @lshr_or_extra_use(i32 %x, i32 %y, ptr %p) {
 ; CHECK-LABEL: @lshr_or_extra_use(
 ; CHECK-NEXT:    [[SH0:%.*]] = lshr i32 [[X:%.*]], 5
 ; CHECK-NEXT:    [[R:%.*]] = or i32 [[SH0]], [[Y:%.*]]
-; CHECK-NEXT:    store i32 [[R]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[R]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[SH1:%.*]] = lshr i32 [[R]], 7
 ; CHECK-NEXT:    ret i32 [[SH1]]
 ;
   %sh0 = lshr i32 %x, 5
   %r = or i32 %sh0, %y
-  store i32 %r, i32* %p
+  store i32 %r, ptr %p
   %sh1 = lshr i32 %r, 7
   ret i32 %sh1
 }
@@ -247,12 +247,12 @@ define i32 @lshr_or_extra_use(i32 %x, i32 %y, i32* %p) {
 define i32 @PR44028(i32 %x) {
 ; CHECK-LABEL: @PR44028(
 ; CHECK-NEXT:    [[SH1:%.*]] = ashr exact i32 [[X:%.*]], 16
-; CHECK-NEXT:    [[T0:%.*]] = xor i32 [[SH1]], shl (i32 ptrtoint (i32* @g to i32), i32 16)
+; CHECK-NEXT:    [[T0:%.*]] = xor i32 [[SH1]], shl (i32 ptrtoint (ptr @g to i32), i32 16)
 ; CHECK-NEXT:    [[T27:%.*]] = ashr exact i32 [[T0]], 16
 ; CHECK-NEXT:    ret i32 [[T27]]
 ;
   %sh1 = ashr exact i32 %x, 16
-  %t0 = xor i32 %sh1, shl (i32 ptrtoint (i32* @g to i32), i32 16)
+  %t0 = xor i32 %sh1, shl (i32 ptrtoint (ptr @g to i32), i32 16)
   %t27 = ashr exact i32 %t0, 16
   ret i32 %t27
 }
index 1803a7f7b13566bbb3b6227f5942136afa2d31b3..4dc287d3979bba0140344247b4fc51698f78425d 100644 (file)
@@ -47,13 +47,13 @@ loop:
 ; Converting the 2 shifts to SHL 6 without the AND is wrong.
 ; https://llvm.org/bugs/show_bug.cgi?id=8547
 
-define i32 @pr8547(i32* %g) {
+define i32 @pr8547(ptr %g) {
 ; CHECK-LABEL: @pr8547(
 ; CHECK-NEXT:  codeRepl:
 ; CHECK-NEXT:    br label [[FOR_COND:%.*]]
 ; CHECK:       for.cond:
 ; CHECK-NEXT:    [[STOREMERGE:%.*]] = phi i32 [ 0, [[CODEREPL:%.*]] ], [ 5, [[FOR_COND]] ]
-; CHECK-NEXT:    store i32 [[STOREMERGE]], i32* [[G:%.*]], align 4
+; CHECK-NEXT:    store i32 [[STOREMERGE]], ptr [[G:%.*]], align 4
 ; CHECK-NEXT:    [[TMP0:%.*]] = shl nuw nsw i32 [[STOREMERGE]], 6
 ; CHECK-NEXT:    [[CONV2:%.*]] = and i32 [[TMP0]], 64
 ; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq i32 [[CONV2]], 0
@@ -66,7 +66,7 @@ codeRepl:
 
 for.cond:
   %storemerge = phi i32 [ 0, %codeRepl ], [ 5, %for.cond ]
-  store i32 %storemerge, i32* %g, align 4
+  store i32 %storemerge, ptr %g, align 4
   %shl = shl i32 %storemerge, 30
   %conv2 = lshr i32 %shl, 24
   %tobool = icmp eq i32 %conv2, 0
index 3a0cd27ceaf982dcaf6d6235cc4522cb87103aba..737a9c592d1e65d906b6b41459ecaf96f705658b 100644 (file)
@@ -1641,14 +1641,14 @@ define i32 @ashr_select_xor_false(i32 %x, i1 %cond) {
 
 ; OSS Fuzz #4871
 ; https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=4871
-define i177 @lshr_out_of_range(i177 %Y, i177** %A2, i177*** %ptr) {
+define i177 @lshr_out_of_range(i177 %Y, ptr %A2, ptr %ptr) {
 ; CHECK-LABEL: @lshr_out_of_range(
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne i177 [[Y:%.*]], -1
 ; CHECK-NEXT:    [[B4:%.*]] = sext i1 [[TMP1]] to i177
 ; CHECK-NEXT:    [[C8:%.*]] = icmp ult i177 [[B4]], [[Y]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = sext i1 [[C8]] to i64
-; CHECK-NEXT:    [[G18:%.*]] = getelementptr i177*, i177** [[A2:%.*]], i64 [[TMP2]]
-; CHECK-NEXT:    store i177** [[G18]], i177*** [[PTR:%.*]], align 8
+; CHECK-NEXT:    [[G18:%.*]] = getelementptr ptr, ptr [[A2:%.*]], i64 [[TMP2]]
+; CHECK-NEXT:    store ptr [[G18]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    ret i177 0
 ;
   %B5 = udiv i177 %Y, -1
@@ -1659,15 +1659,15 @@ define i177 @lshr_out_of_range(i177 %Y, i177** %A2, i177*** %ptr) {
   %B10 = sub i177 %B5, %B3
   %B12 = lshr i177 %Y, %B6
   %C8 = icmp ugt i177 %B12, %B4
-  %G18 = getelementptr i177*, i177** %A2, i1 %C8
-  store i177** %G18, i177*** %ptr
+  %G18 = getelementptr ptr, ptr %A2, i1 %C8
+  store ptr %G18, ptr %ptr
   %B1 = udiv i177 %B10, %B6
   ret i177 %B1
 }
 
 ; OSS Fuzz #26716
 ; https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=26716
-define i177 @lshr_out_of_range2(i177 %Y, i177** %A2, i177*** %ptr) {
+define i177 @lshr_out_of_range2(i177 %Y, ptr %A2, ptr %ptr) {
 ; CHECK-LABEL: @lshr_out_of_range2(
 ; CHECK-NEXT:    ret i177 0
 ;
@@ -1678,84 +1678,84 @@ define i177 @lshr_out_of_range2(i177 %Y, i177** %A2, i177*** %ptr) {
   %B6 = mul i177 %B5, %B2
   %B12 = lshr i177 %Y, %B6
   %C8 = icmp ugt i177 %B12, %B4
-  %G18 = getelementptr i177*, i177** %A2, i1 %C8
-  store i177** %G18, i177*** %ptr, align 8
+  %G18 = getelementptr ptr, ptr %A2, i1 %C8
+  store ptr %G18, ptr %ptr, align 8
   %B1 = udiv i177 %B5, %B6
   ret i177 %B1
 }
 
 ; OSS Fuzz #5032
 ; https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5032
-define void @ashr_out_of_range(i177* %A) {
+define void @ashr_out_of_range(ptr %A) {
 ; CHECK-LABEL: @ashr_out_of_range(
-; CHECK-NEXT:    [[L:%.*]] = load i177, i177* [[A:%.*]], align 4
+; CHECK-NEXT:    [[L:%.*]] = load i177, ptr [[A:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i177 [[L]], -1
 ; CHECK-NEXT:    [[TMP2:%.*]] = select i1 [[TMP1]], i64 -1, i64 -2
-; CHECK-NEXT:    [[G11:%.*]] = getelementptr i177, i177* [[A]], i64 [[TMP2]]
-; CHECK-NEXT:    [[L7:%.*]] = load i177, i177* [[G11]], align 4
+; CHECK-NEXT:    [[G11:%.*]] = getelementptr i177, ptr [[A]], i64 [[TMP2]]
+; CHECK-NEXT:    [[L7:%.*]] = load i177, ptr [[G11]], align 4
 ; CHECK-NEXT:    [[C171:%.*]] = icmp slt i177 [[L7]], 0
 ; CHECK-NEXT:    [[C17:%.*]] = select i1 [[TMP1]], i1 [[C171]], i1 false
 ; CHECK-NEXT:    [[TMP3:%.*]] = sext i1 [[C17]] to i64
-; CHECK-NEXT:    [[G62:%.*]] = getelementptr i177, i177* [[G11]], i64 [[TMP3]]
+; CHECK-NEXT:    [[G62:%.*]] = getelementptr i177, ptr [[G11]], i64 [[TMP3]]
 ; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq i177 [[L7]], -1
 ; CHECK-NEXT:    [[B28:%.*]] = select i1 [[TMP4]], i177 0, i177 [[L7]]
-; CHECK-NEXT:    store i177 [[B28]], i177* [[G62]], align 4
+; CHECK-NEXT:    store i177 [[B28]], ptr [[G62]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %L = load i177, i177* %A
+  %L = load i177, ptr %A
   %B5 = udiv i177 %L, -1
   %B4 = add i177 %B5, -1
   %B2 = add i177 %B4, -1
-  %G11 = getelementptr i177, i177* %A, i177 %B2
-  %L7 = load i177, i177* %G11
+  %G11 = getelementptr i177, ptr %A, i177 %B2
+  %L7 = load i177, ptr %G11
   %B6 = mul i177 %B5, %B2
   %B24 = ashr i177 %L7, %B6
   %B36 = and i177 %L7, %B4
   %C17 = icmp sgt i177 %B36, %B24
-  %G62 = getelementptr i177, i177* %G11, i1 %C17
+  %G62 = getelementptr i177, ptr %G11, i1 %C17
   %B28 = urem i177 %B24, %B6
-  store i177 %B28, i177* %G62
+  store i177 %B28, ptr %G62
   ret void
 }
 
 ; OSS Fuzz #26135
 ; https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=26135
-define void @ashr_out_of_range_1(i177* %A) {
+define void @ashr_out_of_range_1(ptr %A) {
 ; CHECK-LABEL: @ashr_out_of_range_1(
-; CHECK-NEXT:    [[L:%.*]] = load i177, i177* [[A:%.*]], align 4
-; CHECK-NEXT:    [[G11:%.*]] = getelementptr i177, i177* [[A]], i64 -1
+; CHECK-NEXT:    [[L:%.*]] = load i177, ptr [[A:%.*]], align 4
+; CHECK-NEXT:    [[G11:%.*]] = getelementptr i177, ptr [[A]], i64 -1
 ; CHECK-NEXT:    [[B24_LOBIT:%.*]] = ashr i177 [[L]], 175
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i177 [[B24_LOBIT]] to i64
-; CHECK-NEXT:    [[G62:%.*]] = getelementptr i177, i177* [[G11]], i64 [[TMP1]]
-; CHECK-NEXT:    store i177 0, i177* [[G62]], align 4
+; CHECK-NEXT:    [[G62:%.*]] = getelementptr i177, ptr [[G11]], i64 [[TMP1]]
+; CHECK-NEXT:    store i177 0, ptr [[G62]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %L = load i177, i177* %A, align 4
+  %L = load i177, ptr %A, align 4
   %B5 = udiv i177 %L, -1
   %B4 = add i177 %B5, -1
   %B = and i177 %B4, %L
   %B2 = add i177 %B, -1
-  %G11 = getelementptr i177, i177* %A, i177 %B2
+  %G11 = getelementptr i177, ptr %A, i177 %B2
   %B6 = mul i177 %B5, %B2
   %B24 = ashr i177 %L, %B6
   %C17 = icmp sgt i177 %B, %B24
-  %G62 = getelementptr i177, i177* %G11, i1 %C17
+  %G62 = getelementptr i177, ptr %G11, i1 %C17
   %B28 = urem i177 %B24, %B6
-  store i177 %B28, i177* %G62, align 4
+  store i177 %B28, ptr %G62, align 4
   ret void
 }
 
 ; OSS Fuzz #38078
 ; https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=38078
-define void @ossfuzz_38078(i32 %arg, i32 %arg1, i32* %ptr, i1* %ptr2, i32* %ptr3, i1* %ptr4, i32* %ptr5, i32* %ptr6, i1* %ptr7) {
+define void @ossfuzz_38078(i32 %arg, i32 %arg1, ptr %ptr, ptr %ptr2, ptr %ptr3, ptr %ptr4, ptr %ptr5, ptr %ptr6, ptr %ptr7) {
 ; CHECK-LABEL: @ossfuzz_38078(
 ; CHECK-NEXT:  bb:
 ; CHECK-NEXT:    [[I2:%.*]] = add nsw i32 [[ARG:%.*]], [[ARG1:%.*]]
 ; CHECK-NEXT:    [[B3:%.*]] = or i32 [[I2]], 2147483647
-; CHECK-NEXT:    [[G1:%.*]] = getelementptr i32, i32* [[PTR:%.*]], i64 -1
+; CHECK-NEXT:    [[G1:%.*]] = getelementptr i32, ptr [[PTR:%.*]], i64 -1
 ; CHECK-NEXT:    [[I5:%.*]] = icmp eq i32 [[I2]], 0
 ; CHECK-NEXT:    call void @llvm.assume(i1 [[I5]])
-; CHECK-NEXT:    store volatile i32 [[B3]], i32* [[G1]], align 4
+; CHECK-NEXT:    store volatile i32 [[B3]], ptr [[G1]], align 4
 ; CHECK-NEXT:    br label [[BB:%.*]]
 ; CHECK:       BB:
 ; CHECK-NEXT:    unreachable
@@ -1784,7 +1784,7 @@ bb:
   %C2 = icmp sge i1 %C1, false
   %C7 = icmp sle i32 %i3, %B16
   %B20 = xor i32 %B21, %B22
-  %G1 = getelementptr i32, i32* %ptr, i32 %B22
+  %G1 = getelementptr i32, ptr %ptr, i32 %B22
   %B1 = sub i32 %B, 0
   %B26 = ashr i32 %B29, 0
   %B4 = add i32 0, %B5
@@ -1792,19 +1792,19 @@ bb:
   %i5 = icmp eq i32 %B20, %B18
   %C11 = icmp ugt i32 %i4, %B4
   call void @llvm.assume(i1 %i5)
-  store volatile i32 %B4, i32* %G1, align 4
+  store volatile i32 %B4, ptr %G1, align 4
   %B11 = or i32 0, %B23
   br label %BB
 
 BB:
-  store i1 %C7, i1* %ptr2, align 1
-  store i32 %B11, i32* %ptr3, align 4
-  store i1 %C11, i1* %ptr4, align 1
-  store i32 %B1, i32* %ptr5, align 4
-  store i32 %B27, i32* %ptr6, align 4
+  store i1 %C7, ptr %ptr2, align 1
+  store i32 %B11, ptr %ptr3, align 4
+  store i1 %C11, ptr %ptr4, align 1
+  store i32 %B1, ptr %ptr5, align 4
+  store i32 %B27, ptr %ptr6, align 4
   %C = icmp ne i32 %B26, 0
   %B17 = or i1 %C, %C2
-  store i1 %B17, i1* %ptr7, align 1
+  store i1 %B17, ptr %ptr7, align 1
   unreachable
 }
 declare void @llvm.assume(i1 noundef)
index f5430f6ad005a665bdfb88f1bf5942e7d4a1033d..d8e7fe2e2a2c163e3d2252a3039fe19d242ab55a 100644 (file)
@@ -123,56 +123,56 @@ define <4 x i1> @vec_shl_and_negC_eq_undef3(<4 x i32> %x, <4 x i32> %y) {
 ; Extra use
 
 ; Fold happened
-define i1 @scalar_shl_and_negC_eq_extra_use_shl(i32 %x, i32 %y, i32 %z, i32* %p) {
+define i1 @scalar_shl_and_negC_eq_extra_use_shl(i32 %x, i32 %y, i32 %z, ptr %p) {
 ; CHECK-LABEL: @scalar_shl_and_negC_eq_extra_use_shl(
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i32 [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[XOR:%.*]] = xor i32 [[SHL]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[XOR]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[XOR]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp ult i32 [[SHL]], 8
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %shl = shl i32 %x, %y
   %xor = xor i32 %shl, %z  ; extra use of shl
-  store i32 %xor, i32* %p
+  store i32 %xor, ptr %p
   %and = and i32 %shl, 4294967288  ; ~7
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
 
 ; Not fold
-define i1 @scalar_shl_and_negC_eq_extra_use_and(i32 %x, i32 %y, i32 %z, i32* %p) {
+define i1 @scalar_shl_and_negC_eq_extra_use_and(i32 %x, i32 %y, i32 %z, ptr %p) {
 ; CHECK-LABEL: @scalar_shl_and_negC_eq_extra_use_and(
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i32 [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[SHL]], -8
 ; CHECK-NEXT:    [[MUL:%.*]] = mul i32 [[AND]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[MUL]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[MUL]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[AND]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %shl = shl i32 %x, %y
   %and = and i32 %shl, 4294967288  ; ~7
   %mul = mul i32 %and, %z  ; extra use of and
-  store i32 %mul, i32* %p
+  store i32 %mul, ptr %p
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
 
 ; Not fold
-define i1 @scalar_shl_and_negC_eq_extra_use_shl_and(i32 %x, i32 %y, i32 %z, i32* %p, i32* %q) {
+define i1 @scalar_shl_and_negC_eq_extra_use_shl_and(i32 %x, i32 %y, i32 %z, ptr %p, ptr %q) {
 ; CHECK-LABEL: @scalar_shl_and_negC_eq_extra_use_shl_and(
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i32 [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[SHL]], -8
-; CHECK-NEXT:    store i32 [[AND]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[AND]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[SHL]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[ADD]], i32* [[Q:%.*]], align 4
+; CHECK-NEXT:    store i32 [[ADD]], ptr [[Q:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[AND]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %shl = shl i32 %x, %y
   %and = and i32 %shl, 4294967288  ; ~7
-  store i32 %and, i32* %p  ; extra use of and
+  store i32 %and, ptr %p  ; extra use of and
   %add = add i32 %shl, %z  ; extra use of shl
-  store i32 %add, i32* %q
+  store i32 %add, ptr %q
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
index a31e07b756efc8724fcbcd2a225929a04711ff3c..a4549a7c0a32e379ee37c1f2a2f2226f9f3601f4 100644 (file)
@@ -123,56 +123,56 @@ define <4 x i1> @vec_4xi32_shl_and_signbit_eq_undef3(<4 x i32> %x, <4 x i32> %y)
 ; Extra use
 
 ; Fold happened
-define i1 @scalar_shl_and_signbit_eq_extra_use_shl(i32 %x, i32 %y, i32 %z, i32* %p) {
+define i1 @scalar_shl_and_signbit_eq_extra_use_shl(i32 %x, i32 %y, i32 %z, ptr %p) {
 ; CHECK-LABEL: @scalar_shl_and_signbit_eq_extra_use_shl(
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i32 [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[XOR:%.*]] = xor i32 [[SHL]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[XOR]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[XOR]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp sgt i32 [[SHL]], -1
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %shl = shl i32 %x, %y
   %xor = xor i32 %shl, %z  ; extra use of shl
-  store i32 %xor, i32* %p
+  store i32 %xor, ptr %p
   %and = and i32 %shl, 2147483648
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
 
 ; Not fold
-define i1 @scalar_shl_and_signbit_eq_extra_use_and(i32 %x, i32 %y, i32 %z, i32* %p) {
+define i1 @scalar_shl_and_signbit_eq_extra_use_and(i32 %x, i32 %y, i32 %z, ptr %p) {
 ; CHECK-LABEL: @scalar_shl_and_signbit_eq_extra_use_and(
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i32 [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[SHL]], -2147483648
 ; CHECK-NEXT:    [[MUL:%.*]] = mul i32 [[AND]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[MUL]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[MUL]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[AND]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %shl = shl i32 %x, %y
   %and = and i32 %shl, 2147483648
   %mul = mul i32 %and, %z  ; extra use of and
-  store i32 %mul, i32* %p
+  store i32 %mul, ptr %p
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
 
 ; Not fold
-define i1 @scalar_shl_and_signbit_eq_extra_use_shl_and(i32 %x, i32 %y, i32 %z, i32* %p, i32* %q) {
+define i1 @scalar_shl_and_signbit_eq_extra_use_shl_and(i32 %x, i32 %y, i32 %z, ptr %p, ptr %q) {
 ; CHECK-LABEL: @scalar_shl_and_signbit_eq_extra_use_shl_and(
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i32 [[X:%.*]], [[Y:%.*]]
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[SHL]], -2147483648
-; CHECK-NEXT:    store i32 [[AND]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[AND]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[SHL]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[ADD]], i32* [[Q:%.*]], align 4
+; CHECK-NEXT:    store i32 [[ADD]], ptr [[Q:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[AND]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %shl = shl i32 %x, %y
   %and = and i32 %shl, 2147483648
-  store i32 %and, i32* %p  ; extra use of and
+  store i32 %and, ptr %p  ; extra use of and
   %add = add i32 %shl, %z  ; extra use of shl
-  store i32 %add, i32* %q
+  store i32 %add, ptr %q
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
index 103e9d111aa7fe17011374139dd640d80f39fda9..25b26770c366dbd670ff868eb9256c5c6c8cb16d 100644 (file)
@@ -197,15 +197,15 @@ define <4 x i1> @vector_4xi32_shl_ugt_const(<4 x i32> %x) {
 ; Extra use
 
 ; Not simplified
-define i1 @scalar_i8_shl_ult_const_extra_use_shl(i8 %x, i8* %p) {
+define i1 @scalar_i8_shl_ult_const_extra_use_shl(i8 %x, ptr %p) {
 ; CHECK-LABEL: @scalar_i8_shl_ult_const_extra_use_shl(
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i8 [[X:%.*]], 5
-; CHECK-NEXT:    store i8 [[SHL]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[SHL]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[SHL]], 64
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
   %shl = shl i8 %x, 5
-  store i8 %shl, i8* %p
+  store i8 %shl, ptr %p
   %cmp = icmp ult i8 %shl, 64
   ret i1 %cmp
 }
index 0d44beb766dce99c6a72bdd68a42d33831698099..3ff269ef9d279664a39ec6d15decc5c6e7a3d11d 100644 (file)
@@ -3,21 +3,21 @@
 
 declare void @use(<4 x i16>)
 
-define void @test(<16 x i8> %w, i32* %o1, float* %o2) {
+define void @test(<16 x i8> %w, ptr %o1, ptr %o2) {
 ; CHECK-LABEL: @test(
 ; CHECK-NEXT:    [[V_BC:%.*]] = bitcast <16 x i8> [[W:%.*]] to <4 x i32>
 ; CHECK-NEXT:    [[V_EXTRACT:%.*]] = extractelement <4 x i32> [[V_BC]], i64 3
 ; CHECK-NEXT:    [[V_BC1:%.*]] = bitcast <16 x i8> [[W]] to <4 x float>
 ; CHECK-NEXT:    [[V_EXTRACT2:%.*]] = extractelement <4 x float> [[V_BC1]], i64 3
-; CHECK-NEXT:    store i32 [[V_EXTRACT]], i32* [[O1:%.*]], align 4
-; CHECK-NEXT:    store float [[V_EXTRACT2]], float* [[O2:%.*]], align 4
+; CHECK-NEXT:    store i32 [[V_EXTRACT]], ptr [[O1:%.*]], align 4
+; CHECK-NEXT:    store float [[V_EXTRACT2]], ptr [[O2:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
   %v = shufflevector <16 x i8> %w, <16 x i8> poison, <4 x i32> <i32 12, i32 13, i32 14, i32 15>
   %f = bitcast <4 x i8> %v to float
   %i = bitcast <4 x i8> %v to i32
-  store i32 %i, i32* %o1, align 4
-  store float %f, float* %o2, align 4
+  store i32 %i, ptr %o1, align 4
+  store float %f, ptr %o2, align 4
   ret void
 }
 
index dbc4395426d2890e78ac8edcfeb2e405f4a95356..65120bc505efd80c795d1fa2f2367478d80c8749 100644 (file)
@@ -3,21 +3,21 @@
 
 declare void @use(<4 x i16>)
 
-define void @test(<16 x i8> %w, i32* %o1, float* %o2) {
+define void @test(<16 x i8> %w, ptr %o1, ptr %o2) {
 ; CHECK-LABEL: @test(
 ; CHECK-NEXT:    [[V_BC:%.*]] = bitcast <16 x i8> [[W:%.*]] to <4 x i32>
 ; CHECK-NEXT:    [[V_EXTRACT:%.*]] = extractelement <4 x i32> [[V_BC]], i64 3
 ; CHECK-NEXT:    [[V_BC1:%.*]] = bitcast <16 x i8> [[W]] to <4 x float>
 ; CHECK-NEXT:    [[V_EXTRACT2:%.*]] = extractelement <4 x float> [[V_BC1]], i64 3
-; CHECK-NEXT:    store i32 [[V_EXTRACT]], i32* [[O1:%.*]], align 4
-; CHECK-NEXT:    store float [[V_EXTRACT2]], float* [[O2:%.*]], align 4
+; CHECK-NEXT:    store i32 [[V_EXTRACT]], ptr [[O1:%.*]], align 4
+; CHECK-NEXT:    store float [[V_EXTRACT2]], ptr [[O2:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
   %v = shufflevector <16 x i8> %w, <16 x i8> undef, <4 x i32> <i32 12, i32 13, i32 14, i32 15>
   %f = bitcast <4 x i8> %v to float
   %i = bitcast <4 x i8> %v to i32
-  store i32 %i, i32* %o1, align 4
-  store float %f, float* %o2, align 4
+  store i32 %i, ptr %o1, align 4
+  store float %f, ptr %o2, align 4
   ret void
 }
 
@@ -179,31 +179,30 @@ define <2 x i4> @shuf_bitcast_insert(<2 x i8> %v, i8 %x) {
   ret <2 x i4> %r
 }
 
-define <2 x i4> @shuf_bitcast_inserti_use1(<2 x i8> %v, i8 %x, <2 x i8>* %p) {
+define <2 x i4> @shuf_bitcast_inserti_use1(<2 x i8> %v, i8 %x, ptr %p) {
 ; CHECK-LABEL: @shuf_bitcast_inserti_use1(
 ; CHECK-NEXT:    [[I:%.*]] = insertelement <2 x i8> [[V:%.*]], i8 [[X:%.*]], i64 0
-; CHECK-NEXT:    store <2 x i8> [[I]], <2 x i8>* [[P:%.*]], align 2
+; CHECK-NEXT:    store <2 x i8> [[I]], ptr [[P:%.*]], align 2
 ; CHECK-NEXT:    [[R:%.*]] = bitcast i8 [[X]] to <2 x i4>
 ; CHECK-NEXT:    ret <2 x i4> [[R]]
 ;
   %i = insertelement <2 x i8> %v, i8 %x, i32 0
-  store <2 x i8> %i, <2 x i8>* %p
+  store <2 x i8> %i, ptr %p
   %b = bitcast <2 x i8> %i to <4 x i4>
   %r = shufflevector <4 x i4> %b, <4 x i4> undef, <2 x i32> <i32 0, i32 1>
   ret <2 x i4> %r
 }
 
-define <2 x i4> @shuf_bitcast_insert_use2(<2 x i8> %v, i8 %x, <4 x i4>* %p) {
+define <2 x i4> @shuf_bitcast_insert_use2(<2 x i8> %v, i8 %x, ptr %p) {
 ; CHECK-LABEL: @shuf_bitcast_insert_use2(
 ; CHECK-NEXT:    [[I:%.*]] = insertelement <2 x i8> [[V:%.*]], i8 [[X:%.*]], i64 0
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast <4 x i4>* [[P:%.*]] to <2 x i8>*
-; CHECK-NEXT:    store <2 x i8> [[I]], <2 x i8>* [[TMP1]], align 2
+; CHECK-NEXT:    store <2 x i8> [[I]], ptr [[P:%.*]], align 2
 ; CHECK-NEXT:    [[R:%.*]] = bitcast i8 [[X]] to <2 x i4>
 ; CHECK-NEXT:    ret <2 x i4> [[R]]
 ;
   %i = insertelement <2 x i8> %v, i8 %x, i32 0
   %b = bitcast <2 x i8> %i to <4 x i4>
-  store <4 x i4> %b, <4 x i4>* %p
+  store <4 x i4> %b, ptr %p
   %r = shufflevector <4 x i4> %b, <4 x i4> undef, <2 x i32> <i32 0, i32 1>
   ret <2 x i4> %r
 }
index 9809fecbe673aedf7fff3e0bc24d80072a3f9c68..4775dd80338ab4cf0906fc10e4e29eb1699462e9 100644 (file)
@@ -128,57 +128,57 @@ define <4 x i1> @vec_4xi32_signbit_lshr_and_eq_undef3(<4 x i32> %x, <4 x i32> %y
 ; Extra use
 
 ; Fold happened
-define i1 @scalar_i32_signbit_lshr_and_eq_extra_use_lshr(i32 %x, i32 %y, i32 %z, i32* %p) {
+define i1 @scalar_i32_signbit_lshr_and_eq_extra_use_lshr(i32 %x, i32 %y, i32 %z, ptr %p) {
 ; CHECK-LABEL: @scalar_i32_signbit_lshr_and_eq_extra_use_lshr(
 ; CHECK-NEXT:    [[LSHR:%.*]] = lshr i32 -2147483648, [[Y:%.*]]
 ; CHECK-NEXT:    [[XOR:%.*]] = xor i32 [[LSHR]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[XOR]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[XOR]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[LSHR]], [[X:%.*]]
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[AND]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %lshr = lshr i32 2147483648, %y
   %xor = xor i32 %lshr, %z  ; extra use of lshr
-  store i32 %xor, i32* %p
+  store i32 %xor, ptr %p
   %and = and i32 %lshr, %x
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
 
 ; Not fold
-define i1 @scalar_i32_signbit_lshr_and_eq_extra_use_and(i32 %x, i32 %y, i32 %z, i32* %p) {
+define i1 @scalar_i32_signbit_lshr_and_eq_extra_use_and(i32 %x, i32 %y, i32 %z, ptr %p) {
 ; CHECK-LABEL: @scalar_i32_signbit_lshr_and_eq_extra_use_and(
 ; CHECK-NEXT:    [[LSHR:%.*]] = lshr i32 -2147483648, [[Y:%.*]]
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[LSHR]], [[X:%.*]]
 ; CHECK-NEXT:    [[MUL:%.*]] = mul i32 [[AND]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[MUL]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[MUL]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[AND]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %lshr = lshr i32 2147483648, %y
   %and = and i32 %lshr, %x
   %mul = mul i32 %and, %z  ; extra use of and
-  store i32 %mul, i32* %p
+  store i32 %mul, ptr %p
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
 
 ; Not fold
-define i1 @scalar_i32_signbit_lshr_and_eq_extra_use_lshr_and(i32 %x, i32 %y, i32 %z, i32* %p, i32* %q) {
+define i1 @scalar_i32_signbit_lshr_and_eq_extra_use_lshr_and(i32 %x, i32 %y, i32 %z, ptr %p, ptr %q) {
 ; CHECK-LABEL: @scalar_i32_signbit_lshr_and_eq_extra_use_lshr_and(
 ; CHECK-NEXT:    [[LSHR:%.*]] = lshr i32 -2147483648, [[Y:%.*]]
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[LSHR]], [[X:%.*]]
-; CHECK-NEXT:    store i32 [[AND]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[AND]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[LSHR]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[ADD]], i32* [[Q:%.*]], align 4
+; CHECK-NEXT:    store i32 [[ADD]], ptr [[Q:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[AND]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %lshr = lshr i32 2147483648, %y
   %and = and i32 %lshr, %x
-  store i32 %and, i32* %p  ; extra use of and
+  store i32 %and, ptr %p  ; extra use of and
   %add = add i32 %lshr, %z  ; extra use of lshr
-  store i32 %add, i32* %q
+  store i32 %add, ptr %q
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
index 90f03c6a41cbc4ecaab7be45e0a23ce9ee04f4ff..c97731777283d1c2dfb1513f55d52bb4631c9f07 100644 (file)
@@ -128,57 +128,57 @@ define <4 x i1> @vec_4xi32_signbit_shl_and_eq_undef3(<4 x i32> %x, <4 x i32> %y)
 ; Extra use
 
 ; Fold happened
-define i1 @scalar_i32_signbit_shl_and_eq_extra_use_shl(i32 %x, i32 %y, i32 %z, i32* %p) {
+define i1 @scalar_i32_signbit_shl_and_eq_extra_use_shl(i32 %x, i32 %y, i32 %z, ptr %p) {
 ; CHECK-LABEL: @scalar_i32_signbit_shl_and_eq_extra_use_shl(
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i32 -2147483648, [[Y:%.*]]
 ; CHECK-NEXT:    [[XOR:%.*]] = xor i32 [[SHL]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[XOR]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[XOR]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[SHL]], [[X:%.*]]
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[AND]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %shl = shl i32 2147483648, %y
   %xor = xor i32 %shl, %z  ; extra use of shl
-  store i32 %xor, i32* %p
+  store i32 %xor, ptr %p
   %and = and i32 %shl, %x
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
 
 ; Not fold
-define i1 @scalar_i32_signbit_shl_and_eq_extra_use_and(i32 %x, i32 %y, i32 %z, i32* %p) {
+define i1 @scalar_i32_signbit_shl_and_eq_extra_use_and(i32 %x, i32 %y, i32 %z, ptr %p) {
 ; CHECK-LABEL: @scalar_i32_signbit_shl_and_eq_extra_use_and(
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i32 -2147483648, [[Y:%.*]]
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[SHL]], [[X:%.*]]
 ; CHECK-NEXT:    [[MUL:%.*]] = mul i32 [[AND]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[MUL]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[MUL]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[AND]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %shl = shl i32 2147483648, %y
   %and = and i32 %shl, %x
   %mul = mul i32 %and, %z  ; extra use of and
-  store i32 %mul, i32* %p
+  store i32 %mul, ptr %p
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
 
 ; Not fold
-define i1 @scalar_i32_signbit_shl_and_eq_extra_use_shl_and(i32 %x, i32 %y, i32 %z, i32* %p, i32* %q) {
+define i1 @scalar_i32_signbit_shl_and_eq_extra_use_shl_and(i32 %x, i32 %y, i32 %z, ptr %p, ptr %q) {
 ; CHECK-LABEL: @scalar_i32_signbit_shl_and_eq_extra_use_shl_and(
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i32 -2147483648, [[Y:%.*]]
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[SHL]], [[X:%.*]]
-; CHECK-NEXT:    store i32 [[AND]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[AND]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[SHL]], [[Z:%.*]]
-; CHECK-NEXT:    store i32 [[ADD]], i32* [[Q:%.*]], align 4
+; CHECK-NEXT:    store i32 [[ADD]], ptr [[Q:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[AND]], 0
 ; CHECK-NEXT:    ret i1 [[R]]
 ;
   %shl = shl i32 2147483648, %y
   %and = and i32 %shl, %x
-  store i32 %and, i32* %p  ; extra use of and
+  store i32 %and, ptr %p  ; extra use of and
   %add = add i32 %shl, %z  ; extra use of shl
-  store i32 %add, i32* %q
+  store i32 %add, ptr %q
   %r = icmp eq i32 %and, 0
   ret i1 %r
 }
index fee05e901df085bc43aa7af0fd91f852bf8a58c0..69f50738af62101e75414168bdac5825193b1a26 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
 ; Fold
-;   ((%x * %y) s/ %x) == %y
+;   ((ptr %y) s/ %x) == %y
 ; to
 ;   @llvm.smul.with.overflow(%x, %y) + extractvalue + not
 
index 3d3f535f3655e4ff41005134d818e96f00937f1c..a5f88bdfebe4d2f1e9780a9e8bbe2710705bc4e9 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
 ; Fold
-;   ((%x * %y) s/ %x) != %y
+;   ((ptr %y) s/ %x) != %y
 ; to
 ;   @llvm.smul.with.overflow(%x, %y) + extractvalue
 
index 6e8cc6c0c2020baf24f4570c68a7581fbef98925..5e2f563e2cbb03231dba6583e72f75f11a6806a2 100644 (file)
@@ -4,18 +4,18 @@
 
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
 target triple = "x86_64-unknown-linux-gnu"
-       %struct.VEC_rtx_base = type { i32, i32, [1 x %struct.rtx_def*] }
+       %struct.VEC_rtx_base = type { i32, i32, [1 x ptr] }
        %struct.VEC_rtx_gc = type { %struct.VEC_rtx_base }
-       %struct.block_symbol = type { [3 x %struct.rtunion], %struct.object_block*, i64 }
-       %struct.object_block = type { %struct.section*, i32, i64, %struct.VEC_rtx_gc*, %struct.VEC_rtx_gc* }
+       %struct.block_symbol = type { [3 x %struct.rtunion], ptr, i64 }
+       %struct.object_block = type { ptr, i32, i64, ptr, ptr }
        %struct.omp_clause_subcode = type { i32 }
-       %struct.rtunion = type { i8* }
+       %struct.rtunion = type { ptr }
        %struct.rtx_def = type { i16, i8, i8, %struct.u }
        %struct.section = type { %struct.unnamed_section }
        %struct.u = type { %struct.block_symbol }
-       %struct.unnamed_section = type { %struct.omp_clause_subcode, void (i8*)*, i8*, %struct.section* }
+       %struct.unnamed_section = type { %struct.omp_clause_subcode, ptr, ptr, ptr }
 
-define fastcc void @cse_insn(%struct.rtx_def* %insn, %struct.rtx_def* %libcall_insn, i16* %ptr, i1 %c1, i1 %c2, i1 %c3, i1 %c4, i1 %c5, i1 %c6, i1 %c7, i1 %c8, i1 %c9) nounwind {
+define fastcc void @cse_insn(ptr %insn, ptr %libcall_insn, ptr %ptr, i1 %c1, i1 %c2, i1 %c3, i1 %c4, i1 %c5, i1 %c6, i1 %c7, i1 %c8, i1 %c9) nounwind {
 entry:
        br i1 %c1, label %bb43, label %bb88
 
@@ -29,9 +29,9 @@ bb95:         ; preds = %bb88
        unreachable
 
 bb107:         ; preds = %bb88
-       %0 = load i16, i16* %ptr, align 8               ; <i16> [#uses=1]
+       %0 = load i16, ptr %ptr, align 8                ; <i16> [#uses=1]
        %1 = icmp eq i16 %0, 38         ; <i1> [#uses=1]
-       %src_eqv_here.0 = select i1 %1, %struct.rtx_def* null, %struct.rtx_def* null            ; <%struct.rtx_def*> [#uses=1]
+       %src_eqv_here.0 = select i1 %1, ptr null, ptr null              ; <ptr> [#uses=1]
        br i1 %c3, label %bb127, label %bb125
 
 bb125:         ; preds = %bb107
@@ -56,9 +56,9 @@ bb146:                ; preds = %bb133
        br i1 %c7, label %bb180, label %bb186
 
 bb180:         ; preds = %bb146
-       %2 = icmp eq %struct.rtx_def* null, null                ; <i1> [#uses=1]
+       %2 = icmp eq ptr null, null             ; <i1> [#uses=1]
        %3 = zext i1 %2 to i8           ; <i8> [#uses=1]
-       %4 = icmp ne %struct.rtx_def* %src_eqv_here.0, null             ; <i1> [#uses=1]
+       %4 = icmp ne ptr %src_eqv_here.0, null          ; <i1> [#uses=1]
        %5 = zext i1 %4 to i8           ; <i8> [#uses=1]
        %toBool181 = icmp ne i8 %3, 0           ; <i1> [#uses=1]
        %toBool182 = icmp ne i8 %5, 0           ; <i1> [#uses=1]
index f864b8f60c1faa46e21915b2b12ec32f5f8a3b1f..334a1840a24edfa3b355190fd7f71a8cc0b0c5ba 100644 (file)
@@ -13,7 +13,7 @@ define double @pow_exp(double %x, double %y) {
   %call = call fast double @exp(double %x) #1
   %pow = call fast double @llvm.pow.f64(double %call, double %y)
   %C1 = fcmp ule double %call, %pow
-  store i1 %C1, i1* %A
+  store i1 %C1, ptr %A
   ret double %pow
 }
 
index b1dc76980229903378298bc6a7f5defa0e8a5e6f..8bbd972ef6e0fad1e8e73d5e2a087825925b68ce 100644 (file)
@@ -8,9 +8,9 @@ target triple = "i386-unknown-linux-gnu"
 
 declare ptr @foo()
 declare i32 @memcmp(ptr inreg nocapture noundef, ptr inreg nocapture noundef, i32 inreg noundef)
-declare i32 @printf(i8*, ...)
+declare i32 @printf(ptr, ...)
 declare double @exp2(double)
-declare i32 @__sprintf_chk(i8*, i32, i32, i8*, ...)
+declare i32 @__sprintf_chk(ptr, i32, i32, ptr, ...)
 @a = common global [60 x i8] zeroinitializer, align 1
 @b = common global [60 x i8] zeroinitializer, align 1
 @h = constant [2 x i8] c"h\00"
@@ -30,8 +30,7 @@ define i32 @baz(ptr inreg noundef %s2, i32 inreg noundef %n){
 ; CHECK-NOT: declare noundef i32 @putchar(i32 noundef)
 
 define void @test_fewer_params_than_num_register_parameters() {
-  %fmt = getelementptr [2 x i8], [2 x i8]* @h, i32 0, i32 0
-  call i32 (i8*, ...) @printf(i8* %fmt)
+  call i32 (ptr, ...) @printf(ptr @h)
   ret void
 }
 
@@ -47,9 +46,7 @@ define double @test_non_int_params(i16 signext %x) {
 ; CHECK:     declare noundef i32 @sprintf(ptr noalias nocapture noundef writeonly, ptr nocapture noundef readonly, ...)
 ; CHECK-NOT: declare noundef i32 @sprintf(ptr inreg noalias nocapture noundef writeonly, ptr inreg nocapture noundef readonly, ...)
 define i32 @test_variadic() {
-  %dst = getelementptr inbounds [60 x i8], [60 x i8]* @a, i32 0, i32 0
-  %fmt = getelementptr inbounds [60 x i8], [60 x i8]* @b, i32 0, i32 0
-  %ret = call i32 (i8*, i32, i32, i8*, ...) @__sprintf_chk(i8* %dst, i32 0, i32 -1, i8* %fmt)
+  %ret = call i32 (ptr, i32, i32, ptr, ...) @__sprintf_chk(ptr @a, i32 0, i32 -1, ptr @b)
   ret i32 %ret
 }
 
index f22e2876d5714e197268096236eee45ab27fe6a6..6bca9dc9bfc63bfcde3eedc3dd8c6d5d07035777 100644 (file)
@@ -20,7 +20,7 @@ declare double @__cospi(double %x) #0
 
 define float @test_instbased_f32() {
 ; CHECK-FLOAT-IN-VEC-LABEL: @test_instbased_f32(
-; CHECK-FLOAT-IN-VEC-NEXT:    [[VAL:%.*]] = load float, float* @var32, align 4
+; CHECK-FLOAT-IN-VEC-NEXT:    [[VAL:%.*]] = load float, ptr @var32, align 4
 ; CHECK-FLOAT-IN-VEC-NEXT:    [[SINCOSPI:%.*]] = call <2 x float> @__sincospif_stret(float [[VAL]])
 ; CHECK-FLOAT-IN-VEC-NEXT:    [[SINPI:%.*]] = extractelement <2 x float> [[SINCOSPI]], i64 0
 ; CHECK-FLOAT-IN-VEC-NEXT:    [[COSPI:%.*]] = extractelement <2 x float> [[SINCOSPI]], i64 1
@@ -30,7 +30,7 @@ define float @test_instbased_f32() {
 ; CHECK-FLOAT-IN-VEC-NEXT:    ret float [[RES]]
 ;
 ; CHECK-LABEL: @test_instbased_f32(
-; CHECK-NEXT:    [[VAL:%.*]] = load float, float* @var32, align 4
+; CHECK-NEXT:    [[VAL:%.*]] = load float, ptr @var32, align 4
 ; CHECK-NEXT:    [[SINCOSPI:%.*]] = call { float, float } @__sincospif_stret(float [[VAL]])
 ; CHECK-NEXT:    [[SINPI:%.*]] = extractvalue { float, float } [[SINCOSPI]], 0
 ; CHECK-NEXT:    [[COSPI:%.*]] = extractvalue { float, float } [[SINCOSPI]], 1
@@ -40,13 +40,13 @@ define float @test_instbased_f32() {
 ; CHECK-NEXT:    ret float [[RES]]
 ;
 ; CHECK-NO-SINCOS-LABEL: @test_instbased_f32(
-; CHECK-NO-SINCOS-NEXT:    [[VAL:%.*]] = load float, float* @var32, align 4
+; CHECK-NO-SINCOS-NEXT:    [[VAL:%.*]] = load float, ptr @var32, align 4
 ; CHECK-NO-SINCOS-NEXT:    [[SIN:%.*]] = call float @__sinpif(float [[VAL]]) #[[ATTR0:[0-9]+]]
 ; CHECK-NO-SINCOS-NEXT:    [[COS:%.*]] = call float @__cospif(float [[VAL]]) #[[ATTR0]]
 ; CHECK-NO-SINCOS-NEXT:    [[RES:%.*]] = fadd float [[SIN]], [[COS]]
 ; CHECK-NO-SINCOS-NEXT:    ret float [[RES]]
 ;
-  %val = load float, float* @var32
+  %val = load float, ptr @var32
   %sin = call float @__sinpif(float %val) #0
   %cos = call float @__cospif(float %val) #0
   %res = fadd float %sin, %cos
@@ -90,7 +90,7 @@ define float @test_constant_f32() {
 
 define double @test_instbased_f64() {
 ; CHECK-FLOAT-IN-VEC-LABEL: @test_instbased_f64(
-; CHECK-FLOAT-IN-VEC-NEXT:    [[VAL:%.*]] = load double, double* @var64, align 8
+; CHECK-FLOAT-IN-VEC-NEXT:    [[VAL:%.*]] = load double, ptr @var64, align 8
 ; CHECK-FLOAT-IN-VEC-NEXT:    [[SINCOSPI:%.*]] = call { double, double } @__sincospi_stret(double [[VAL]])
 ; CHECK-FLOAT-IN-VEC-NEXT:    [[SINPI:%.*]] = extractvalue { double, double } [[SINCOSPI]], 0
 ; CHECK-FLOAT-IN-VEC-NEXT:    [[COSPI:%.*]] = extractvalue { double, double } [[SINCOSPI]], 1
@@ -100,7 +100,7 @@ define double @test_instbased_f64() {
 ; CHECK-FLOAT-IN-VEC-NEXT:    ret double [[RES]]
 ;
 ; CHECK-LABEL: @test_instbased_f64(
-; CHECK-NEXT:    [[VAL:%.*]] = load double, double* @var64, align 8
+; CHECK-NEXT:    [[VAL:%.*]] = load double, ptr @var64, align 8
 ; CHECK-NEXT:    [[SINCOSPI:%.*]] = call { double, double } @__sincospi_stret(double [[VAL]])
 ; CHECK-NEXT:    [[SINPI:%.*]] = extractvalue { double, double } [[SINCOSPI]], 0
 ; CHECK-NEXT:    [[COSPI:%.*]] = extractvalue { double, double } [[SINCOSPI]], 1
@@ -110,13 +110,13 @@ define double @test_instbased_f64() {
 ; CHECK-NEXT:    ret double [[RES]]
 ;
 ; CHECK-NO-SINCOS-LABEL: @test_instbased_f64(
-; CHECK-NO-SINCOS-NEXT:    [[VAL:%.*]] = load double, double* @var64, align 8
+; CHECK-NO-SINCOS-NEXT:    [[VAL:%.*]] = load double, ptr @var64, align 8
 ; CHECK-NO-SINCOS-NEXT:    [[SIN:%.*]] = call double @__sinpi(double [[VAL]]) #[[ATTR0]]
 ; CHECK-NO-SINCOS-NEXT:    [[COS:%.*]] = call double @__cospi(double [[VAL]]) #[[ATTR0]]
 ; CHECK-NO-SINCOS-NEXT:    [[RES:%.*]] = fadd double [[SIN]], [[COS]]
 ; CHECK-NO-SINCOS-NEXT:    ret double [[RES]]
 ;
-  %val = load double, double* @var64
+  %val = load double, ptr @var64
   %sin = call double @__sinpi(double %val) #0
   %cos = call double @__cospi(double %val) #0
   %res = fadd double %sin, %cos
@@ -158,7 +158,7 @@ define double @test_constant_f64() {
 
 }
 
-define double @test_fptr(double (double)* %fptr, double %p1) {
+define double @test_fptr(ptr %fptr, double %p1) {
 ; CHECK-FLOAT-IN-VEC-LABEL: @test_fptr(
 ; CHECK-FLOAT-IN-VEC-NEXT:    [[SIN:%.*]] = call double @__sinpi(double [[P1:%.*]]) #[[ATTR0]]
 ; CHECK-FLOAT-IN-VEC-NEXT:    [[COS:%.*]] = call double [[FPTR:%.*]](double [[P1]])
index eadcf26ddb07062daf547620d10750190a6e2836..3a15c283e3e3b1609abddb55c61b30b38eab9d59 100644 (file)
@@ -8,11 +8,11 @@ target triple = "i686-unknown-linux-gnu"
 ; Helper to generate branch conditions.
 declare i1 @cond()
 
-declare i32* @use_and_return(i32*)
+declare ptr @use_and_return(ptr)
 
-declare i8* @llvm.stacksave() #0
+declare ptr @llvm.stacksave() #0
 
-declare void @llvm.stackrestore(i8*) #0
+declare void @llvm.stackrestore(ptr) #0
 
 define void @foo(i32 %x) {
 entry:
@@ -21,16 +21,16 @@ entry:
 
 nonentry:                                         ; preds = %entry
   %argmem = alloca i32, i32 %x, align 4
-  %sp = call i8* @llvm.stacksave()
+  %sp = call ptr @llvm.stacksave()
   %c2 = call i1 @cond()
   br i1 %c2, label %ret, label %sinktarget
 
 sinktarget:                                       ; preds = %nonentry
   ; Arrange for there to be a single use of %argmem by returning it.
-  %p = call i32* @use_and_return(i32* nonnull %argmem)
-  store i32 13, i32* %p, align 4
-  call void @llvm.stackrestore(i8* %sp)
-  %0 = call i32* @use_and_return(i32* %p)
+  %p = call ptr @use_and_return(ptr nonnull %argmem)
+  store i32 13, ptr %p, align 4
+  call void @llvm.stackrestore(ptr %sp)
+  %0 = call ptr @use_and_return(ptr %p)
   br label %ret
 
 ret:                                              ; preds = %sinktarget, %nonentry, %entry
@@ -40,13 +40,13 @@ ret:                                              ; preds = %sinktarget, %nonent
 ; CHECK-LABEL: define void @foo(i32 %x)
 ; CHECK: nonentry:
 ; CHECK:   %argmem = alloca i32, i32 %x
-; CHECK:   %sp = call i8* @llvm.stacksave()
+; CHECK:   %sp = call ptr @llvm.stacksave()
 ; CHECK:   %c2 = call i1 @cond()
 ; CHECK:   br i1 %c2, label %ret, label %sinktarget
 ; CHECK: sinktarget:
-; CHECK:   %p = call i32* @use_and_return(i32* nonnull %argmem)
-; CHECK:   store i32 13, i32* %p
-; CHECK:   call void @llvm.stackrestore(i8* %sp)
-; CHECK:   %0 = call i32* @use_and_return(i32* nonnull %p)
+; CHECK:   %p = call ptr @use_and_return(ptr nonnull %argmem)
+; CHECK:   store i32 13, ptr %p
+; CHECK:   call void @llvm.stackrestore(ptr %sp)
+; CHECK:   %0 = call ptr @use_and_return(ptr nonnull %p)
 
 attributes #0 = { nounwind }
index 1586bb9e8b996f3d9b908b2cfb93365d6f5e60e3..443141314811e0014a4440bdbd5379865a8e0532 100644 (file)
@@ -6,18 +6,17 @@ target triple = "x86_64-pc-windows-msvc18.0.0"
 
 %struct.B = type { i64, i64 }
 
-define void @test1(%struct.B* %p) personality i32 (...)* @__CxxFrameHandler3 {
+define void @test1(ptr %p) personality ptr @__CxxFrameHandler3 {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:  invoke.cont:
-; CHECK-NEXT:    [[TMP0:%.*]] = bitcast %struct.B* [[P:%.*]] to <2 x i64>*
-; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, <2 x i64>* [[TMP0]], align 8
+; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[TMP2:%.*]] = extractelement <2 x i64> [[TMP1]], i64 0
 ; CHECK-NEXT:    invoke void @throw()
 ; CHECK-NEXT:    to label [[UNREACHABLE:%.*]] unwind label [[CATCH_DISPATCH:%.*]]
 ; CHECK:       catch.dispatch:
 ; CHECK-NEXT:    [[CS:%.*]] = catchswitch within none [label %invoke.cont1] unwind label [[EHCLEANUP:%.*]]
 ; CHECK:       invoke.cont1:
-; CHECK-NEXT:    [[CATCH:%.*]] = catchpad within [[CS]] [i8* null, i32 64, i8* null]
+; CHECK-NEXT:    [[CATCH:%.*]] = catchpad within [[CS]] [ptr null, i32 64, ptr null]
 ; CHECK-NEXT:    invoke void @throw() [ "funclet"(token [[CATCH]]) ]
 ; CHECK-NEXT:    to label [[UNREACHABLE]] unwind label [[EHCLEANUP]]
 ; CHECK:       ehcleanup:
@@ -29,9 +28,8 @@ define void @test1(%struct.B* %p) personality i32 (...)* @__CxxFrameHandler3 {
 ; CHECK-NEXT:    unreachable
 ;
 invoke.cont:
-  %0 = bitcast %struct.B* %p to <2 x i64>*
-  %1 = load <2 x i64>, <2 x i64>* %0, align 8
-  %2 = extractelement <2 x i64> %1, i32 0
+  %0 = load <2 x i64>, ptr %p, align 8
+  %1 = extractelement <2 x i64> %0, i32 0
   invoke void @throw()
   to label %unreachable unwind label %catch.dispatch
 
@@ -39,12 +37,12 @@ catch.dispatch:                                   ; preds = %invoke.cont
   %cs = catchswitch within none [label %invoke.cont1] unwind label %ehcleanup
 
 invoke.cont1:                                     ; preds = %catch.dispatch
-  %catch = catchpad within %cs [i8* null, i32 64, i8* null]
+  %catch = catchpad within %cs [ptr null, i32 64, ptr null]
   invoke void @throw() [ "funclet"(token %catch) ]
   to label %unreachable unwind label %ehcleanup
 
 ehcleanup:                                        ; preds = %invoke.cont1, %catch.dispatch
-  %phi = phi i64 [ %2, %catch.dispatch ], [ 9, %invoke.cont1 ]
+  %phi = phi i64 [ %1, %catch.dispatch ], [ 9, %invoke.cont1 ]
   %cleanup = cleanuppad within none []
   call void @release(i64 %phi) [ "funclet"(token %cleanup) ]
   cleanupret from %cleanup unwind to caller
index 271edc0232cd3f9cb7a11342fdc8f70ea54c4962..464cc477a503c95da280297a26f7cf6bc7375a1c 100644 (file)
@@ -4,41 +4,41 @@
 target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-pc-windows-msvc18.0.0"
 
-declare i32 @use(i8*)
+declare i32 @use(ptr)
 
 ; Should be able to sink %ptr load to %not.null block which is the NCD of %ptr users.
-define i32 @test1(i8** %addr, i1 %c) {
+define i32 @test1(ptr %addr, i1 %c) {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[PTR:%.*]] = load i8*, i8** [[ADDR:%.*]], align 8
+; CHECK-NEXT:    [[PTR:%.*]] = load ptr, ptr [[ADDR:%.*]], align 8
 ; CHECK-NEXT:    br i1 false, label [[NULL:%.*]], label [[NOT_NULL:%.*]]
 ; CHECK:       null:
 ; CHECK-NEXT:    br label [[EXIT:%.*]]
 ; CHECK:       not.null:
-; CHECK-NEXT:    [[Y:%.*]] = call i32 @use(i8* [[PTR]])
+; CHECK-NEXT:    [[Y:%.*]] = call i32 @use(ptr [[PTR]])
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[EXIT]], label [[NOT_NULL_2:%.*]]
 ; CHECK:       not.null.2:
-; CHECK-NEXT:    [[Z:%.*]] = call i32 @use(i8* [[PTR]])
+; CHECK-NEXT:    [[Z:%.*]] = call i32 @use(ptr [[PTR]])
 ; CHECK-NEXT:    br label [[EXIT]]
 ; CHECK:       exit:
 ; CHECK-NEXT:    [[P:%.*]] = phi i32 [ poison, [[NULL]] ], [ [[Y]], [[NOT_NULL]] ], [ [[Z]], [[NOT_NULL_2]] ]
 ; CHECK-NEXT:    ret i32 [[P]]
 ;
 entry:
-  %ptr = load i8*, i8** %addr
-  %cond = icmp eq i8** %addr, null
+  %ptr = load ptr, ptr %addr
+  %cond = icmp eq ptr %addr, null
   br i1 %cond, label %null, label %not.null
 
 null:
-  %x = call i32 @use(i8* null)
+  %x = call i32 @use(ptr null)
   br label %exit
 
 not.null:
-  %y = call i32 @use(i8* %ptr)
+  %y = call i32 @use(ptr %ptr)
   br i1 %c, label %exit, label %not.null.2
 
 not.null.2:
-  %z = call i32 @use(i8* %ptr)
+  %z = call i32 @use(ptr %ptr)
   br label %exit
 
 exit:
@@ -47,45 +47,45 @@ exit:
 }
 
 ; Should be able to sink %ptr load to %not.null block which is the NCD of %ptr users.
-define i32 @test2(i8** %addr, i1 %c) {
+define i32 @test2(ptr %addr, i1 %c) {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[COND:%.*]] = icmp eq i8** [[ADDR:%.*]], null
+; CHECK-NEXT:    [[COND:%.*]] = icmp eq ptr [[ADDR:%.*]], null
 ; CHECK-NEXT:    br i1 [[COND]], label [[EXIT:%.*]], label [[LOAD_BB:%.*]]
 ; CHECK:       load.bb:
-; CHECK-NEXT:    [[PTR:%.*]] = load i8*, i8** [[ADDR]], align 8
+; CHECK-NEXT:    [[PTR:%.*]] = load ptr, ptr [[ADDR]], align 8
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[LEFT:%.*]], label [[RIGHT:%.*]]
 ; CHECK:       left:
-; CHECK-NEXT:    [[X:%.*]] = call i32 @use(i8* null)
+; CHECK-NEXT:    [[X:%.*]] = call i32 @use(ptr null)
 ; CHECK-NEXT:    br label [[EXIT]]
 ; CHECK:       right:
-; CHECK-NEXT:    [[Y:%.*]] = call i32 @use(i8* [[PTR]])
+; CHECK-NEXT:    [[Y:%.*]] = call i32 @use(ptr [[PTR]])
 ; CHECK-NEXT:    br i1 [[C]], label [[EXIT]], label [[RIGHT_2:%.*]]
 ; CHECK:       right.2:
-; CHECK-NEXT:    [[Z:%.*]] = call i32 @use(i8* [[PTR]])
+; CHECK-NEXT:    [[Z:%.*]] = call i32 @use(ptr [[PTR]])
 ; CHECK-NEXT:    br label [[EXIT]]
 ; CHECK:       exit:
 ; CHECK-NEXT:    [[P:%.*]] = phi i32 [ [[X]], [[LEFT]] ], [ [[Y]], [[RIGHT]] ], [ [[Z]], [[RIGHT_2]] ], [ 0, [[ENTRY:%.*]] ]
 ; CHECK-NEXT:    ret i32 [[P]]
 ;
 entry:
-  %cond = icmp eq i8** %addr, null
+  %cond = icmp eq ptr %addr, null
   br i1 %cond, label %exit, label %load.bb
 
 load.bb:
-  %ptr = load i8*, i8** %addr
+  %ptr = load ptr, ptr %addr
   br i1 %c, label %left, label %right
 
 left:
-  %x = call i32 @use(i8* null)
+  %x = call i32 @use(ptr null)
   br label %exit
 
 right:
-  %y = call i32 @use(i8* %ptr)
+  %y = call i32 @use(ptr %ptr)
   br i1 %c, label %exit, label %right.2
 
 right.2:
-  %z = call i32 @use(i8* %ptr)
+  %z = call i32 @use(ptr %ptr)
   br label %exit
 
 exit:
index 02fa29b7c184b5143f5fceebc32f99de5768caa6..39cf1255d47aa090069fd4b6a4f7d2cce48bcc89 100644 (file)
@@ -3,7 +3,7 @@
 
 ; Check that InstCombine can sink instructions to the landingpad of the invoke.
 
-define void @t0_noop(i32 %arg) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define void @t0_noop(i32 %arg) personality ptr @__gxx_personality_v0 {
 ; CHECK-LABEL: @t0_noop(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[C:%.*]] = call i1 @cond()
@@ -14,12 +14,12 @@ define void @t0_noop(i32 %arg) personality i8* bitcast (i32 (...)* @__gxx_person
 ; CHECK:       invoke.cont:
 ; CHECK-NEXT:    unreachable
 ; CHECK:       lpad:
-; CHECK-NEXT:    [[EH:%.*]] = landingpad { i8*, i32 }
+; CHECK-NEXT:    [[EH:%.*]] = landingpad { ptr, i32 }
 ; CHECK-NEXT:    cleanup
 ; CHECK-NEXT:    [[V0:%.*]] = add i32 [[ARG:%.*]], 42
 ; CHECK-NEXT:    call void @consume(i32 [[V0]])
 ; CHECK-NEXT:    call void @destructor()
-; CHECK-NEXT:    resume { i8*, i32 } [[EH]]
+; CHECK-NEXT:    resume { ptr, i32 } [[EH]]
 ; CHECK:       if.end:
 ; CHECK-NEXT:    [[V1:%.*]] = add i32 [[ARG]], 24
 ; CHECK-NEXT:    call void @consume(i32 [[V1]])
@@ -39,10 +39,10 @@ invoke.cont:
   unreachable
 
 lpad:
-  %eh = landingpad { i8*, i32 } cleanup
+  %eh = landingpad { ptr, i32 } cleanup
   call void @consume(i32 %v0)
   call void @destructor()
-  resume { i8*, i32 } %eh
+  resume { ptr, i32 } %eh
 
 if.end:
   call void @consume(i32 %v1)
index 5e476dd62fa31dbac8d995dae2bf07e8fdd7f774..c543451e34f299796b094bef44b27ba7c5b71479 100644 (file)
@@ -74,11 +74,11 @@ define i32 @n3(i1 %i0, i32 %v0, i32 %v1, i32 %v2, i32 %v3) {
 }
 
 ; FIXME: we could invert all uses of %i1 here
-define i32 @n4(i1 %i0, i32 %v0, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i32 %v5, i32* %dst) {
+define i32 @n4(i1 %i0, i32 %v0, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i32 %v5, ptr %dst) {
 ; CHECK-LABEL: @n4(
 ; CHECK-NEXT:    [[I1:%.*]] = icmp eq i32 [[V0:%.*]], [[V1:%.*]]
 ; CHECK-NEXT:    [[I2:%.*]] = select i1 [[I1]], i32 [[V2:%.*]], i32 [[V3:%.*]]
-; CHECK-NEXT:    store i32 [[I2]], i32* [[DST:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I2]], ptr [[DST:%.*]], align 4
 ; CHECK-NEXT:    [[I3:%.*]] = xor i1 [[I0:%.*]], true
 ; CHECK-NEXT:    [[I4:%.*]] = and i1 [[I1]], [[I3]]
 ; CHECK-NEXT:    [[I5:%.*]] = select i1 [[I4]], i32 [[V4:%.*]], i32 [[V5:%.*]]
@@ -86,7 +86,7 @@ define i32 @n4(i1 %i0, i32 %v0, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i32 %v5, i32
 ;
   %i1 = icmp eq i32 %v0, %v1 ; has extra invertible use
   %i2 = select i1 %i1, i32 %v2, i32 %v3 ; invertible use
-  store i32 %i2, i32* %dst
+  store i32 %i2, ptr %dst
   %i3 = xor i1 %i0, -1
   %i4 = and i1 %i3, %i1
   %i5 = select i1 %i4, i32 %v4, i32 %v5
index 506779582e1046ef31e0f667c02fe282ade2c645..e454b5781d926c5b7f57d00a389e98350aaf1853 100644 (file)
@@ -74,11 +74,11 @@ define i32 @n3(i1 %i0, i32 %v0, i32 %v1, i32 %v2, i32 %v3) {
 }
 
 ; FIXME: we could invert all uses of %i1 here
-define i32 @n4(i1 %i0, i32 %v0, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i32 %v5, i32* %dst) {
+define i32 @n4(i1 %i0, i32 %v0, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i32 %v5, ptr %dst) {
 ; CHECK-LABEL: @n4(
 ; CHECK-NEXT:    [[I1:%.*]] = icmp eq i32 [[V0:%.*]], [[V1:%.*]]
 ; CHECK-NEXT:    [[I2:%.*]] = select i1 [[I1]], i32 [[V2:%.*]], i32 [[V3:%.*]]
-; CHECK-NEXT:    store i32 [[I2]], i32* [[DST:%.*]], align 4
+; CHECK-NEXT:    store i32 [[I2]], ptr [[DST:%.*]], align 4
 ; CHECK-NEXT:    [[I3:%.*]] = xor i1 [[I0:%.*]], true
 ; CHECK-NEXT:    [[I4:%.*]] = or i1 [[I1]], [[I3]]
 ; CHECK-NEXT:    [[I5:%.*]] = select i1 [[I4]], i32 [[V4:%.*]], i32 [[V5:%.*]]
@@ -86,7 +86,7 @@ define i32 @n4(i1 %i0, i32 %v0, i32 %v1, i32 %v2, i32 %v3, i32 %v4, i32 %v5, i32
 ;
   %i1 = icmp eq i32 %v0, %v1 ; has extra invertible use
   %i2 = select i1 %i1, i32 %v2, i32 %v3 ; invertible use
-  store i32 %i2, i32* %dst
+  store i32 %i2, ptr %dst
   %i3 = xor i1 %i0, -1
   %i4 = or i1 %i3, %i1
   %i5 = select i1 %i4, i32 %v4, i32 %v5
index 7ae0da3133b2ff3273a0d63baf4d48da342b2729..631043c4780070c798d7f6ab01888c83cc825444 100644 (file)
@@ -78,7 +78,7 @@ bb4:                                              ; preds = %bb2
 
 declare i32 @bar()
 
-define i32 @test3(i32* nocapture readonly %P, i32 %i) {
+define i32 @test3(ptr nocapture readonly %P, i32 %i) {
 ; CHECK-LABEL: @test3(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    switch i32 [[I:%.*]], label [[SW_EPILOG:%.*]] [
@@ -87,8 +87,8 @@ define i32 @test3(i32* nocapture readonly %P, i32 %i) {
 ; CHECK-NEXT:    ]
 ; CHECK:       sw.bb:
 ; CHECK-NEXT:    [[IDXPROM:%.*]] = sext i32 [[I]] to i64
-; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[P:%.*]], i64 [[IDXPROM]]
-; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 [[IDXPROM]]
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
 ; CHECK-NEXT:    [[ADD:%.*]] = add nsw i32 [[TMP0]], [[I]]
 ; CHECK-NEXT:    br label [[SW_EPILOG]]
 ; CHECK:       sw.epilog:
@@ -97,8 +97,8 @@ define i32 @test3(i32* nocapture readonly %P, i32 %i) {
 ;
 entry:
   %idxprom = sext i32 %i to i64
-  %arrayidx = getelementptr inbounds i32, i32* %P, i64 %idxprom
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %P, i64 %idxprom
+  %0 = load i32, ptr %arrayidx, align 4
   switch i32 %i, label %sw.epilog [
   i32 5, label %sw.bb
   i32 2, label %sw.bb
@@ -141,12 +141,12 @@ endif:          ; preds = %entry
 }
 
 ; Two uses in a single user (phi node). We just bail out.
-define i32 @test5(i32* nocapture readonly %P, i32 %i, i1 %cond) {
+define i32 @test5(ptr nocapture readonly %P, i32 %i, i1 %cond) {
 ; CHECK-LABEL: @test5(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[IDXPROM:%.*]] = sext i32 [[I:%.*]] to i64
-; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[P:%.*]], i64 [[IDXPROM]]
-; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 [[IDXPROM]]
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[DISPATCHBB:%.*]], label [[SW_EPILOG:%.*]]
 ; CHECK:       dispatchBB:
 ; CHECK-NEXT:    [[ADD:%.*]] = shl nsw i32 [[I]], 1
@@ -159,8 +159,8 @@ define i32 @test5(i32* nocapture readonly %P, i32 %i, i1 %cond) {
 ;
 entry:
   %idxprom = sext i32 %i to i64
-  %arrayidx = getelementptr inbounds i32, i32* %P, i64 %idxprom
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %P, i64 %idxprom
+  %0 = load i32, ptr %arrayidx, align 4
   br i1 %cond, label %dispatchBB, label %sw.epilog
 
 dispatchBB:
@@ -176,15 +176,15 @@ sw.epilog:                                        ; preds = %entry, %sw.bb
 }
 
 ; Multiple uses but from same BB. We can sink.
-define i32 @test6(i32* nocapture readonly %P, i32 %i, i1 %cond) {
+define i32 @test6(ptr nocapture readonly %P, i32 %i, i1 %cond) {
 ; CHECK-LABEL: @test6(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[ADD:%.*]] = shl nsw i32 [[I]], 1
 ; CHECK-NEXT:    br label [[DISPATCHBB:%.*]]
 ; CHECK:       dispatchBB:
 ; CHECK-NEXT:    [[IDXPROM:%.*]] = sext i32 [[I:%.*]] to i64
-; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[P:%.*]], i64 [[IDXPROM]]
-; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]], align 4
+; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[P:%.*]], i64 [[IDXPROM]]
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[ARRAYIDX]], align 4
 ; CHECK-NEXT:    switch i32 [[I]], label [[SW_BB:%.*]] [
 ; CHECK-NEXT:    i32 5, label [[SW_EPILOG:%.*]]
 ; CHECK-NEXT:    i32 2, label [[SW_EPILOG]]
@@ -197,8 +197,8 @@ define i32 @test6(i32* nocapture readonly %P, i32 %i, i1 %cond) {
 ;
 entry:
   %idxprom = sext i32 %i to i64
-  %arrayidx = getelementptr inbounds i32, i32* %P, i64 %idxprom
-  %0 = load i32, i32* %arrayidx, align 4
+  %arrayidx = getelementptr inbounds i32, ptr %P, i64 %idxprom
+  %0 = load i32, ptr %arrayidx, align 4
   %add = add nsw i32 %i, %i
   br label %dispatchBB
 
index ba101d7bae0a976bc3316d78164174fd316c29a9..bfbecf003229055df2f2c500772fa2275ab4f59c 100644 (file)
@@ -14,10 +14,10 @@ define float @mysqrt(float %x, float %y) #0 {
 entry:
   %x.addr = alloca float, align 4
   %y.addr = alloca float, align 4
-  store float %x, float* %x.addr, align 4
-  store float %y, float* %y.addr, align 4
-  %0 = load float, float* %x.addr, align 4
-  %1 = load float, float* %x.addr, align 4
+  store float %x, ptr %x.addr, align 4
+  store float %y, ptr %y.addr, align 4
+  %0 = load float, ptr %x.addr, align 4
+  %1 = load float, ptr %x.addr, align 4
   %mul = fmul fast float %0, %1
   %2 = call float @llvm.sqrt.f32(float %mul)
   ret float %2
index 7c923c0d9c8728ad07bcb88607fd2ab492670337..004df3e30c72a1e4f1ce45403fb9238592f73dd6 100644 (file)
@@ -29,15 +29,15 @@ define float @test2(float %x) nounwind readnone ssp {
 ; Can't fold (fptrunc (sqrt (fpext x))) -> (sqrtf x) since there is another
 ; use of sqrt result.
 
-define float @test3(float* %v) nounwind uwtable ssp {
+define float @test3(ptr %v) nounwind uwtable ssp {
 ; CHECK-LABEL: @test3(
 ; CHECK-NEXT:    [[CALL34:%.*]] = call double @sqrt(double 0x7FF8000000000000) #[[ATTR4]]
 ; CHECK-NEXT:    [[CALL36:%.*]] = call i32 @foo(double [[CALL34]]) #[[ATTR5:[0-9]+]]
 ; CHECK-NEXT:    [[CONV38:%.*]] = fptrunc double [[CALL34]] to float
 ; CHECK-NEXT:    ret float [[CONV38]]
 ;
-  %arrayidx13 = getelementptr inbounds float, float* %v, i64 2
-  %tmp14 = load float, float* %arrayidx13
+  %arrayidx13 = getelementptr inbounds float, ptr %v, i64 2
+  %tmp14 = load float, ptr %arrayidx13
   %mul18 = fmul float %tmp14, %tmp14
   %add19 = fadd float undef, %mul18
   %conv = fpext float %add19 to double
index 0441eddf240318f77cc050d586de4f8acfe93031..eddf2296ae3a6750b9219f9e3b093617cc53d8c3 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: opt < %s -passes=instcombine
 ; PR2670
 
-@g_127 = external global i32           ; <i32*> [#uses=1]
+@g_127 = external global i32           ; <ptr> [#uses=1]
 
 define i32 @func_56(i32 %p_58, i32 %p_59, i32 %p_61, i16 signext %p_62) nounwind {
 entry:
@@ -11,7 +11,7 @@ entry:
        %rem = srem i64 %or, 1          ; <i64> [#uses=1]
        %cmp = icmp eq i64 %rem, 1              ; <i1> [#uses=1]
        %cmp.ext = zext i1 %cmp to i32          ; <i32> [#uses=1]
-       store i32 %cmp.ext, i32* @g_127
+       store i32 %cmp.ext, ptr @g_127
        ret i32 undef
 }
 
index 2abcca417776b5e1160be7243cb1c62e8bf78922..92663a0d095a38bc98cbe7a932f584c3f1b26edf 100644 (file)
 define void @foo() nounwind {
 entry:
   %src = alloca [1024 x i8], align 64
-  %src1 = getelementptr [1024 x i8], [1024 x i8]* %src, i32 0, i32 0
-  call void @llvm.memcpy.p0i8.p0i8.i32(i8* align 32 getelementptr inbounds ([1024 x i8], [1024 x i8]* @dst, i32 0, i32 0), i8* align 32 %src1, i32 1024, i1 false)
-  call void @frob(i8* %src1) nounwind
+  call void @llvm.memcpy.p0.p0.i32(ptr align 32 @dst, ptr align 32 %src, i32 1024, i1 false)
+  call void @frob(ptr %src) nounwind
   ret void
 }
 
-declare void @frob(i8*)
+declare void @frob(ptr)
 
-declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i1) nounwind
+declare void @llvm.memcpy.p0.p0.i32(ptr nocapture, ptr nocapture, i32, i1) nounwind
index 0a76a53e3ede969dace4e27955bb65a212837960..2139ebab7ce7960b8eb684a20713a6b9c39e3cdc 100644 (file)
@@ -3,23 +3,23 @@
 ; PR37713
 ; RUN: opt -passes=instcombine %s -S | FileCheck %s
 
-declare i8* @llvm.stacksave() #0
-declare void @llvm.stackrestore(i8*) #0
+declare ptr @llvm.stacksave() #0
+declare void @llvm.stackrestore(ptr) #0
 
-define i32* @test1(i32 %P) !dbg !6 {
+define ptr @test1(i32 %P) !dbg !6 {
 ; CHECK-LABEL: @test1(
-; CHECK-NEXT:    call void @llvm.dbg.value(metadata i8* undef
+; CHECK-NEXT:    call void @llvm.dbg.value(metadata ptr undef
 ; CHECK-NEXT:    [[TMP1:%.*]] = zext i32 [[P:%.*]] to i64, !dbg !13
 ; CHECK-NEXT:    [[A:%.*]] = alloca i32, i64 [[TMP1]], align 4, !dbg !13
-; CHECK-NEXT:    call void @llvm.dbg.value(metadata i32* [[A]]
-; CHECK-NEXT:    ret i32* [[A]], !dbg !14
+; CHECK-NEXT:    call void @llvm.dbg.value(metadata ptr [[A]]
+; CHECK-NEXT:    ret ptr [[A]], !dbg !14
 ;
-  %tmp = call i8* @llvm.stacksave(), !dbg !12
-  call void @llvm.dbg.value(metadata i8* %tmp, metadata !9, metadata !DIExpression()), !dbg !12
-  call void @llvm.stackrestore(i8* %tmp), !dbg !13
+  %tmp = call ptr @llvm.stacksave(), !dbg !12
+  call void @llvm.dbg.value(metadata ptr %tmp, metadata !9, metadata !DIExpression()), !dbg !12
+  call void @llvm.stackrestore(ptr %tmp), !dbg !13
   %A = alloca i32, i32 %P, !dbg !14
-  call void @llvm.dbg.value(metadata i32* %A, metadata !11, metadata !DIExpression()), !dbg !14
-  ret i32* %A, !dbg !15
+  call void @llvm.dbg.value(metadata ptr %A, metadata !11, metadata !DIExpression()), !dbg !14
+  ret ptr %A, !dbg !15
 }
 
 declare void @llvm.dbg.value(metadata, metadata, metadata) #1
index d307eb7619f9355aefb56efb5407ea9c2e401e87..37aba0bf6ba0668d1981e211a739571583762a1f 100644 (file)
@@ -2,23 +2,23 @@
 
 @glob = global i32 0
 
-declare i8* @llvm.stacksave()
-declare void @llvm.stackrestore(i8*)
+declare ptr @llvm.stacksave()
+declare void @llvm.stackrestore(ptr)
 
 ;; Test that llvm.stackrestore is removed when possible.
-define i32* @test1(i32 %P) {
-       %tmp = call i8* @llvm.stacksave( )
-       call void @llvm.stackrestore( i8* %tmp ) ;; not restoring anything
+define ptr @test1(i32 %P) {
+       %tmp = call ptr @llvm.stacksave( )
+       call void @llvm.stackrestore( ptr %tmp ) ;; not restoring anything
        %A = alloca i32, i32 %P
-       ret i32* %A
+       ret ptr %A
 }
 
-; CHECK-LABEL: define i32* @test1(
+; CHECK-LABEL: define ptr @test1(
 ; CHECK-NOT: call void @llvm.stackrestore
-; CHECK: ret i32*
+; CHECK: ret ptr
 
-define void @test2(i8* %X) {
-       call void @llvm.stackrestore( i8* %X )  ;; no allocas before return.
+define void @test2(ptr %X) {
+       call void @llvm.stackrestore( ptr %X )  ;; no allocas before return.
        ret void
 }
 
@@ -39,21 +39,21 @@ bb.preheader:               ; preds = %entry
 
 bb:            ; preds = %bb, %bb.preheader
        %i.0.reg2mem.0 = phi i32 [ 0, %bb.preheader ], [ %indvar.next, %bb ]            ; <i32> [#uses=2]
-       %tmp = call i8* @llvm.stacksave( )              ; <i8*> [#uses=1]
-       %tmp23 = alloca i8, i32 %size           ; <i8*> [#uses=2]
-       %tmp27 = getelementptr i8, i8* %tmp23, i32 %tmp25               ; <i8*> [#uses=1]
-       store i8 0, i8* %tmp27, align 1
-       %tmp28 = call i8* @llvm.stacksave( )            ; <i8*> [#uses=1]
-       %tmp52 = alloca i8, i32 %size           ; <i8*> [#uses=1]
-       %tmp53 = call i8* @llvm.stacksave( )            ; <i8*> [#uses=1]
-       %tmp77 = alloca i8, i32 %size           ; <i8*> [#uses=1]
-       %tmp78 = call i8* @llvm.stacksave( )            ; <i8*> [#uses=1]
-       %tmp102 = alloca i8, i32 %size          ; <i8*> [#uses=1]
-       call void @bar( i32 %i.0.reg2mem.0, i8* %tmp23, i8* %tmp52, i8* %tmp77, i8* %tmp102, i32 %size ) nounwind
-       call void @llvm.stackrestore( i8* %tmp78 )
-       call void @llvm.stackrestore( i8* %tmp53 )
-       call void @llvm.stackrestore( i8* %tmp28 )
-       call void @llvm.stackrestore( i8* %tmp )
+       %tmp = call ptr @llvm.stacksave( )              ; <ptr> [#uses=1]
+       %tmp23 = alloca i8, i32 %size           ; <ptr> [#uses=2]
+       %tmp27 = getelementptr i8, ptr %tmp23, i32 %tmp25               ; <ptr> [#uses=1]
+       store i8 0, ptr %tmp27, align 1
+       %tmp28 = call ptr @llvm.stacksave( )            ; <ptr> [#uses=1]
+       %tmp52 = alloca i8, i32 %size           ; <ptr> [#uses=1]
+       %tmp53 = call ptr @llvm.stacksave( )            ; <ptr> [#uses=1]
+       %tmp77 = alloca i8, i32 %size           ; <ptr> [#uses=1]
+       %tmp78 = call ptr @llvm.stacksave( )            ; <ptr> [#uses=1]
+       %tmp102 = alloca i8, i32 %size          ; <ptr> [#uses=1]
+       call void @bar( i32 %i.0.reg2mem.0, ptr %tmp23, ptr %tmp52, ptr %tmp77, ptr %tmp102, i32 %size ) nounwind
+       call void @llvm.stackrestore( ptr %tmp78 )
+       call void @llvm.stackrestore( ptr %tmp53 )
+       call void @llvm.stackrestore( ptr %tmp28 )
+       call void @llvm.stackrestore( ptr %tmp )
        %indvar.next = add i32 %i.0.reg2mem.0, 1                ; <i32> [#uses=2]
        %exitcond = icmp eq i32 %indvar.next, %smax             ; <i1> [#uses=1]
        br i1 %exitcond, label %return, label %bb
@@ -63,16 +63,16 @@ return:             ; preds = %bb, %entry
 }
 
 ; CHECK-LABEL: define void @foo(
-; CHECK: %tmp = call i8* @llvm.stacksave()
+; CHECK: %tmp = call ptr @llvm.stacksave()
 ; CHECK: alloca i8
 ; CHECK-NOT: stacksave
 ; CHECK: call void @bar(
-; CHECK-NEXT: call void @llvm.stackrestore(i8* %tmp)
+; CHECK-NEXT: call void @llvm.stackrestore(ptr %tmp)
 ; CHECK: ret void
 
-declare void @bar(i32, i8*, i8*, i8*, i8*, i32)
+declare void @bar(i32, ptr, ptr, ptr, ptr, i32)
 
-declare void @inalloca_callee(i32* inalloca(i32))
+declare void @inalloca_callee(ptr inalloca(i32))
 
 define void @test3(i32 %c) {
 entry:
@@ -80,18 +80,18 @@ entry:
 
 loop:
   %i = phi i32 [0, %entry], [%i1, %loop]
-  %save1 = call i8* @llvm.stacksave()
+  %save1 = call ptr @llvm.stacksave()
   %argmem = alloca inalloca i32
-  store i32 0, i32* %argmem
-  call void @inalloca_callee(i32* inalloca(i32) %argmem)
+  store i32 0, ptr %argmem
+  call void @inalloca_callee(ptr inalloca(i32) %argmem)
 
   ; This restore cannot be deleted, the restore below does not make it dead.
-  call void @llvm.stackrestore(i8* %save1)
+  call void @llvm.stackrestore(ptr %save1)
 
   ; FIXME: We should be able to remove this save/restore pair, but we don't.
-  %save2 = call i8* @llvm.stacksave()
-  store i32 0, i32* @glob
-  call void @llvm.stackrestore(i8* %save2)
+  %save2 = call ptr @llvm.stacksave()
+  store i32 0, ptr @glob
+  call void @llvm.stackrestore(ptr %save2)
   %i1 = add i32 1, %i
   %done = icmp eq i32 %i1, %c
   br i1 %done, label %loop, label %return
@@ -103,30 +103,30 @@ return:
 ; CHECK-LABEL: define void @test3(
 ; CHECK: loop:
 ; CHECK: %i = phi i32 [ 0, %entry ], [ %i1, %loop ]
-; CHECK: %save1 = call i8* @llvm.stacksave()
+; CHECK: %save1 = call ptr @llvm.stacksave()
 ; CHECK: %argmem = alloca inalloca i32
-; CHECK: store i32 0, i32* %argmem
-; CHECK: call void @inalloca_callee(i32* {{.*}} inalloca(i32) %argmem)
-; CHECK: call void @llvm.stackrestore(i8* %save1)
+; CHECK: store i32 0, ptr %argmem
+; CHECK: call void @inalloca_callee(ptr {{.*}} inalloca(i32) %argmem)
+; CHECK: call void @llvm.stackrestore(ptr %save1)
 ; CHECK: br i1 %done, label %loop, label %return
 ; CHECK: ret void
 
-define i32 @test4(i32 %m, i32* %a, i32* %b) {
+define i32 @test4(i32 %m, ptr %a, ptr %b) {
 entry:
   br label %for.body
 
 for.body:
   %x.012 = phi i32 [ 0, %entry ], [ %add2, %for.body ]
   %i.011 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
-  %0 = call i8* @llvm.stacksave()
-  %load1 = load i32, i32* %a, align 4
+  %0 = call ptr @llvm.stacksave()
+  %load1 = load i32, ptr %a, align 4
   %mul1 = mul nsw i32 %load1, %m
   %add1 = add nsw i32 %mul1, %x.012
-  call void @llvm.stackrestore(i8* %0)
-  %load2 = load i32, i32* %b, align 4
+  call void @llvm.stackrestore(ptr %0)
+  %load2 = load i32, ptr %b, align 4
   %mul2 = mul nsw i32 %load2, %m
   %add2 = add nsw i32 %mul2, %add1
-  call void @llvm.stackrestore(i8* %0)
+  call void @llvm.stackrestore(ptr %0)
   %inc = add nuw nsw i32 %i.011, 1
   %exitcond.not = icmp eq i32 %inc, 100
   br i1 %exitcond.not, label %for.cond.cleanup, label %for.body
index 55e1026ce04be50129041228e38f9585178690b0..6c62b5aa187f755f20d93002fa39c141b55189fe 100644 (file)
 ; pointers being relocated at a statepoint.
 
 
-declare i32* @fake_personality_function()
+declare ptr @fake_personality_function()
 declare void @func()
 
-define void @test(i32 addrspace(1)* %b) gc "statepoint-example" {
+define void @test(ptr addrspace(1) %b) gc "statepoint-example" {
 ; CHECK-LABEL: @test(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[D:%.*]] = getelementptr i32, i32 addrspace(1)* [[B:%.*]], i64 16
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(i32 addrspace(1)* [[B]], i32 addrspace(1)* [[D]]) ]
-; CHECK-NEXT:    [[B_NEW_1:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
-; CHECK-NEXT:    [[B_NEW_2:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
-; CHECK-NEXT:    [[D_NEW_1:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
-; CHECK-NEXT:    [[D_NEW_2:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
-; CHECK-NEXT:    [[D_NEW_3:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
-; CHECK-NEXT:    [[D_NEW_4:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[B_NEW_1]], align 4
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[B_NEW_2]], align 4
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[D_NEW_1]], align 4
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[D_NEW_2]], align 4
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[D_NEW_3]], align 4
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[D_NEW_4]], align 4
+; CHECK-NEXT:    [[D:%.*]] = getelementptr i32, ptr addrspace(1) [[B:%.*]], i64 16
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(ptr addrspace(1) [[B]], ptr addrspace(1) [[D]]) ]
+; CHECK-NEXT:    [[B_NEW_1:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
+; CHECK-NEXT:    [[B_NEW_2:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
+; CHECK-NEXT:    [[D_NEW_1:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
+; CHECK-NEXT:    [[D_NEW_2:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
+; CHECK-NEXT:    [[D_NEW_3:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
+; CHECK-NEXT:    [[D_NEW_4:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[B_NEW_1]], align 4
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[B_NEW_2]], align 4
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[D_NEW_1]], align 4
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[D_NEW_2]], align 4
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[D_NEW_3]], align 4
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[D_NEW_4]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %d = getelementptr i32, i32 addrspace(1)* %b, i64 16
-  %safepoint_token = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (i32 addrspace(1)* %b, i32 addrspace(1)* %b, i32 addrspace(1)* %d, i32 addrspace(1)* %d)]
-  %b.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
-  %b.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 1)
-  %d.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 2)
-  %d.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 3)
-  %d.new.3 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 1, i32 2)
-  %d.new.4 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 1, i32 3)
-  store i32 1, i32 addrspace(1)* %b.new.1
-  store i32 1, i32 addrspace(1)* %b.new.2
-  store i32 1, i32 addrspace(1)* %d.new.1
-  store i32 1, i32 addrspace(1)* %d.new.2
-  store i32 1, i32 addrspace(1)* %d.new.3
-  store i32 1, i32 addrspace(1)* %d.new.4
+  %d = getelementptr i32, ptr addrspace(1) %b, i64 16
+  %safepoint_token = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (ptr addrspace(1) %b, ptr addrspace(1) %b, ptr addrspace(1) %d, ptr addrspace(1) %d)]
+  %b.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
+  %b.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 1)
+  %d.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 2)
+  %d.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 3)
+  %d.new.3 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 1, i32 2)
+  %d.new.4 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 1, i32 3)
+  store i32 1, ptr addrspace(1) %b.new.1
+  store i32 1, ptr addrspace(1) %b.new.2
+  store i32 1, ptr addrspace(1) %d.new.1
+  store i32 1, ptr addrspace(1) %d.new.2
+  store i32 1, ptr addrspace(1) %d.new.3
+  store i32 1, ptr addrspace(1) %d.new.4
   ret void
 }
 
-define void @test_no_derived_use(i32 addrspace(1)* %b) gc "statepoint-example" {
+define void @test_no_derived_use(ptr addrspace(1) %b) gc "statepoint-example" {
 ; CHECK-LABEL: @test_no_derived_use(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(i32 addrspace(1)* [[B:%.*]]) ]
-; CHECK-NEXT:    [[B_NEW_1:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[B_NEW_1]], align 4
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(ptr addrspace(1) [[B:%.*]]) ]
+; CHECK-NEXT:    [[B_NEW_1:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[B_NEW_1]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %d = getelementptr i32, i32 addrspace(1)* %b, i64 16
-  %safepoint_token = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (i32 addrspace(1)* %b, i32 addrspace(1)* %b, i32 addrspace(1)* %d, i32 addrspace(1)* %d)]
-  %b.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
-  %b.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 1)
-  %d.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 2)
-  %d.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 3)
-  %d.new.3 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 1, i32 2)
-  %d.new.4 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 1, i32 3)
-  store i32 1, i32 addrspace(1)* %b.new.1
+  %d = getelementptr i32, ptr addrspace(1) %b, i64 16
+  %safepoint_token = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (ptr addrspace(1) %b, ptr addrspace(1) %b, ptr addrspace(1) %d, ptr addrspace(1) %d)]
+  %b.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
+  %b.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 1)
+  %d.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 2)
+  %d.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 3)
+  %d.new.3 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 1, i32 2)
+  %d.new.4 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 1, i32 3)
+  store i32 1, ptr addrspace(1) %b.new.1
   ret void
 }
 
-define void @test_no_base_use(i32 addrspace(1)* %b) gc "statepoint-example" {
+define void @test_no_base_use(ptr addrspace(1) %b) gc "statepoint-example" {
 ; CHECK-LABEL: @test_no_base_use(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[D:%.*]] = getelementptr i32, i32 addrspace(1)* [[B:%.*]], i64 16
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(i32 addrspace(1)* [[B]], i32 addrspace(1)* [[D]]) ]
-; CHECK-NEXT:    [[D_NEW_1:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[D_NEW_1]], align 4
+; CHECK-NEXT:    [[D:%.*]] = getelementptr i32, ptr addrspace(1) [[B:%.*]], i64 16
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(ptr addrspace(1) [[B]], ptr addrspace(1) [[D]]) ]
+; CHECK-NEXT:    [[D_NEW_1:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[D_NEW_1]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %d = getelementptr i32, i32 addrspace(1)* %b, i64 16
-  %safepoint_token = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (i32 addrspace(1)* %b, i32 addrspace(1)* %b, i32 addrspace(1)* %d, i32 addrspace(1)* %d)]
-  %b.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
-  %b.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 1)
-  %d.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 2)
-  %d.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 3)
-  %d.new.3 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 1, i32 2)
-  %d.new.4 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 1, i32 3)
-  store i32 1, i32 addrspace(1)* %d.new.1
+  %d = getelementptr i32, ptr addrspace(1) %b, i64 16
+  %safepoint_token = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (ptr addrspace(1) %b, ptr addrspace(1) %b, ptr addrspace(1) %d, ptr addrspace(1) %d)]
+  %b.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
+  %b.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 1)
+  %d.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 2)
+  %d.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 3)
+  %d.new.3 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 1, i32 2)
+  %d.new.4 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 1, i32 3)
+  store i32 1, ptr addrspace(1) %d.new.1
   ret void
 }
 
-define void @test_invoke(i32 addrspace(1)* %b) gc "statepoint-example" personality i32* ()* @fake_personality_function {
+define void @test_invoke(ptr addrspace(1) %b) gc "statepoint-example" personality ptr @fake_personality_function {
 ; CHECK-LABEL: @test_invoke(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[D:%.*]] = getelementptr i32, i32 addrspace(1)* [[B:%.*]], i64 16
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(i32 addrspace(1)* [[B]], i32 addrspace(1)* [[D]]) ]
+; CHECK-NEXT:    [[D:%.*]] = getelementptr i32, ptr addrspace(1) [[B:%.*]], i64 16
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(ptr addrspace(1) [[B]], ptr addrspace(1) [[D]]) ]
 ; CHECK-NEXT:    to label [[NORMAL_DEST:%.*]] unwind label [[UNWIND_DEST:%.*]]
 ; CHECK:       normal_dest:
-; CHECK-NEXT:    [[B_NEW_1:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
-; CHECK-NEXT:    [[B_NEW_2:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
-; CHECK-NEXT:    [[D_NEW_1:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
-; CHECK-NEXT:    [[D_NEW_2:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
-; CHECK-NEXT:    [[D_NEW_3:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
-; CHECK-NEXT:    [[D_NEW_4:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[B_NEW_1]], align 4
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[B_NEW_2]], align 4
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[D_NEW_1]], align 4
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[D_NEW_2]], align 4
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[D_NEW_3]], align 4
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[D_NEW_4]], align 4
+; CHECK-NEXT:    [[B_NEW_1:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
+; CHECK-NEXT:    [[B_NEW_2:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
+; CHECK-NEXT:    [[D_NEW_1:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
+; CHECK-NEXT:    [[D_NEW_2:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
+; CHECK-NEXT:    [[D_NEW_3:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
+; CHECK-NEXT:    [[D_NEW_4:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[B_NEW_1]], align 4
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[B_NEW_2]], align 4
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[D_NEW_1]], align 4
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[D_NEW_2]], align 4
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[D_NEW_3]], align 4
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[D_NEW_4]], align 4
 ; CHECK-NEXT:    ret void
 ; CHECK:       unwind_dest:
 ; CHECK-NEXT:    [[LPAD:%.*]] = landingpad token
 ; CHECK-NEXT:    cleanup
-; CHECK-NEXT:    [[LPB_NEW_1:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[LPAD]], i32 0, i32 0)
-; CHECK-NEXT:    [[LPB_NEW_2:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[LPAD]], i32 0, i32 0)
-; CHECK-NEXT:    [[LPD_NEW_1:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[LPAD]], i32 0, i32 1)
-; CHECK-NEXT:    [[LPD_NEW_2:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[LPAD]], i32 0, i32 1)
-; CHECK-NEXT:    [[LPD_NEW_3:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[LPAD]], i32 0, i32 1)
-; CHECK-NEXT:    [[LPD_NEW_4:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[LPAD]], i32 0, i32 1)
-; CHECK-NEXT:    store i32 2, i32 addrspace(1)* [[LPB_NEW_1]], align 4
-; CHECK-NEXT:    store i32 2, i32 addrspace(1)* [[LPB_NEW_2]], align 4
-; CHECK-NEXT:    store i32 2, i32 addrspace(1)* [[LPD_NEW_1]], align 4
-; CHECK-NEXT:    store i32 2, i32 addrspace(1)* [[LPD_NEW_2]], align 4
-; CHECK-NEXT:    store i32 2, i32 addrspace(1)* [[LPD_NEW_3]], align 4
-; CHECK-NEXT:    store i32 2, i32 addrspace(1)* [[LPD_NEW_4]], align 4
+; CHECK-NEXT:    [[LPB_NEW_1:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[LPAD]], i32 0, i32 0)
+; CHECK-NEXT:    [[LPB_NEW_2:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[LPAD]], i32 0, i32 0)
+; CHECK-NEXT:    [[LPD_NEW_1:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[LPAD]], i32 0, i32 1)
+; CHECK-NEXT:    [[LPD_NEW_2:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[LPAD]], i32 0, i32 1)
+; CHECK-NEXT:    [[LPD_NEW_3:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[LPAD]], i32 0, i32 1)
+; CHECK-NEXT:    [[LPD_NEW_4:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[LPAD]], i32 0, i32 1)
+; CHECK-NEXT:    store i32 2, ptr addrspace(1) [[LPB_NEW_1]], align 4
+; CHECK-NEXT:    store i32 2, ptr addrspace(1) [[LPB_NEW_2]], align 4
+; CHECK-NEXT:    store i32 2, ptr addrspace(1) [[LPD_NEW_1]], align 4
+; CHECK-NEXT:    store i32 2, ptr addrspace(1) [[LPD_NEW_2]], align 4
+; CHECK-NEXT:    store i32 2, ptr addrspace(1) [[LPD_NEW_3]], align 4
+; CHECK-NEXT:    store i32 2, ptr addrspace(1) [[LPD_NEW_4]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %d = getelementptr i32, i32 addrspace(1)* %b, i64 16
-  %safepoint_token = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (i32 addrspace(1)* %b, i32 addrspace(1)* %b, i32 addrspace(1)* %d, i32 addrspace(1)* %d)]
+  %d = getelementptr i32, ptr addrspace(1) %b, i64 16
+  %safepoint_token = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (ptr addrspace(1) %b, ptr addrspace(1) %b, ptr addrspace(1) %d, ptr addrspace(1) %d)]
   to label %normal_dest unwind label %unwind_dest
 
 normal_dest:
-  %b.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
-  %b.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 1)
-  %d.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 2)
-  %d.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 3)
-  %d.new.3 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 1, i32 2)
-  %d.new.4 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 1, i32 3)
-  store i32 1, i32 addrspace(1)* %b.new.1
-  store i32 1, i32 addrspace(1)* %b.new.2
-  store i32 1, i32 addrspace(1)* %d.new.1
-  store i32 1, i32 addrspace(1)* %d.new.2
-  store i32 1, i32 addrspace(1)* %d.new.3
-  store i32 1, i32 addrspace(1)* %d.new.4
+  %b.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
+  %b.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 1)
+  %d.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 2)
+  %d.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 3)
+  %d.new.3 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 1, i32 2)
+  %d.new.4 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 1, i32 3)
+  store i32 1, ptr addrspace(1) %b.new.1
+  store i32 1, ptr addrspace(1) %b.new.2
+  store i32 1, ptr addrspace(1) %d.new.1
+  store i32 1, ptr addrspace(1) %d.new.2
+  store i32 1, ptr addrspace(1) %d.new.3
+  store i32 1, ptr addrspace(1) %d.new.4
   ret void
 
 unwind_dest:
   %lpad = landingpad token
   cleanup
-  %lpb.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 0)
-  %lpb.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 1)
-  %lpd.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 2)
-  %lpd.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 3)
-  %lpd.new.3 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 1, i32 2)
-  %lpd.new.4 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 1, i32 3)
-  store i32 2, i32 addrspace(1)* %lpb.new.1
-  store i32 2, i32 addrspace(1)* %lpb.new.2
-  store i32 2, i32 addrspace(1)* %lpd.new.1
-  store i32 2, i32 addrspace(1)* %lpd.new.2
-  store i32 2, i32 addrspace(1)* %lpd.new.3
-  store i32 2, i32 addrspace(1)* %lpd.new.4
+  %lpb.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 0)
+  %lpb.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 1)
+  %lpd.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 2)
+  %lpd.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 3)
+  %lpd.new.3 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 1, i32 2)
+  %lpd.new.4 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 1, i32 3)
+  store i32 2, ptr addrspace(1) %lpb.new.1
+  store i32 2, ptr addrspace(1) %lpb.new.2
+  store i32 2, ptr addrspace(1) %lpd.new.1
+  store i32 2, ptr addrspace(1) %lpd.new.2
+  store i32 2, ptr addrspace(1) %lpd.new.3
+  store i32 2, ptr addrspace(1) %lpd.new.4
   ret void
 }
 
-define void @test_no_derived_use_invoke(i32 addrspace(1)* %b) gc "statepoint-example" personality i32* ()* @fake_personality_function {
+define void @test_no_derived_use_invoke(ptr addrspace(1) %b) gc "statepoint-example" personality ptr @fake_personality_function {
 ; CHECK-LABEL: @test_no_derived_use_invoke(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(i32 addrspace(1)* [[B:%.*]]) ]
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(ptr addrspace(1) [[B:%.*]]) ]
 ; CHECK-NEXT:    to label [[NORMAL_DEST:%.*]] unwind label [[UNWIND_DEST:%.*]]
 ; CHECK:       normal_dest:
-; CHECK-NEXT:    [[B_NEW_1:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[B_NEW_1]], align 4
+; CHECK-NEXT:    [[B_NEW_1:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[B_NEW_1]], align 4
 ; CHECK-NEXT:    ret void
 ; CHECK:       unwind_dest:
 ; CHECK-NEXT:    [[LPAD:%.*]] = landingpad token
 ; CHECK-NEXT:    cleanup
-; CHECK-NEXT:    [[LPB_NEW_1:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[LPAD]], i32 0, i32 0)
-; CHECK-NEXT:    store i32 2, i32 addrspace(1)* [[LPB_NEW_1]], align 4
+; CHECK-NEXT:    [[LPB_NEW_1:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[LPAD]], i32 0, i32 0)
+; CHECK-NEXT:    store i32 2, ptr addrspace(1) [[LPB_NEW_1]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %d = getelementptr i32, i32 addrspace(1)* %b, i64 16
-  %safepoint_token = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (i32 addrspace(1)* %b, i32 addrspace(1)* %b, i32 addrspace(1)* %d, i32 addrspace(1)* %d)]
+  %d = getelementptr i32, ptr addrspace(1) %b, i64 16
+  %safepoint_token = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (ptr addrspace(1) %b, ptr addrspace(1) %b, ptr addrspace(1) %d, ptr addrspace(1) %d)]
   to label %normal_dest unwind label %unwind_dest
 
 normal_dest:
-  %b.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
-  %b.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 1)
-  %d.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 2)
-  %d.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 3)
-  %d.new.3 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 1, i32 2)
-  %d.new.4 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 1, i32 3)
-  store i32 1, i32 addrspace(1)* %b.new.1
+  %b.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
+  %b.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 1)
+  %d.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 2)
+  %d.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 3)
+  %d.new.3 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 1, i32 2)
+  %d.new.4 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 1, i32 3)
+  store i32 1, ptr addrspace(1) %b.new.1
   ret void
 
 unwind_dest:
   %lpad = landingpad token
   cleanup
-  %lpb.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 0)
-  %lpb.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 1)
-  %lpd.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 2)
-  %lpd.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 3)
-  %lpd.new.3 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 1, i32 2)
-  %lpd.new.4 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 1, i32 3)
-  store i32 2, i32 addrspace(1)* %lpb.new.1
+  %lpb.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 0)
+  %lpb.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 1)
+  %lpd.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 2)
+  %lpd.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 3)
+  %lpd.new.3 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 1, i32 2)
+  %lpd.new.4 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 1, i32 3)
+  store i32 2, ptr addrspace(1) %lpb.new.1
   ret void
 }
 
-define void @test_no_base_use_invoke(i32 addrspace(1)* %b) gc "statepoint-example" personality i32* ()* @fake_personality_function {
+define void @test_no_base_use_invoke(ptr addrspace(1) %b) gc "statepoint-example" personality ptr @fake_personality_function {
 ; CHECK-LABEL: @test_no_base_use_invoke(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[D:%.*]] = getelementptr i32, i32 addrspace(1)* [[B:%.*]], i64 16
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(i32 addrspace(1)* [[B]], i32 addrspace(1)* [[D]]) ]
+; CHECK-NEXT:    [[D:%.*]] = getelementptr i32, ptr addrspace(1) [[B:%.*]], i64 16
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(ptr addrspace(1) [[B]], ptr addrspace(1) [[D]]) ]
 ; CHECK-NEXT:    to label [[NORMAL_DEST:%.*]] unwind label [[UNWIND_DEST:%.*]]
 ; CHECK:       normal_dest:
-; CHECK-NEXT:    [[D_NEW_1:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
-; CHECK-NEXT:    store i32 1, i32 addrspace(1)* [[D_NEW_1]], align 4
+; CHECK-NEXT:    [[D_NEW_1:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 1)
+; CHECK-NEXT:    store i32 1, ptr addrspace(1) [[D_NEW_1]], align 4
 ; CHECK-NEXT:    ret void
 ; CHECK:       unwind_dest:
 ; CHECK-NEXT:    [[LPAD:%.*]] = landingpad token
 ; CHECK-NEXT:    cleanup
-; CHECK-NEXT:    [[LPD_NEW_1:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[LPAD]], i32 0, i32 1)
-; CHECK-NEXT:    store i32 2, i32 addrspace(1)* [[LPD_NEW_1]], align 4
+; CHECK-NEXT:    [[LPD_NEW_1:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[LPAD]], i32 0, i32 1)
+; CHECK-NEXT:    store i32 2, ptr addrspace(1) [[LPD_NEW_1]], align 4
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %d = getelementptr i32, i32 addrspace(1)* %b, i64 16
-  %safepoint_token = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (i32 addrspace(1)* %b, i32 addrspace(1)* %b, i32 addrspace(1)* %d, i32 addrspace(1)* %d)]
+  %d = getelementptr i32, ptr addrspace(1) %b, i64 16
+  %safepoint_token = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (ptr addrspace(1) %b, ptr addrspace(1) %b, ptr addrspace(1) %d, ptr addrspace(1) %d)]
   to label %normal_dest unwind label %unwind_dest
 
 normal_dest:
-  %b.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
-  %b.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 1)
-  %d.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 2)
-  %d.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 3)
-  %d.new.3 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 1, i32 2)
-  %d.new.4 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 1, i32 3)
-  store i32 1, i32 addrspace(1)* %d.new.1
+  %b.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
+  %b.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 1)
+  %d.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 2)
+  %d.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 3)
+  %d.new.3 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 1, i32 2)
+  %d.new.4 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 1, i32 3)
+  store i32 1, ptr addrspace(1) %d.new.1
   ret void
 
 unwind_dest:
   %lpad = landingpad token
   cleanup
-  %lpb.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 0)
-  %lpb.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 1)
-  %lpd.new.1 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 2)
-  %lpd.new.2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 3)
-  %lpd.new.3 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 1, i32 2)
-  %lpd.new.4 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 1, i32 3)
-  store i32 2, i32 addrspace(1)* %lpd.new.1
+  %lpb.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 0)
+  %lpb.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 1)
+  %lpd.new.1 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 2)
+  %lpd.new.2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 3)
+  %lpd.new.3 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 1, i32 2)
+  %lpd.new.4 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 1, i32 3)
+  store i32 2, ptr addrspace(1) %lpd.new.1
   ret void
 }
 
-declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...)
-declare i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token, i32, i32)
+declare token @llvm.experimental.gc.statepoint.p0(i64, i32, ptr, i32, i32, ...)
+declare ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token, i32, i32)
index 6b6d479b343d3c08acf351a12b0afdec9d351ed2..cc7d9c343c753ea116d38731f8f84c0004dacd46 100644 (file)
@@ -13,10 +13,10 @@ define i1 @test_null(i1 %cond) gc "statepoint-example" {
 ; CHECK:       right:
 ; CHECK-NEXT:    br label [[MERGE:%.*]]
 ; CHECK:       left:
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
 ; CHECK-NEXT:    br label [[MERGE]]
 ; CHECK:       merge:
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN2:%.*]] = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN2:%.*]] = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
 ; CHECK-NEXT:    ret i1 true
 ;
 entry:
@@ -26,30 +26,30 @@ right:
   br label %merge
 
 left:
-  %safepoint_token = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (i32* null)]
-  %pnew = call i32* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
+  %safepoint_token = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (ptr null)]
+  %pnew = call ptr @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
   br label %merge
 
 merge:
-  %pnew_phi = phi i32* [null, %right], [%pnew, %left]
-  %safepoint_token2 = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (i32* %pnew_phi)]
-  %pnew2 = call i32* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token2,  i32 0, i32 0)
-  %cmp = icmp eq i32* %pnew2, null
+  %pnew_phi = phi ptr [null, %right], [%pnew, %left]
+  %safepoint_token2 = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (ptr %pnew_phi)]
+  %pnew2 = call ptr @llvm.experimental.gc.relocate.p1(token %safepoint_token2,  i32 0, i32 0)
+  %cmp = icmp eq ptr %pnew2, null
   ret i1 %cmp
 }
 
-define i32* @test_undef(i1 %cond) gc "statepoint-example" {
+define ptr @test_undef(i1 %cond) gc "statepoint-example" {
 ; CHECK-LABEL: @test_undef(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br i1 [[COND:%.*]], label [[LEFT:%.*]], label [[RIGHT:%.*]]
 ; CHECK:       right:
 ; CHECK-NEXT:    br label [[MERGE:%.*]]
 ; CHECK:       left:
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
 ; CHECK-NEXT:    br label [[MERGE]]
 ; CHECK:       merge:
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN2:%.*]] = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
-; CHECK-NEXT:    ret i32* undef
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN2:%.*]] = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
+; CHECK-NEXT:    ret ptr undef
 ;
 entry:
   br i1 %cond, label %left, label %right
@@ -58,16 +58,16 @@ right:
   br label %merge
 
 left:
-  %safepoint_token = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (i32* undef)]
-  %pnew = call i32* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
+  %safepoint_token = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (ptr undef)]
+  %pnew = call ptr @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
   br label %merge
 
 merge:
-  %pnew_phi = phi i32* [undef, %right], [%pnew, %left]
-  %safepoint_token2 = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (i32* %pnew_phi)]
-  %pnew2 = call i32* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token2,  i32 0, i32 0)
-  ret i32* %pnew2
+  %pnew_phi = phi ptr [undef, %right], [%pnew, %left]
+  %safepoint_token2 = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live" (ptr %pnew_phi)]
+  %pnew2 = call ptr @llvm.experimental.gc.relocate.p1(token %safepoint_token2,  i32 0, i32 0)
+  ret ptr %pnew2
 }
 
-declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...)
-declare i32* @llvm.experimental.gc.relocate.p1i32(token, i32, i32)
+declare token @llvm.experimental.gc.statepoint.p0(i64, i32, ptr, i32, i32, ...)
+declare ptr @llvm.experimental.gc.relocate.p1(token, i32, i32)
index b47c8c13b2809903f2aa130e9cc7c0bf64072e71..29cdc35cc64ef3201393751278cbf8257fb9b836 100644 (file)
@@ -4,99 +4,99 @@
 ; pointers being relocated at a statepoint.
 
 
-declare i32* @fake_personality_function()
+declare ptr @fake_personality_function()
 declare void @func()
 
-define i1 @test_negative(i32 addrspace(1)* %p) gc "statepoint-example" {
+define i1 @test_negative(ptr addrspace(1) %p) gc "statepoint-example" {
 ; CHECK-LABEL: @test_negative(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(i32 addrspace(1)* [[P:%.*]]) ]
-; CHECK-NEXT:    [[PNEW:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 addrspace(1)* [[PNEW]], null
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(ptr addrspace(1) [[P:%.*]]) ]
+; CHECK-NEXT:    [[PNEW:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr addrspace(1) [[PNEW]], null
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ;
 entry:
-  %safepoint_token = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(i32 addrspace(1)* %p)]
-  %pnew = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
-  %cmp = icmp eq i32 addrspace(1)* %pnew, null
+  %safepoint_token = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) %p)]
+  %pnew = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
+  %cmp = icmp eq ptr addrspace(1) %pnew, null
   ret i1 %cmp
 }
 
-define i1 @test_nonnull(i32 addrspace(1)* nonnull %p) gc "statepoint-example" {
+define i1 @test_nonnull(ptr addrspace(1) nonnull %p) gc "statepoint-example" {
 ; CHECK-LABEL: @test_nonnull(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
 ; CHECK-NEXT:    ret i1 false
 ;
 entry:
-  %safepoint_token = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(i32 addrspace(1)* %p)]
-  %pnew = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
-  %cmp = icmp eq i32 addrspace(1)* %pnew, null
+  %safepoint_token = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) %p)]
+  %pnew = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
+  %cmp = icmp eq ptr addrspace(1) %pnew, null
   ret i1 %cmp
 }
 
 define i1 @test_null() gc "statepoint-example" {
 ; CHECK-LABEL: @test_null(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
 ; CHECK-NEXT:    ret i1 true
 ;
 entry:
-  %safepoint_token = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(i32 addrspace(1)* null)]
-  %pnew = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
-  %cmp = icmp eq i32 addrspace(1)* %pnew, null
+  %safepoint_token = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) null)]
+  %pnew = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
+  %cmp = icmp eq ptr addrspace(1) %pnew, null
   ret i1 %cmp
 }
 
 define i1 @test_undef() gc "statepoint-example" {
 ; CHECK-LABEL: @test_undef(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
 ; CHECK-NEXT:    ret i1 undef
 ;
 entry:
-  %safepoint_token = tail call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(i32 addrspace(1)* undef)]
-  %pnew = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
-  %cmp = icmp eq i32 addrspace(1)* %pnew, null
+  %safepoint_token = tail call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) undef)]
+  %pnew = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
+  %cmp = icmp eq ptr addrspace(1) %pnew, null
   ret i1 %cmp
 }
 
-define i1 @test_negative_invoke(i32 addrspace(1)* %p) gc "statepoint-example" personality i32* ()* @fake_personality_function {
+define i1 @test_negative_invoke(ptr addrspace(1) %p) gc "statepoint-example" personality ptr @fake_personality_function {
 ; CHECK-LABEL: @test_negative_invoke(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(i32 addrspace(1)* [[P:%.*]]) ]
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"(ptr addrspace(1) [[P:%.*]]) ]
 ; CHECK-NEXT:    to label [[NORMAL_DEST:%.*]] unwind label [[UNWIND_DEST:%.*]]
 ; CHECK:       normal_dest:
-; CHECK-NEXT:    [[PNEW:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
-; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i32 addrspace(1)* [[PNEW]], null
+; CHECK-NEXT:    [[PNEW:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[SAFEPOINT_TOKEN]], i32 0, i32 0)
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr addrspace(1) [[PNEW]], null
 ; CHECK-NEXT:    ret i1 [[CMP]]
 ; CHECK:       unwind_dest:
 ; CHECK-NEXT:    [[LPAD:%.*]] = landingpad token
 ; CHECK-NEXT:    cleanup
-; CHECK-NEXT:    [[PNEW2:%.*]] = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token [[LPAD]], i32 0, i32 0)
-; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne i32 addrspace(1)* [[PNEW2]], null
+; CHECK-NEXT:    [[PNEW2:%.*]] = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token [[LPAD]], i32 0, i32 0)
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp ne ptr addrspace(1) [[PNEW2]], null
 ; CHECK-NEXT:    ret i1 [[CMP2]]
 ;
 entry:
-  %safepoint_token = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(i32 addrspace(1)* %p)]
+  %safepoint_token = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) %p)]
   to label %normal_dest unwind label %unwind_dest
 
 normal_dest:
-  %pnew = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
-  %cmp = icmp eq i32 addrspace(1)* %pnew, null
+  %pnew = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
+  %cmp = icmp eq ptr addrspace(1) %pnew, null
   ret i1 %cmp
 unwind_dest:
   %lpad = landingpad token
   cleanup
-  %pnew2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 0)
-  %cmp2 = icmp ne i32 addrspace(1)* %pnew2, null
+  %pnew2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 0)
+  %cmp2 = icmp ne ptr addrspace(1) %pnew2, null
   ret i1 %cmp2
 }
 
-define i1 @test_nonnull_invoke(i32 addrspace(1)* nonnull %p) gc "statepoint-example" personality i32* ()* @fake_personality_function {
+define i1 @test_nonnull_invoke(ptr addrspace(1) nonnull %p) gc "statepoint-example" personality ptr @fake_personality_function {
 ; CHECK-LABEL: @test_nonnull_invoke(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
 ; CHECK-NEXT:    to label [[NORMAL_DEST:%.*]] unwind label [[UNWIND_DEST:%.*]]
 ; CHECK:       normal_dest:
 ; CHECK-NEXT:    ret i1 false
@@ -106,25 +106,25 @@ define i1 @test_nonnull_invoke(i32 addrspace(1)* nonnull %p) gc "statepoint-exam
 ; CHECK-NEXT:    ret i1 true
 ;
 entry:
-  %safepoint_token = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(i32 addrspace(1)* %p)]
+  %safepoint_token = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) %p)]
   to label %normal_dest unwind label %unwind_dest
 
 normal_dest:
-  %pnew = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
-  %cmp = icmp eq i32 addrspace(1)* %pnew, null
+  %pnew = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
+  %cmp = icmp eq ptr addrspace(1) %pnew, null
   ret i1 %cmp
 unwind_dest:
   %lpad = landingpad token
   cleanup
-  %pnew2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 0)
-  %cmp2 = icmp ne i32 addrspace(1)* %pnew2, null
+  %pnew2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 0)
+  %cmp2 = icmp ne ptr addrspace(1) %pnew2, null
   ret i1 %cmp2
 }
 
-define i1 @test_null_invoke() gc "statepoint-example" personality i32* ()* @fake_personality_function {
+define i1 @test_null_invoke() gc "statepoint-example" personality ptr @fake_personality_function {
 ; CHECK-LABEL: @test_null_invoke(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
 ; CHECK-NEXT:    to label [[NORMAL_DEST:%.*]] unwind label [[UNWIND_DEST:%.*]]
 ; CHECK:       normal_dest:
 ; CHECK-NEXT:    ret i1 true
@@ -134,25 +134,25 @@ define i1 @test_null_invoke() gc "statepoint-example" personality i32* ()* @fake
 ; CHECK-NEXT:    ret i1 false
 ;
 entry:
-  %safepoint_token = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(i32 addrspace(1)* null)]
+  %safepoint_token = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) null)]
   to label %normal_dest unwind label %unwind_dest
 
 normal_dest:
-  %pnew = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
-  %cmp = icmp eq i32 addrspace(1)* %pnew, null
+  %pnew = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
+  %cmp = icmp eq ptr addrspace(1) %pnew, null
   ret i1 %cmp
 unwind_dest:
   %lpad = landingpad token
   cleanup
-  %pnew2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 0)
-  %cmp2 = icmp ne i32 addrspace(1)* %pnew2, null
+  %pnew2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 0)
+  %cmp2 = icmp ne ptr addrspace(1) %pnew2, null
   ret i1 %cmp2
 }
 
-define i1 @test_undef_invoke() gc "statepoint-example" personality i32* ()* @fake_personality_function {
+define i1 @test_undef_invoke() gc "statepoint-example" personality ptr @fake_personality_function {
 ; CHECK-LABEL: @test_undef_invoke(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
+; CHECK-NEXT:    [[SAFEPOINT_TOKEN:%.*]] = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr nonnull elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) [ "gc-live"() ]
 ; CHECK-NEXT:    to label [[NORMAL_DEST:%.*]] unwind label [[UNWIND_DEST:%.*]]
 ; CHECK:       normal_dest:
 ; CHECK-NEXT:    ret i1 undef
@@ -162,20 +162,20 @@ define i1 @test_undef_invoke() gc "statepoint-example" personality i32* ()* @fak
 ; CHECK-NEXT:    ret i1 undef
 ;
 entry:
-  %safepoint_token = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(i32 addrspace(1)* undef)]
+  %safepoint_token = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @func, i32 0, i32 0, i32 0, i32 0) ["gc-live"(ptr addrspace(1) undef)]
   to label %normal_dest unwind label %unwind_dest
 
 normal_dest:
-  %pnew = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %safepoint_token,  i32 0, i32 0)
-  %cmp = icmp eq i32 addrspace(1)* %pnew, null
+  %pnew = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %safepoint_token,  i32 0, i32 0)
+  %cmp = icmp eq ptr addrspace(1) %pnew, null
   ret i1 %cmp
 unwind_dest:
   %lpad = landingpad token
   cleanup
-  %pnew2 = call i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token %lpad,  i32 0, i32 0)
-  %cmp2 = icmp ne i32 addrspace(1)* %pnew2, null
+  %pnew2 = call ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %lpad,  i32 0, i32 0)
+  %cmp2 = icmp ne ptr addrspace(1) %pnew2, null
   ret i1 %cmp2
 }
 
-declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...)
-declare i32 addrspace(1)* @llvm.experimental.gc.relocate.p1i32(token, i32, i32) #3
+declare token @llvm.experimental.gc.statepoint.p0(i64, i32, ptr, i32, i32, ...)
+declare ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token, i32, i32) #3
index 3fb279335ca854759e93d704dd8216131b66b641..ad5105c942f4ba45d96ed5dfec66705cd4e3ebe3 100644 (file)
@@ -4,7 +4,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -passes=instcombine -opaque-pointers -S | FileCheck %s
 
-declare i32 @fwrite(i8*, i64, i64, ptr)
+declare i32 @fwrite(ptr, i64, i64, ptr)
 declare i8 @fputc(ptr, ptr)
 
 declare void @printf(ptr)
@@ -21,8 +21,7 @@ declare i8 @sprintf(ptr, ptr)
 ; trigger an abort).
 
 define void @call_fwrite(ptr %fp) {
-  %p = getelementptr [1 x i8], ptr @ca1, i32 0, i32 0
-  call i32 @fwrite(ptr %p, i64 1, i64 1, ptr %fp)
+  call i32 @fwrite(ptr @ca1, i64 1, i64 1, ptr %fp)
   ret void
 }
 
@@ -33,8 +32,7 @@ define void @call_fwrite(ptr %fp) {
 define void @call_printf(ptr %s) {
 ; CHECK-LABEL: @call_printf(
 ;
-  %fmt = getelementptr [3 x i8], ptr @pcnt_s, i32 0, i32 0
-  call i32 @printf(ptr %fmt)
+  call i32 @printf(ptr @pcnt_s)
   ret void
 }
 
@@ -44,8 +42,7 @@ define void @call_printf(ptr %s) {
 define i8 @call_fprintf(ptr %fp, ptr %p) {
 ; CHECK-LABEL: @call_fprintf(
 ;
-  %fmt = getelementptr [3 x i8], ptr @pcnt_s, i32 0, i32 0
-  %call = call i8 (ptr, ptr, ...) @fprintf(ptr %fp, ptr %fmt, ptr %p)
+  %call = call i8 (ptr, ptr, ...) @fprintf(ptr %fp, ptr @pcnt_s, ptr %p)
   ret i8 %call
 }
 
@@ -55,8 +52,7 @@ define i8 @call_fprintf(ptr %fp, ptr %p) {
 define i8 @call_sprintf(ptr %p, ptr %q) {
 ; CHECK-LABEL: @call_sprintf(
 ;
-  %fmt = getelementptr [3 x i8], ptr @pcnt_s, i32 0, i32 0
-  %call = call i8 (ptr, ptr, ...) @sprintf(ptr %p, ptr %fmt, ptr %q)
+  %call = call i8 (ptr, ptr, ...) @sprintf(ptr %p, ptr @pcnt_s, ptr %q)
   ret i8 %call
 }
 
index cdeee31705534315e364144a758604f2294bce7e..9fc1f9def943e6ef9e55013d3235ff8c5c994632 100644 (file)
@@ -11,11 +11,10 @@ entry:
   %array = alloca i32, i32 2
   ; CHECK-NOT: %array
 
-  %length_gep = getelementptr inbounds i32, i32 * %array, i32 0
-  %value_gep = getelementptr inbounds i32, i32 * %array, i32 1
-  store i32 %length, i32 * %length_gep
-  store i32 0, i32 * %value_gep
-  %loaded_length = load i32, i32 * %length_gep
+  %value_gep = getelementptr inbounds i32, ptr %array, i32 1
+  store i32 %length, ptr %array
+  store i32 0, ptr %value_gep
+  %loaded_length = load i32, ptr %array
   ; CHECK-NOT: %loaded_length = load i32
 
   ret i32 %loaded_length
index d4e0e0c4e51403cc7f65cd67077682b964f62883..cceea250df39c68ae3a2d1e4a6e2fbc019d9a333 100644 (file)
@@ -3,80 +3,80 @@
 
 ; FIXME: This is technically incorrect because it might overwrite a poison
 ; value. Stop folding it once #52930 is resolved.
-define void @store_of_undef(i32* %P) {
+define void @store_of_undef(ptr %P) {
 ; CHECK-LABEL: @store_of_undef(
 ; CHECK-NEXT:    ret void
 ;
-  store i32 undef, i32* %P
+  store i32 undef, ptr %P
   ret void
 }
 
-define void @store_of_poison(i32* %P) {
+define void @store_of_poison(ptr %P) {
 ; CHECK-LABEL: @store_of_poison(
 ; CHECK-NEXT:    ret void
 ;
-  store i32 poison, i32* %P
+  store i32 poison, ptr %P
   ret void
 }
 
-define void @store_into_undef(i32* %P) {
+define void @store_into_undef(ptr %P) {
 ; CHECK-LABEL: @store_into_undef(
-; CHECK-NEXT:    store i32 123, i32* undef, align 4
+; CHECK-NEXT:    store i32 123, ptr undef, align 4
 ; CHECK-NEXT:    ret void
 ;
-  store i32 123, i32* undef
+  store i32 123, ptr undef
   ret void
 }
 
-define void @store_into_null(i32* %P) {
+define void @store_into_null(ptr %P) {
 ; CHECK-LABEL: @store_into_null(
-; CHECK-NEXT:    store i32 poison, i32* null, align 4294967296
+; CHECK-NEXT:    store i32 poison, ptr null, align 4294967296
 ; CHECK-NEXT:    ret void
 ;
-  store i32 124, i32* null
+  store i32 124, ptr null
   ret void
 }
 
-define void @test2(i32* %P) {
+define void @test2(ptr %P) {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:    ret void
 ;
-  %X = load i32, i32* %P
+  %X = load i32, ptr %P
   %Y = add i32 %X, 0
-  store i32 %Y, i32* %P
+  store i32 %Y, ptr %P
   ret void
 }
 
 define void @store_at_gep_off_null_inbounds(i64 %offset) {
 ; CHECK-LABEL: @store_at_gep_off_null_inbounds(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds i32, i32* null, i64 [[OFFSET:%.*]]
-; CHECK-NEXT:    store i32 poison, i32* [[PTR]], align 4
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds i32, ptr null, i64 [[OFFSET:%.*]]
+; CHECK-NEXT:    store i32 poison, ptr [[PTR]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %ptr = getelementptr inbounds i32, i32 *null, i64 %offset
-  store i32 24, i32* %ptr
+  %ptr = getelementptr inbounds i32, ptr null, i64 %offset
+  store i32 24, ptr %ptr
   ret void
 }
 
 define void @store_at_gep_off_null_not_inbounds(i64 %offset) {
 ; CHECK-LABEL: @store_at_gep_off_null_not_inbounds(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i32, i32* null, i64 [[OFFSET:%.*]]
-; CHECK-NEXT:    store i32 poison, i32* [[PTR]], align 4
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i32, ptr null, i64 [[OFFSET:%.*]]
+; CHECK-NEXT:    store i32 poison, ptr [[PTR]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %ptr = getelementptr i32, i32 *null, i64 %offset
-  store i32 24, i32* %ptr
+  %ptr = getelementptr i32, ptr null, i64 %offset
+  store i32 24, ptr %ptr
   ret void
 }
 
 define void @store_at_gep_off_no_null_opt(i64 %offset) #0 {
 ; CHECK-LABEL: @store_at_gep_off_no_null_opt(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds i32, i32* null, i64 [[OFFSET:%.*]]
-; CHECK-NEXT:    store i32 24, i32* [[PTR]], align 4
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds i32, ptr null, i64 [[OFFSET:%.*]]
+; CHECK-NEXT:    store i32 24, ptr [[PTR]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %ptr = getelementptr inbounds i32, i32 *null, i64 %offset
-  store i32 24, i32* %ptr
+  %ptr = getelementptr inbounds i32, ptr null, i64 %offset
+  store i32 24, ptr %ptr
   ret void
 }
 
@@ -100,15 +100,15 @@ define i32 @test3(i1 %C) {
   br i1 %C, label %Cond, label %Cond2
 
 Cond:
-  store i32 -987654321, i32* %A
+  store i32 -987654321, ptr %A
   br label %Cont
 
 Cond2:
-  store i32 47, i32* %A
+  store i32 47, ptr %A
   br label %Cont
 
 Cont:
-  %V = load i32, i32* %A
+  %V = load i32, ptr %A
   ret i32 %V
 }
 
@@ -123,34 +123,34 @@ define i32 @test4(i1 %C) {
 ; CHECK-NEXT:    ret i32 [[STOREMERGE]]
 ;
   %A = alloca i32
-  store i32 47, i32* %A
+  store i32 47, ptr %A
   br i1 %C, label %Cond, label %Cont
 
 Cond:
-  store i32 -987654321, i32* %A
+  store i32 -987654321, ptr %A
   br label %Cont
 
 Cont:
-  %V = load i32, i32* %A
+  %V = load i32, ptr %A
   ret i32 %V
 }
 
 ; "if then"
-define void @test5(i1 %C, i32* %P) {
+define void @test5(i1 %C, ptr %P) {
 ; CHECK-LABEL: @test5(
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[COND:%.*]], label [[CONT:%.*]]
 ; CHECK:       Cond:
 ; CHECK-NEXT:    br label [[CONT]]
 ; CHECK:       Cont:
 ; CHECK-NEXT:    [[STOREMERGE:%.*]] = phi i32 [ -987654321, [[COND]] ], [ 47, [[TMP0:%.*]] ]
-; CHECK-NEXT:    store i32 [[STOREMERGE]], i32* [[P:%.*]], align 1
+; CHECK-NEXT:    store i32 [[STOREMERGE]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  store i32 47, i32* %P, align 1
+  store i32 47, ptr %P, align 1
   br i1 %C, label %Cond, label %Cont
 
 Cond:
-  store i32 -987654321, i32* %P, align 1
+  store i32 -987654321, ptr %P, align 1
   br label %Cont
 
 Cont:
@@ -159,55 +159,55 @@ Cont:
 
 
 ; PR14753 - merging two stores should preserve the TBAA tag.
-define void @test6(i32 %n, float* %a, i32* %gi) nounwind uwtable ssp {
+define void @test6(i32 %n, ptr %a, ptr %gi) nounwind uwtable ssp {
 ; CHECK-LABEL: @test6(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[FOR_COND:%.*]]
 ; CHECK:       for.cond:
 ; CHECK-NEXT:    [[STOREMERGE:%.*]] = phi i32 [ 42, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY:%.*]] ]
-; CHECK-NEXT:    store i32 [[STOREMERGE]], i32* [[GI:%.*]], align 4, !tbaa [[TBAA0:![0-9]+]]
+; CHECK-NEXT:    store i32 [[STOREMERGE]], ptr [[GI:%.*]], align 4, !tbaa [[TBAA0:![0-9]+]]
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[STOREMERGE]], [[N:%.*]]
 ; CHECK-NEXT:    br i1 [[CMP]], label [[FOR_BODY]], label [[FOR_END:%.*]]
 ; CHECK:       for.body:
 ; CHECK-NEXT:    [[IDXPROM:%.*]] = sext i32 [[STOREMERGE]] to i64
-; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds float, float* [[A:%.*]], i64 [[IDXPROM]]
-; CHECK-NEXT:    store float 0.000000e+00, float* [[ARRAYIDX]], align 4, !tbaa [[TBAA4:![0-9]+]]
-; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* [[GI]], align 4, !tbaa [[TBAA0]]
+; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds float, ptr [[A:%.*]], i64 [[IDXPROM]]
+; CHECK-NEXT:    store float 0.000000e+00, ptr [[ARRAYIDX]], align 4, !tbaa [[TBAA4:![0-9]+]]
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[GI]], align 4, !tbaa [[TBAA0]]
 ; CHECK-NEXT:    [[INC]] = add nsw i32 [[TMP0]], 1
 ; CHECK-NEXT:    br label [[FOR_COND]]
 ; CHECK:       for.end:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  store i32 42, i32* %gi, align 4, !tbaa !0
+  store i32 42, ptr %gi, align 4, !tbaa !0
   br label %for.cond
 
 for.cond:
   %storemerge = phi i32 [ 0, %entry ], [ %inc, %for.body ]
-  %0 = load i32, i32* %gi, align 4, !tbaa !0
+  %0 = load i32, ptr %gi, align 4, !tbaa !0
   %cmp = icmp slt i32 %0, %n
   br i1 %cmp, label %for.body, label %for.end
 
 for.body:
   %idxprom = sext i32 %0 to i64
-  %arrayidx = getelementptr inbounds float, float* %a, i64 %idxprom
-  store float 0.000000e+00, float* %arrayidx, align 4, !tbaa !3
-  %1 = load i32, i32* %gi, align 4, !tbaa !0
+  %arrayidx = getelementptr inbounds float, ptr %a, i64 %idxprom
+  store float 0.000000e+00, ptr %arrayidx, align 4, !tbaa !3
+  %1 = load i32, ptr %gi, align 4, !tbaa !0
   %inc = add nsw i32 %1, 1
-  store i32 %inc, i32* %gi, align 4, !tbaa !0
+  store i32 %inc, ptr %gi, align 4, !tbaa !0
   br label %for.cond
 
 for.end:
   ret void
 }
 
-define void @dse1(i32* %p) {
+define void @dse1(ptr %p) {
 ; CHECK-LABEL: @dse1(
-; CHECK-NEXT:    store i32 0, i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 0, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  store i32 0, i32* %p
-  store i32 0, i32* %p
+  store i32 0, ptr %p
+  store i32 0, ptr %p
   ret void
 }
 
@@ -215,114 +215,114 @@ define void @dse1(i32* %p) {
 ; same location, then the contents of the location are undefined if there's
 ; an actual race.  As such, we're free to pick either store under the
 ; assumption that we're not racing with any other thread.
-define void @dse2(i32* %p) {
+define void @dse2(ptr %p) {
 ; CHECK-LABEL: @dse2(
-; CHECK-NEXT:    store i32 0, i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 0, ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  store atomic i32 0, i32* %p unordered, align 4
-  store i32 0, i32* %p
+  store atomic i32 0, ptr %p unordered, align 4
+  store i32 0, ptr %p
   ret void
 }
 
-define void @dse3(i32* %p) {
+define void @dse3(ptr %p) {
 ; CHECK-LABEL: @dse3(
-; CHECK-NEXT:    store atomic i32 0, i32* [[P:%.*]] unordered, align 4
+; CHECK-NEXT:    store atomic i32 0, ptr [[P:%.*]] unordered, align 4
 ; CHECK-NEXT:    ret void
 ;
-  store i32 0, i32* %p
-  store atomic i32 0, i32* %p unordered, align 4
+  store i32 0, ptr %p
+  store atomic i32 0, ptr %p unordered, align 4
   ret void
 }
 
-define void @dse4(i32* %p) {
+define void @dse4(ptr %p) {
 ; CHECK-LABEL: @dse4(
-; CHECK-NEXT:    store atomic i32 0, i32* [[P:%.*]] unordered, align 4
+; CHECK-NEXT:    store atomic i32 0, ptr [[P:%.*]] unordered, align 4
 ; CHECK-NEXT:    ret void
 ;
-  store atomic i32 0, i32* %p unordered, align 4
-  store atomic i32 0, i32* %p unordered, align 4
+  store atomic i32 0, ptr %p unordered, align 4
+  store atomic i32 0, ptr %p unordered, align 4
   ret void
 }
 
 ; Implementation limit - could remove unordered store here, but
 ; currently don't.
-define void @dse5(i32* %p) {
+define void @dse5(ptr %p) {
 ; CHECK-LABEL: @dse5(
-; CHECK-NEXT:    store atomic i32 0, i32* [[P:%.*]] unordered, align 4
-; CHECK-NEXT:    store atomic i32 0, i32* [[P]] seq_cst, align 4
+; CHECK-NEXT:    store atomic i32 0, ptr [[P:%.*]] unordered, align 4
+; CHECK-NEXT:    store atomic i32 0, ptr [[P]] seq_cst, align 4
 ; CHECK-NEXT:    ret void
 ;
-  store atomic i32 0, i32* %p unordered, align 4
-  store atomic i32 0, i32* %p seq_cst, align 4
+  store atomic i32 0, ptr %p unordered, align 4
+  store atomic i32 0, ptr %p seq_cst, align 4
   ret void
 }
 
-define void @write_back1(i32* %p) {
+define void @write_back1(ptr %p) {
 ; CHECK-LABEL: @write_back1(
 ; CHECK-NEXT:    ret void
 ;
-  %v = load i32, i32* %p
-  store i32 %v, i32* %p
+  %v = load i32, ptr %p
+  store i32 %v, ptr %p
   ret void
 }
 
-define void @write_back2(i32* %p) {
+define void @write_back2(ptr %p) {
 ; CHECK-LABEL: @write_back2(
 ; CHECK-NEXT:    ret void
 ;
-  %v = load atomic i32, i32* %p unordered, align 4
-  store i32 %v, i32* %p
+  %v = load atomic i32, ptr %p unordered, align 4
+  store i32 %v, ptr %p
   ret void
 }
 
-define void @write_back3(i32* %p) {
+define void @write_back3(ptr %p) {
 ; CHECK-LABEL: @write_back3(
 ; CHECK-NEXT:    ret void
 ;
-  %v = load i32, i32* %p
-  store atomic i32 %v, i32* %p unordered, align 4
+  %v = load i32, ptr %p
+  store atomic i32 %v, ptr %p unordered, align 4
   ret void
 }
 
-define void @write_back4(i32* %p) {
+define void @write_back4(ptr %p) {
 ; CHECK-LABEL: @write_back4(
 ; CHECK-NEXT:    ret void
 ;
-  %v = load atomic i32, i32* %p unordered, align 4
-  store atomic i32 %v, i32* %p unordered, align 4
+  %v = load atomic i32, ptr %p unordered, align 4
+  store atomic i32 %v, ptr %p unordered, align 4
   ret void
 }
 
 ; Can't remove store due to ordering side effect
-define void @write_back5(i32* %p) {
+define void @write_back5(ptr %p) {
 ; CHECK-LABEL: @write_back5(
-; CHECK-NEXT:    [[V:%.*]] = load atomic i32, i32* [[P:%.*]] unordered, align 4
-; CHECK-NEXT:    store atomic i32 [[V]], i32* [[P]] seq_cst, align 4
+; CHECK-NEXT:    [[V:%.*]] = load atomic i32, ptr [[P:%.*]] unordered, align 4
+; CHECK-NEXT:    store atomic i32 [[V]], ptr [[P]] seq_cst, align 4
 ; CHECK-NEXT:    ret void
 ;
-  %v = load atomic i32, i32* %p unordered, align 4
-  store atomic i32 %v, i32* %p seq_cst, align 4
+  %v = load atomic i32, ptr %p unordered, align 4
+  store atomic i32 %v, ptr %p seq_cst, align 4
   ret void
 }
 
-define void @write_back6(i32* %p) {
+define void @write_back6(ptr %p) {
 ; CHECK-LABEL: @write_back6(
-; CHECK-NEXT:    [[V:%.*]] = load atomic i32, i32* [[P:%.*]] seq_cst, align 4
+; CHECK-NEXT:    [[V:%.*]] = load atomic i32, ptr [[P:%.*]] seq_cst, align 4
 ; CHECK-NEXT:    ret void
 ;
-  %v = load atomic i32, i32* %p seq_cst, align 4
-  store atomic i32 %v, i32* %p unordered, align 4
+  %v = load atomic i32, ptr %p seq_cst, align 4
+  store atomic i32 %v, ptr %p unordered, align 4
   ret void
 }
 
-define void @write_back7(i32* %p) {
+define void @write_back7(ptr %p) {
 ; CHECK-LABEL: @write_back7(
-; CHECK-NEXT:    [[V:%.*]] = load atomic volatile i32, i32* [[P:%.*]] seq_cst, align 4
+; CHECK-NEXT:    [[V:%.*]] = load atomic volatile i32, ptr [[P:%.*]] seq_cst, align 4
 ; CHECK-NEXT:    ret void
 ;
-  %v = load atomic volatile i32, i32* %p seq_cst, align 4
-  store atomic i32 %v, i32* %p unordered, align 4
+  %v = load atomic volatile i32, ptr %p seq_cst, align 4
+  store atomic i32 %v, ptr %p unordered, align 4
   ret void
 }
 
@@ -332,7 +332,7 @@ define void @store_to_constant() {
 ; CHECK-LABEL: @store_to_constant(
 ; CHECK-NEXT:    ret void
 ;
-  store i32 0, i32* @Unknown
+  store i32 0, ptr @Unknown
   ret void
 }
 
index b952b897719b7489729d85f3baebe6dab5f952e1..a263552f5c182fe49d2673b7cb135c5f0c2281ee 100644 (file)
@@ -9,16 +9,16 @@ entry:
   br i1 %c1, label %lhs, label %rhs
 
 lhs:
-  store i32 1, i32* %baz
+  store i32 1, ptr %baz
   br label %cleanup
 
 rhs:
-  store i32 2, i32* %baz
+  store i32 2, ptr %baz
   br label %cleanup
 
 cleanup:
   ; CHECK: %storemerge = phi i32 [ 2, %rhs ], [ 1, %lhs ], !dbg [[merge_loc:![0-9]+]]
-  %baz.val = load i32, i32* %baz
+  %baz.val = load i32, ptr %baz
   %ret.val = call i32 @escape(i32 %baz.val)
   ret i32 %ret.val
 }
index b36e34ac783a2d35a833ff2bfc1adc145b3aba62..55851ebd894f4537d1adb0b6a62ae5cf870bfd56 100644 (file)
@@ -8,15 +8,13 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @hello = constant [6 x i8] c"hello\00"
 @a = common global [32 x i8] zeroinitializer, align 1
 
-declare i16 @stpcpy(i8*, i8*)
+declare i16 @stpcpy(ptr, ptr)
 
 define void @test_no_simplify1() {
 ; CHECK-LABEL: @test_no_simplify1(
 
-  %dst = getelementptr [32 x i8], [32 x i8]* @a, i32 0, i32 0
-  %src = getelementptr [6 x i8], [6 x i8]* @hello, i32 0, i32 0
 
-  call i16 @stpcpy(i8* %dst, i8* %src)
+  call i16 @stpcpy(ptr @a, ptr @hello)
 ; CHECK: call i16 @stpcpy
   ret void
 }
index 0705dde20de2d0a8cc1f386c96a8e1ead50350c2..8da306a46c250f227adcab1c1e6f24a65d654660 100644 (file)
@@ -10,12 +10,10 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 
 define void @test_no_simplify() {
 ; CHECK-LABEL: @test_no_simplify(
-  %dst = getelementptr inbounds [60 x i16], [60 x i16]* @a, i32 0, i32 0
-  %src = getelementptr inbounds [8 x i8], [8 x i8]* @.str, i32 0, i32 0
 
 ; CHECK-NEXT: call i16 @__strcpy_chk
-  call i16 @__strcpy_chk(i16* %dst, i8* %src, i32 8)
+  call i16 @__strcpy_chk(ptr @a, ptr @.str, i32 8)
   ret void
 }
 
-declare i16 @__strcpy_chk(i16*, i8*, i32)
+declare i16 @__strcpy_chk(ptr, ptr, i32)
index 0ebbc829945013b6031ba1480f24fee03300156a..c504d3ca8c418e6392fed57d5d092aa9a352ac54 100644 (file)
@@ -3,12 +3,12 @@
 ; of constant structs as arguments are folded to constants as expected.
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare i32 @atoi(i8*)
-declare i64 @atol(i8*)
-declare i64 @atoll(i8*)
+declare i32 @atoi(ptr)
+declare i64 @atol(ptr)
+declare i64 @atoll(ptr)
 
-declare i64 @strtol(i8*, i8**, i32)
-declare i64 @strtoll(i8*, i8**, i32)
+declare i64 @strtol(ptr, ptr, i32)
+declare i64 @strtoll(ptr, ptr, i32)
 
 %struct.A = type { [4 x i8], [5 x i8], [7 x i8] }
 
@@ -18,40 +18,38 @@ declare i64 @strtoll(i8*, i8**, i32)
 ; Fold atoi(a[I].M) for constant I in [0, 1] and member M in [a, b]
 ; to a constant.
 
-define void @fold_atoi_member(i32* %pi) {
+define void @fold_atoi_member(ptr %pi) {
 ; CHECK-LABEL: @fold_atoi_member(
-; CHECK-NEXT:    store i32 1, i32* [[PI:%.*]], align 4
-; CHECK-NEXT:    [[PIA0B:%.*]] = getelementptr i32, i32* [[PI]], i64 1
-; CHECK-NEXT:    store i32 12, i32* [[PIA0B]], align 4
-; CHECK-NEXT:    [[PIA1A:%.*]] = getelementptr i32, i32* [[PI]], i64 2
-; CHECK-NEXT:    store i32 123, i32* [[PIA1A]], align 4
-; CHECK-NEXT:    [[PIA1B:%.*]] = getelementptr i32, i32* [[PI]], i64 3
-; CHECK-NEXT:    store i32 1234, i32* [[PIA1B]], align 4
+; CHECK-NEXT:    store i32 1, ptr [[PI:%.*]], align 4
+; CHECK-NEXT:    [[PIA0B:%.*]] = getelementptr i32, ptr [[PI]], i64 1
+; CHECK-NEXT:    store i32 12, ptr [[PIA0B]], align 4
+; CHECK-NEXT:    [[PIA1A:%.*]] = getelementptr i32, ptr [[PI]], i64 2
+; CHECK-NEXT:    store i32 123, ptr [[PIA1A]], align 4
+; CHECK-NEXT:    [[PIA1B:%.*]] = getelementptr i32, ptr [[PI]], i64 3
+; CHECK-NEXT:    store i32 1234, ptr [[PIA1B]], align 4
 ; CHECK-NEXT:    ret void
 ;
 ; Fold atoi(a[0].a) to 1.
-  %pa0a = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 0, i64 0
-  %ia0a = call i32 @atoi(i8* %pa0a)
-  %pia0a = getelementptr i32, i32* %pi, i32 0
-  store i32 %ia0a, i32* %pia0a
+  %ia0a = call i32 @atoi(ptr @a)
+  store i32 %ia0a, ptr %pi
 
 ; Fold atoi(a[0].b) to 12.
-  %pa0b = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 1, i64 0
-  %ia0b = call i32 @atoi(i8* %pa0b)
-  %pia0b = getelementptr i32, i32* %pi, i32 1
-  store i32 %ia0b, i32* %pia0b
+  %pa0b = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 1, i64 0
+  %ia0b = call i32 @atoi(ptr %pa0b)
+  %pia0b = getelementptr i32, ptr %pi, i32 1
+  store i32 %ia0b, ptr %pia0b
 
 ; Fold atoi(a[1].a) to 123.
-  %pa1a = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 0, i64 0
-  %ia1a = call i32 @atoi(i8* %pa1a)
-  %pia1a = getelementptr i32, i32* %pi, i32 2
-  store i32 %ia1a, i32* %pia1a
+  %pa1a = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 0, i64 0
+  %ia1a = call i32 @atoi(ptr %pa1a)
+  %pia1a = getelementptr i32, ptr %pi, i32 2
+  store i32 %ia1a, ptr %pia1a
 
 ; Fold atoi(a[1].b) to 1234.
-  %pa1b = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 1, i64 0
-  %ia1b = call i32 @atoi(i8* %pa1b)
-  %pia1b = getelementptr i32, i32* %pi, i32 3
-  store i32 %ia1b, i32* %pia1b
+  %pa1b = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 1, i64 0
+  %ia1b = call i32 @atoi(ptr %pa1b)
+  %pia1b = getelementptr i32, ptr %pi, i32 3
+  store i32 %ia1b, ptr %pia1b
 
   ret void
 }
@@ -66,20 +64,18 @@ define void @fold_atoi_member(i32* %pi) {
 ; the undefined calls the folder would have to differentiate between
 ; the empty string an out-of-bounds pointer.
 
-define void @fold_atoi_offset_out_of_bounds(i32* %pi) {
+define void @fold_atoi_offset_out_of_bounds(ptr %pi) {
 ; CHECK-LABEL: @fold_atoi_offset_out_of_bounds(
 ; TODO: Check folding.
 ;
 ; Fold atoi((const char*)a + sizeof a) to zero.
-  %ia_0_0_32 = call i32 @atoi(i8* getelementptr inbounds ([2 x %struct.A], [2 x %struct.A]* @a, i64 1, i64 0, i32 0, i64 0))
-  %pia_0_0_32 = getelementptr i32, i32* %pi, i32 0
-  store i32 %ia_0_0_32, i32* %pia_0_0_32
+  %ia_0_0_32 = call i32 @atoi(ptr getelementptr inbounds ([2 x %struct.A], ptr @a, i64 1, i64 0, i32 0, i64 0))
+  store i32 %ia_0_0_32, ptr %pi
 
 ; Likewise, fold atoi((const char*)a + sizeof a + 1) to zero.
-  %pa_0_0_33 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 0, i64 33
-  %ia_0_0_33 = call i32 @atoi(i8* %pa_0_0_33)
-  %pia_0_0_33 = getelementptr i32, i32* %pi, i32 0
-  store i32 %ia_0_0_33, i32* %pia_0_0_33
+  %pa_0_0_33 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 0, i64 33
+  %ia_0_0_33 = call i32 @atoi(ptr %pa_0_0_33)
+  store i32 %ia_0_0_33, ptr %pi
 
   ret void
 }
@@ -88,56 +84,54 @@ define void @fold_atoi_offset_out_of_bounds(i32* %pi) {
 ; Fold atol(a[I].M) for constant I in [0, 1] and member M in [a, b, c]
 ; to a constant.
 
-define void @fold_atol_member(i64* %pi) {
+define void @fold_atol_member(ptr %pi) {
 ; CHECK-LABEL: @fold_atol_member(
-; CHECK-NEXT:    store i64 1, i64* [[PI:%.*]], align 4
-; CHECK-NEXT:    [[PIA0B:%.*]] = getelementptr i64, i64* [[PI]], i64 1
-; CHECK-NEXT:    store i64 12, i64* [[PIA0B]], align 4
-; CHECK-NEXT:    [[PIA0C:%.*]] = getelementptr i64, i64* [[PI]], i64 2
-; CHECK-NEXT:    store i64 56789, i64* [[PIA0C]], align 4
-; CHECK-NEXT:    [[PIA1A:%.*]] = getelementptr i64, i64* [[PI]], i64 3
-; CHECK-NEXT:    store i64 123, i64* [[PIA1A]], align 4
-; CHECK-NEXT:    [[PIA1B:%.*]] = getelementptr i64, i64* [[PI]], i64 4
-; CHECK-NEXT:    store i64 1234, i64* [[PIA1B]], align 4
-; CHECK-NEXT:    [[PIA1C:%.*]] = getelementptr i64, i64* [[PI]], i64 5
-; CHECK-NEXT:    store i64 67890, i64* [[PIA1C]], align 4
+; CHECK-NEXT:    store i64 1, ptr [[PI:%.*]], align 4
+; CHECK-NEXT:    [[PIA0B:%.*]] = getelementptr i64, ptr [[PI]], i64 1
+; CHECK-NEXT:    store i64 12, ptr [[PIA0B]], align 4
+; CHECK-NEXT:    [[PIA0C:%.*]] = getelementptr i64, ptr [[PI]], i64 2
+; CHECK-NEXT:    store i64 56789, ptr [[PIA0C]], align 4
+; CHECK-NEXT:    [[PIA1A:%.*]] = getelementptr i64, ptr [[PI]], i64 3
+; CHECK-NEXT:    store i64 123, ptr [[PIA1A]], align 4
+; CHECK-NEXT:    [[PIA1B:%.*]] = getelementptr i64, ptr [[PI]], i64 4
+; CHECK-NEXT:    store i64 1234, ptr [[PIA1B]], align 4
+; CHECK-NEXT:    [[PIA1C:%.*]] = getelementptr i64, ptr [[PI]], i64 5
+; CHECK-NEXT:    store i64 67890, ptr [[PIA1C]], align 4
 ; CHECK-NEXT:    ret void
 ;
 ; Fold atol(a[0].a) to 1.
-  %pa0a = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 0, i64 0
-  %ia0a = call i64 @atol(i8* %pa0a)
-  %pia0a = getelementptr i64, i64* %pi, i32 0
-  store i64 %ia0a, i64* %pia0a
+  %ia0a = call i64 @atol(ptr @a)
+  store i64 %ia0a, ptr %pi
 
 ; Fold atol(a[0].b) to 12.
-  %pa0b = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 1, i64 0
-  %ia0b = call i64 @atol(i8* %pa0b)
-  %pia0b = getelementptr i64, i64* %pi, i32 1
-  store i64 %ia0b, i64* %pia0b
+  %pa0b = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 1, i64 0
+  %ia0b = call i64 @atol(ptr %pa0b)
+  %pia0b = getelementptr i64, ptr %pi, i32 1
+  store i64 %ia0b, ptr %pia0b
 
 ; Fold atol(a[0].c) to 56789.
-  %pa0c = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 2, i64 0
-  %ia0c = call i64 @atol(i8* %pa0c)
-  %pia0c = getelementptr i64, i64* %pi, i32 2
-  store i64 %ia0c, i64* %pia0c
+  %pa0c = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 2, i64 0
+  %ia0c = call i64 @atol(ptr %pa0c)
+  %pia0c = getelementptr i64, ptr %pi, i32 2
+  store i64 %ia0c, ptr %pia0c
 
 ; Fold atol(a[1].a) to 123.
-  %pa1a = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 0, i64 0
-  %ia1a = call i64 @atol(i8* %pa1a)
-  %pia1a = getelementptr i64, i64* %pi, i32 3
-  store i64 %ia1a, i64* %pia1a
+  %pa1a = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 0, i64 0
+  %ia1a = call i64 @atol(ptr %pa1a)
+  %pia1a = getelementptr i64, ptr %pi, i32 3
+  store i64 %ia1a, ptr %pia1a
 
 ; Fold atol(a[1].b) to 1234.
-  %pa1b = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 1, i64 0
-  %ia1b = call i64 @atol(i8* %pa1b)
-  %pia1b = getelementptr i64, i64* %pi, i32 4
-  store i64 %ia1b, i64* %pia1b
+  %pa1b = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 1, i64 0
+  %ia1b = call i64 @atol(ptr %pa1b)
+  %pia1b = getelementptr i64, ptr %pi, i32 4
+  store i64 %ia1b, ptr %pia1b
 
 ; Fold atol(a[1].c) to 67890.
-  %pa1c = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 2, i64 0
-  %ia1c = call i64 @atol(i8* %pa1c)
-  %pia1c = getelementptr i64, i64* %pi, i32 5
-  store i64 %ia1c, i64* %pia1c
+  %pa1c = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 2, i64 0
+  %ia1c = call i64 @atol(ptr %pa1c)
+  %pia1c = getelementptr i64, ptr %pi, i32 5
+  store i64 %ia1c, ptr %pia1c
 
   ret void
 }
@@ -146,56 +140,54 @@ define void @fold_atol_member(i64* %pi) {
 ; Fold atoll(a[I].M + C) for constant I in [0, 1], member M in [a, b, c],
 ; and C in a valid range to a constant.
 
-define void @fold_atoll_member_pC(i64* %pi) {
+define void @fold_atoll_member_pC(ptr %pi) {
 ; CHECK-LABEL: @fold_atoll_member_pC(
-; CHECK-NEXT:    store i64 1, i64* [[PI:%.*]], align 4
-; CHECK-NEXT:    [[PIA0BP1:%.*]] = getelementptr i64, i64* [[PI]], i64 1
-; CHECK-NEXT:    store i64 2, i64* [[PIA0BP1]], align 4
-; CHECK-NEXT:    [[PIA0CP3:%.*]] = getelementptr i64, i64* [[PI]], i64 2
-; CHECK-NEXT:    store i64 89, i64* [[PIA0CP3]], align 4
-; CHECK-NEXT:    [[PIA1AP2:%.*]] = getelementptr i64, i64* [[PI]], i64 3
-; CHECK-NEXT:    store i64 3, i64* [[PIA1AP2]], align 4
-; CHECK-NEXT:    [[PIA1BP3:%.*]] = getelementptr i64, i64* [[PI]], i64 4
-; CHECK-NEXT:    store i64 4, i64* [[PIA1BP3]], align 4
-; CHECK-NEXT:    [[PIA1CP4:%.*]] = getelementptr i64, i64* [[PI]], i64 5
-; CHECK-NEXT:    store i64 0, i64* [[PIA1CP4]], align 4
+; CHECK-NEXT:    store i64 1, ptr [[PI:%.*]], align 4
+; CHECK-NEXT:    [[PIA0BP1:%.*]] = getelementptr i64, ptr [[PI]], i64 1
+; CHECK-NEXT:    store i64 2, ptr [[PIA0BP1]], align 4
+; CHECK-NEXT:    [[PIA0CP3:%.*]] = getelementptr i64, ptr [[PI]], i64 2
+; CHECK-NEXT:    store i64 89, ptr [[PIA0CP3]], align 4
+; CHECK-NEXT:    [[PIA1AP2:%.*]] = getelementptr i64, ptr [[PI]], i64 3
+; CHECK-NEXT:    store i64 3, ptr [[PIA1AP2]], align 4
+; CHECK-NEXT:    [[PIA1BP3:%.*]] = getelementptr i64, ptr [[PI]], i64 4
+; CHECK-NEXT:    store i64 4, ptr [[PIA1BP3]], align 4
+; CHECK-NEXT:    [[PIA1CP4:%.*]] = getelementptr i64, ptr [[PI]], i64 5
+; CHECK-NEXT:    store i64 0, ptr [[PIA1CP4]], align 4
 ; CHECK-NEXT:    ret void
 ;
 ; Fold atoll(a[0].a) to 1.
-  %pa0a = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 0, i64 0
-  %ia0a = call i64 @atol(i8* %pa0a)
-  %pia0a = getelementptr i64, i64* %pi, i32 0
-  store i64 %ia0a, i64* %pia0a
+  %ia0a = call i64 @atol(ptr @a)
+  store i64 %ia0a, ptr %pi
 
 ; Fold atoll(a[0].b + 1) to 2.
-  %pa0bp1 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 1, i64 1
-  %ia0bp1 = call i64 @atol(i8* %pa0bp1)
-  %pia0bp1 = getelementptr i64, i64* %pi, i32 1
-  store i64 %ia0bp1, i64* %pia0bp1
+  %pa0bp1 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 1, i64 1
+  %ia0bp1 = call i64 @atol(ptr %pa0bp1)
+  %pia0bp1 = getelementptr i64, ptr %pi, i32 1
+  store i64 %ia0bp1, ptr %pia0bp1
 
 ; Fold atoll(a[0].c + 3) to 89.
-  %pa0cp3 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 2, i64 3
-  %ia0cp3 = call i64 @atol(i8* %pa0cp3)
-  %pia0cp3 = getelementptr i64, i64* %pi, i32 2
-  store i64 %ia0cp3, i64* %pia0cp3
+  %pa0cp3 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 2, i64 3
+  %ia0cp3 = call i64 @atol(ptr %pa0cp3)
+  %pia0cp3 = getelementptr i64, ptr %pi, i32 2
+  store i64 %ia0cp3, ptr %pia0cp3
 
 ; Fold atoll(a[1].a + 2) to 3.
-  %pa1ap2 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 0, i64 2
-  %ia1ap2 = call i64 @atol(i8* %pa1ap2)
-  %pia1ap2 = getelementptr i64, i64* %pi, i32 3
-  store i64 %ia1ap2, i64* %pia1ap2
+  %pa1ap2 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 0, i64 2
+  %ia1ap2 = call i64 @atol(ptr %pa1ap2)
+  %pia1ap2 = getelementptr i64, ptr %pi, i32 3
+  store i64 %ia1ap2, ptr %pia1ap2
 
 ; Fold atoll(a[1].b + 3) to 4.
-  %pa1bp3 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 1, i64 3
-  %ia1bp3 = call i64 @atol(i8* %pa1bp3)
-  %pia1bp3 = getelementptr i64, i64* %pi, i32 4
-  store i64 %ia1bp3, i64* %pia1bp3
+  %pa1bp3 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 1, i64 3
+  %ia1bp3 = call i64 @atol(ptr %pa1bp3)
+  %pia1bp3 = getelementptr i64, ptr %pi, i32 4
+  store i64 %ia1bp3, ptr %pia1bp3
 
 ; Fold atoll(a[1].c + 4) to 0.
-  %pa1cp4 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 2, i64 4
-  %ia1cp4 = call i64 @atol(i8* %pa1cp4)
-  %pia1cp4 = getelementptr i64, i64* %pi, i32 5
-  store i64 %ia1cp4, i64* %pia1cp4
+  %pa1cp4 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 2, i64 4
+  %ia1cp4 = call i64 @atol(ptr %pa1cp4)
+  %pia1cp4 = getelementptr i64, ptr %pi, i32 5
+  store i64 %ia1cp4, ptr %pia1cp4
 
   ret void
 }
@@ -204,56 +196,54 @@ define void @fold_atoll_member_pC(i64* %pi) {
 ; Fold strtol(a[I].M + C, 0, 0) for constant I in [0, 1], member M in [a, b, c],
 ; and C in a valid range to a constant.
 
-define void @fold_strtol_member_pC(i64* %pi) {
+define void @fold_strtol_member_pC(ptr %pi) {
 ; CHECK-LABEL: @fold_strtol_member_pC(
-; CHECK-NEXT:    store i64 1, i64* [[PI:%.*]], align 4
-; CHECK-NEXT:    [[PIA0BP1:%.*]] = getelementptr i64, i64* [[PI]], i64 1
-; CHECK-NEXT:    store i64 2, i64* [[PIA0BP1]], align 4
-; CHECK-NEXT:    [[PIA0CP3:%.*]] = getelementptr i64, i64* [[PI]], i64 2
-; CHECK-NEXT:    store i64 89, i64* [[PIA0CP3]], align 4
-; CHECK-NEXT:    [[PIA1AP2:%.*]] = getelementptr i64, i64* [[PI]], i64 3
-; CHECK-NEXT:    store i64 3, i64* [[PIA1AP2]], align 4
-; CHECK-NEXT:    [[PIA1BP3:%.*]] = getelementptr i64, i64* [[PI]], i64 4
-; CHECK-NEXT:    store i64 4, i64* [[PIA1BP3]], align 4
-; CHECK-NEXT:    [[PIA1CP4:%.*]] = getelementptr i64, i64* [[PI]], i64 5
-; CHECK-NEXT:    store i64 0, i64* [[PIA1CP4]], align 4
+; CHECK-NEXT:    store i64 1, ptr [[PI:%.*]], align 4
+; CHECK-NEXT:    [[PIA0BP1:%.*]] = getelementptr i64, ptr [[PI]], i64 1
+; CHECK-NEXT:    store i64 2, ptr [[PIA0BP1]], align 4
+; CHECK-NEXT:    [[PIA0CP3:%.*]] = getelementptr i64, ptr [[PI]], i64 2
+; CHECK-NEXT:    store i64 89, ptr [[PIA0CP3]], align 4
+; CHECK-NEXT:    [[PIA1AP2:%.*]] = getelementptr i64, ptr [[PI]], i64 3
+; CHECK-NEXT:    store i64 3, ptr [[PIA1AP2]], align 4
+; CHECK-NEXT:    [[PIA1BP3:%.*]] = getelementptr i64, ptr [[PI]], i64 4
+; CHECK-NEXT:    store i64 4, ptr [[PIA1BP3]], align 4
+; CHECK-NEXT:    [[PIA1CP4:%.*]] = getelementptr i64, ptr [[PI]], i64 5
+; CHECK-NEXT:    store i64 0, ptr [[PIA1CP4]], align 4
 ; CHECK-NEXT:    ret void
 ;
 ; Fold strtol(a[0].a, 0, 0) to 1.
-  %pa0a = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 0, i64 0
-  %ia0a = call i64 @strtol(i8* %pa0a, i8** null, i32 0)
-  %pia0a = getelementptr i64, i64* %pi, i32 0
-  store i64 %ia0a, i64* %pia0a
-
-; Fold strtol(a[0].b + 1, 0, 0, i8** null, i32 0) to 2.
-  %pa0bp1 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 1, i64 1
-  %ia0bp1 = call i64 @strtol(i8* %pa0bp1, i8** null, i32 0)
-  %pia0bp1 = getelementptr i64, i64* %pi, i32 1
-  store i64 %ia0bp1, i64* %pia0bp1
-
-; Fold strtol(a[0].c + 3, 0, 0, i8** null, i32 0) to 89.
-  %pa0cp3 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 2, i64 3
-  %ia0cp3 = call i64 @strtol(i8* %pa0cp3, i8** null, i32 0)
-  %pia0cp3 = getelementptr i64, i64* %pi, i32 2
-  store i64 %ia0cp3, i64* %pia0cp3
-
-; Fold strtol(a[1].a + 2, 0, 0, i8** null, i32 0) to 3.
-  %pa1ap2 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 0, i64 2
-  %ia1ap2 = call i64 @strtol(i8* %pa1ap2, i8** null, i32 0)
-  %pia1ap2 = getelementptr i64, i64* %pi, i32 3
-  store i64 %ia1ap2, i64* %pia1ap2
-
-; Fold strtol(a[1].b + 3, 0, 0, i8** null, i32 0) to 4.
-  %pa1bp3 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 1, i64 3
-  %ia1bp3 = call i64 @strtol(i8* %pa1bp3, i8** null, i32 0)
-  %pia1bp3 = getelementptr i64, i64* %pi, i32 4
-  store i64 %ia1bp3, i64* %pia1bp3
-
-; Fold strtol(a[1].c + 4, 0, 0, i8** null, i32 0) to 0.
-  %pa1cp4 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 2, i64 4
-  %ia1cp4 = call i64 @strtol(i8* %pa1cp4, i8** null, i32 0)
-  %pia1cp4 = getelementptr i64, i64* %pi, i32 5
-  store i64 %ia1cp4, i64* %pia1cp4
+  %ia0a = call i64 @strtol(ptr @a, ptr null, i32 0)
+  store i64 %ia0a, ptr %pi
+
+; Fold strtol(a[0].b + 1, 0, 0, ptr null, i32 0) to 2.
+  %pa0bp1 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 1, i64 1
+  %ia0bp1 = call i64 @strtol(ptr %pa0bp1, ptr null, i32 0)
+  %pia0bp1 = getelementptr i64, ptr %pi, i32 1
+  store i64 %ia0bp1, ptr %pia0bp1
+
+; Fold strtol(a[0].c + 3, 0, 0, ptr null, i32 0) to 89.
+  %pa0cp3 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 2, i64 3
+  %ia0cp3 = call i64 @strtol(ptr %pa0cp3, ptr null, i32 0)
+  %pia0cp3 = getelementptr i64, ptr %pi, i32 2
+  store i64 %ia0cp3, ptr %pia0cp3
+
+; Fold strtol(a[1].a + 2, 0, 0, ptr null, i32 0) to 3.
+  %pa1ap2 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 0, i64 2
+  %ia1ap2 = call i64 @strtol(ptr %pa1ap2, ptr null, i32 0)
+  %pia1ap2 = getelementptr i64, ptr %pi, i32 3
+  store i64 %ia1ap2, ptr %pia1ap2
+
+; Fold strtol(a[1].b + 3, 0, 0, ptr null, i32 0) to 4.
+  %pa1bp3 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 1, i64 3
+  %ia1bp3 = call i64 @strtol(ptr %pa1bp3, ptr null, i32 0)
+  %pia1bp3 = getelementptr i64, ptr %pi, i32 4
+  store i64 %ia1bp3, ptr %pia1bp3
+
+; Fold strtol(a[1].c + 4, 0, 0, ptr null, i32 0) to 0.
+  %pa1cp4 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 2, i64 4
+  %ia1cp4 = call i64 @strtol(ptr %pa1cp4, ptr null, i32 0)
+  %pia1cp4 = getelementptr i64, ptr %pi, i32 5
+  store i64 %ia1cp4, ptr %pia1cp4
 
   ret void
 }
@@ -262,56 +252,54 @@ define void @fold_strtol_member_pC(i64* %pi) {
 ; Fold strtoll(a[I].M + C, 0, 0) for constant I in [0, 1], member M
 ; in [a, b, c], and C in a valid range to a constant.
 
-define void @fold_strtoll_member_pC(i64* %pi) {
+define void @fold_strtoll_member_pC(ptr %pi) {
 ; CHECK-LABEL: @fold_strtoll_member_pC(
-; CHECK-NEXT:    store i64 1, i64* [[PI:%.*]], align 4
-; CHECK-NEXT:    [[PIA0BP1:%.*]] = getelementptr i64, i64* [[PI]], i64 1
-; CHECK-NEXT:    store i64 2, i64* [[PIA0BP1]], align 4
-; CHECK-NEXT:    [[PIA0CP3:%.*]] = getelementptr i64, i64* [[PI]], i64 2
-; CHECK-NEXT:    store i64 89, i64* [[PIA0CP3]], align 4
-; CHECK-NEXT:    [[PIA1AP2:%.*]] = getelementptr i64, i64* [[PI]], i64 3
-; CHECK-NEXT:    store i64 3, i64* [[PIA1AP2]], align 4
-; CHECK-NEXT:    [[PIA1BP3:%.*]] = getelementptr i64, i64* [[PI]], i64 4
-; CHECK-NEXT:    store i64 4, i64* [[PIA1BP3]], align 4
-; CHECK-NEXT:    [[PIA1CP4:%.*]] = getelementptr i64, i64* [[PI]], i64 5
-; CHECK-NEXT:    store i64 0, i64* [[PIA1CP4]], align 4
+; CHECK-NEXT:    store i64 1, ptr [[PI:%.*]], align 4
+; CHECK-NEXT:    [[PIA0BP1:%.*]] = getelementptr i64, ptr [[PI]], i64 1
+; CHECK-NEXT:    store i64 2, ptr [[PIA0BP1]], align 4
+; CHECK-NEXT:    [[PIA0CP3:%.*]] = getelementptr i64, ptr [[PI]], i64 2
+; CHECK-NEXT:    store i64 89, ptr [[PIA0CP3]], align 4
+; CHECK-NEXT:    [[PIA1AP2:%.*]] = getelementptr i64, ptr [[PI]], i64 3
+; CHECK-NEXT:    store i64 3, ptr [[PIA1AP2]], align 4
+; CHECK-NEXT:    [[PIA1BP3:%.*]] = getelementptr i64, ptr [[PI]], i64 4
+; CHECK-NEXT:    store i64 4, ptr [[PIA1BP3]], align 4
+; CHECK-NEXT:    [[PIA1CP4:%.*]] = getelementptr i64, ptr [[PI]], i64 5
+; CHECK-NEXT:    store i64 0, ptr [[PIA1CP4]], align 4
 ; CHECK-NEXT:    ret void
 ;
 ; Fold strtoll(a[0].a, 0, 0) to 1.
-  %pa0a = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 0, i64 0
-  %ia0a = call i64 @strtoll(i8* %pa0a, i8** null, i32 0)
-  %pia0a = getelementptr i64, i64* %pi, i32 0
-  store i64 %ia0a, i64* %pia0a
-
-; Fold strtoll(a[0].b + 1, 0, 0, i8** null, i32 0) to 2.
-  %pa0bp1 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 1, i64 1
-  %ia0bp1 = call i64 @strtoll(i8* %pa0bp1, i8** null, i32 0)
-  %pia0bp1 = getelementptr i64, i64* %pi, i32 1
-  store i64 %ia0bp1, i64* %pia0bp1
-
-; Fold strtoll(a[0].c + 3, 0, 0, i8** null, i32 0) to 89.
-  %pa0cp3 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 2, i64 3
-  %ia0cp3 = call i64 @strtoll(i8* %pa0cp3, i8** null, i32 0)
-  %pia0cp3 = getelementptr i64, i64* %pi, i32 2
-  store i64 %ia0cp3, i64* %pia0cp3
-
-; Fold strtoll(a[1].a + 2, 0, 0, i8** null, i32 0) to 3.
-  %pa1ap2 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 0, i64 2
-  %ia1ap2 = call i64 @strtoll(i8* %pa1ap2, i8** null, i32 0)
-  %pia1ap2 = getelementptr i64, i64* %pi, i32 3
-  store i64 %ia1ap2, i64* %pia1ap2
-
-; Fold strtoll(a[1].b + 3, 0, 0, i8** null, i32 0) to 4.
-  %pa1bp3 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 1, i64 3
-  %ia1bp3 = call i64 @strtoll(i8* %pa1bp3, i8** null, i32 0)
-  %pia1bp3 = getelementptr i64, i64* %pi, i32 4
-  store i64 %ia1bp3, i64* %pia1bp3
-
-; Fold strtoll(a[1].c + 4, 0, 0, i8** null, i32 0) to 0.
-  %pa1cp4 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 2, i64 4
-  %ia1cp4 = call i64 @strtoll(i8* %pa1cp4, i8** null, i32 0)
-  %pia1cp4 = getelementptr i64, i64* %pi, i32 5
-  store i64 %ia1cp4, i64* %pia1cp4
+  %ia0a = call i64 @strtoll(ptr @a, ptr null, i32 0)
+  store i64 %ia0a, ptr %pi
+
+; Fold strtoll(a[0].b + 1, 0, 0, ptr null, i32 0) to 2.
+  %pa0bp1 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 1, i64 1
+  %ia0bp1 = call i64 @strtoll(ptr %pa0bp1, ptr null, i32 0)
+  %pia0bp1 = getelementptr i64, ptr %pi, i32 1
+  store i64 %ia0bp1, ptr %pia0bp1
+
+; Fold strtoll(a[0].c + 3, 0, 0, ptr null, i32 0) to 89.
+  %pa0cp3 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 2, i64 3
+  %ia0cp3 = call i64 @strtoll(ptr %pa0cp3, ptr null, i32 0)
+  %pia0cp3 = getelementptr i64, ptr %pi, i32 2
+  store i64 %ia0cp3, ptr %pia0cp3
+
+; Fold strtoll(a[1].a + 2, 0, 0, ptr null, i32 0) to 3.
+  %pa1ap2 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 0, i64 2
+  %ia1ap2 = call i64 @strtoll(ptr %pa1ap2, ptr null, i32 0)
+  %pia1ap2 = getelementptr i64, ptr %pi, i32 3
+  store i64 %ia1ap2, ptr %pia1ap2
+
+; Fold strtoll(a[1].b + 3, 0, 0, ptr null, i32 0) to 4.
+  %pa1bp3 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 1, i64 3
+  %ia1bp3 = call i64 @strtoll(ptr %pa1bp3, ptr null, i32 0)
+  %pia1bp3 = getelementptr i64, ptr %pi, i32 4
+  store i64 %ia1bp3, ptr %pia1bp3
+
+; Fold strtoll(a[1].c + 4, 0, 0, ptr null, i32 0) to 0.
+  %pa1cp4 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 2, i64 4
+  %ia1cp4 = call i64 @strtoll(ptr %pa1cp4, ptr null, i32 0)
+  %pia1cp4 = getelementptr i64, ptr %pi, i32 5
+  store i64 %ia1cp4, ptr %pia1cp4
 
   ret void
 }
index c842084f106f3b9c52c8859307c78bddca501605..8e92338fa360f969a23b6d9e5b8b0717a8329006 100644 (file)
@@ -22,17 +22,15 @@ define void @call_bad_ato(ptr %ps) {
 ; CHECK-NEXT:    store ptr [[LLR]], ptr [[PS2]], align 8
 ; CHECK-NEXT:    ret void
 ;
-  %p = getelementptr [2 x i8], [2 x i8]* @a, i32 0, i32 0
 
-  %ir = call ptr @atoi(ptr %p)
-  %ps0 = getelementptr ptr, ptr %ps, i32 0
-  store ptr %ir, ptr %ps0
+  %ir = call ptr @atoi(ptr @a)
+  store ptr %ir, ptr %ps
 
-  %lr = call ptr @atol(ptr %p)
+  %lr = call ptr @atol(ptr @a)
   %ps1 = getelementptr ptr, ptr %ps, i32 1
   store ptr %lr, ptr %ps1
 
-  %llr = call ptr @atol(ptr %p)
+  %llr = call ptr @atol(ptr @a)
   %ps2 = getelementptr ptr, ptr %ps, i32 2
   store ptr %llr, ptr %ps2
 
@@ -47,9 +45,8 @@ define ptr @call_bad_strncasecmp() {
 ; CHECK-NEXT:    [[CMP:%.*]] = call ptr @strncasecmp(ptr nonnull @a, ptr getelementptr inbounds ([2 x i8], ptr @a, i64 0, i64 1))
 ; CHECK-NEXT:    ret ptr [[CMP]]
 ;
-  %p0 = getelementptr [2 x i8], [2 x i8]* @a, i32 0, i32 0
-  %p1 = getelementptr [2 x i8], [2 x i8]* @a, i32 0, i32 1
-  %cmp = call ptr @strncasecmp(ptr %p0, ptr %p1)
+  %p1 = getelementptr [2 x i8], ptr @a, i32 0, i32 1
+  %cmp = call ptr @strncasecmp(ptr @a, ptr %p1)
   ret ptr %cmp
 }
 
@@ -61,9 +58,8 @@ define i1 @call_bad_strcoll() {
 ; CHECK-NEXT:    [[I:%.*]] = call i1 @strcoll(ptr nonnull @a, ptr getelementptr inbounds ([2 x i8], ptr @a, i64 0, i64 1), ptr nonnull @a)
 ; CHECK-NEXT:    ret i1 [[I]]
 ;
-  %p0 = getelementptr [2 x i8], [2 x i8]* @a, i32 0, i32 0
-  %p1 = getelementptr [2 x i8], [2 x i8]* @a, i32 0, i32 1
-  %i = call i1 @strcoll(ptr %p0, ptr %p1, ptr %p0)
+  %p1 = getelementptr [2 x i8], ptr @a, i32 0, i32 1
+  %i = call i1 @strcoll(ptr @a, ptr %p1, ptr @a)
   ret i1 %i
 }
 
@@ -75,8 +71,7 @@ define ptr @call_bad_strndup() {
 ; CHECK-NEXT:    [[D:%.*]] = call ptr @strndup(ptr nonnull @a)
 ; CHECK-NEXT:    ret ptr [[D]]
 ;
-  %p = getelementptr [2 x i8], [2 x i8]* @a, i32 0, i32 0
-  %d = call ptr @strndup(ptr %p)
+  %d = call ptr @strndup(ptr @a)
   ret ptr %d
 }
 
@@ -88,9 +83,8 @@ define i1 @call_bad_strtok() {
 ; CHECK-NEXT:    [[RET:%.*]] = call i1 @strtok(ptr nonnull @a, ptr getelementptr inbounds ([2 x i8], ptr @a, i64 0, i64 1), i1 false)
 ; CHECK-NEXT:    ret i1 [[RET]]
 ;
-  %p0 = getelementptr [2 x i8], [2 x i8]* @a, i32 0, i32 0
-  %p1 = getelementptr [2 x i8], [2 x i8]* @a, i32 0, i32 1
-  %ret = call i1 @strtok(ptr %p0, ptr %p1, i1 0)
+  %p1 = getelementptr [2 x i8], ptr @a, i32 0, i32 1
+  %ret = call i1 @strtok(ptr @a, ptr %p1, i1 0)
   ret i1 %ret
 }
 
@@ -103,9 +97,8 @@ define i1 @call_bad_strtok_r() {
 ; CHECK-NEXT:    [[RET:%.*]] = call i1 @strtok_r(ptr nonnull @a, ptr getelementptr inbounds ([2 x i8], ptr @a, i64 0, i64 1))
 ; CHECK-NEXT:    ret i1 [[RET]]
 ;
-  %p0 = getelementptr [2 x i8], [2 x i8]* @a, i32 0, i32 0
-  %p1 = getelementptr [2 x i8], [2 x i8]* @a, i32 0, i32 1
-  %ret = call i1 @strtok_r(ptr %p0, ptr %p1)
+  %p1 = getelementptr [2 x i8], ptr @a, i32 0, i32 1
+  %ret = call i1 @strtok_r(ptr @a, ptr %p1)
   ret i1 %ret
 }
 
@@ -116,7 +109,7 @@ declare i32 @strtoul(ptr, ptr)
 declare i64 @strtoll(ptr, ptr)
 declare i64 @strtoull(ptr, ptr)
 
-define void @call_bad_strto(i32* %psi32, i64* %psi64) {
+define void @call_bad_strto(ptr %psi32, ptr %psi64) {
 ; CHECK-LABEL: @call_bad_strto(
 ; CHECK-NEXT:    [[LR:%.*]] = call i32 @strtol(ptr nonnull @a, ptr null)
 ; CHECK-NEXT:    store i32 [[LR]], ptr [[PSI32:%.*]], align 4
@@ -130,23 +123,20 @@ define void @call_bad_strto(i32* %psi32, i64* %psi64) {
 ; CHECK-NEXT:    store i64 [[ULLR]], ptr [[PS3]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %p = getelementptr [2 x i8], [2 x i8]* @a, i32 0, i32 0
 
-  %lr = call i32 @strtol(ptr %p, ptr null)
-  %ps0 = getelementptr i32, i32* %psi32, i32 0
-  store i32 %lr, i32* %ps0
+  %lr = call i32 @strtol(ptr @a, ptr null)
+  store i32 %lr, ptr %psi32
 
-  %ulr = call i32 @strtoul(ptr %p, ptr null)
-  %ps1 = getelementptr i32, i32* %psi32, i32 1
-  store i32 %ulr, i32* %ps1
+  %ulr = call i32 @strtoul(ptr @a, ptr null)
+  %ps1 = getelementptr i32, ptr %psi32, i32 1
+  store i32 %ulr, ptr %ps1
 
-  %llr = call i64 @strtoll(ptr %p, ptr null)
-  %ps2 = getelementptr i64, i64* %psi64, i32 0
-  store i64 %llr, i64* %ps2
+  %llr = call i64 @strtoll(ptr @a, ptr null)
+  store i64 %llr, ptr %psi64
 
-  %ullr = call i64 @strtoull(ptr %p, ptr null)
-  %ps3 = getelementptr i64, i64* %psi64, i32 3
-  store i64 %ullr, i64* %ps3
+  %ullr = call i64 @strtoull(ptr @a, ptr null)
+  %ps3 = getelementptr i64, ptr %psi64, i32 3
+  store i64 %ullr, ptr %ps3
 
   ret void
 }
@@ -159,8 +149,7 @@ define ptr @call_bad_strxfrm() {
 ; CHECK-NEXT:    [[RET:%.*]] = call ptr @strxfrm(ptr nonnull @a, ptr getelementptr inbounds ([2 x i8], ptr @a, i64 0, i64 1))
 ; CHECK-NEXT:    ret ptr [[RET]]
 ;
-  %p0 = getelementptr [2 x i8], [2 x i8]* @a, i32 0, i32 0
-  %p1 = getelementptr [2 x i8], [2 x i8]* @a, i32 0, i32 1
-  %ret = call ptr @strxfrm(ptr %p0, ptr %p1)
+  %p1 = getelementptr [2 x i8], ptr @a, i32 0, i32 1
+  %ret = call ptr @strxfrm(ptr @a, ptr %p1)
   ret ptr %ret
 }
index 1241a7780964ed3d98dbcb194dba51ffcbd52332..c1658bd93a0199f39c93c1a893c023c1f5e3cdd2 100644 (file)
@@ -9,30 +9,26 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @null = constant [1 x i8] zeroinitializer
 @null_hello = constant [7 x i8] c"\00hello\00"
 
-declare i8* @strcat(i8*, i8*)
-declare i32 @puts(i8*)
+declare ptr @strcat(ptr, ptr)
+declare i32 @puts(ptr)
 
 define i32 @main() {
 ; CHECK-LABEL: @main(
-; CHECK-NOT: call i8* @strcat
+; CHECK-NOT: call ptr @strcat
 ; CHECK: call i32 @puts
 
   %target = alloca [1024 x i8]
-  %arg1 = getelementptr [1024 x i8], [1024 x i8]* %target, i32 0, i32 0
-  store i8 0, i8* %arg1
+  store i8 0, ptr %target
 
   ; rslt1 = strcat(target, "hello\00")
-  %arg2 = getelementptr [6 x i8], [6 x i8]* @hello, i32 0, i32 0
-  %rslt1 = call i8* @strcat(i8* %arg1, i8* %arg2)
+  %rslt1 = call ptr @strcat(ptr %target, ptr @hello)
 
   ; rslt2 = strcat(rslt1, "\00")
-  %arg3 = getelementptr [1 x i8], [1 x i8]* @null, i32 0, i32 0
-  %rslt2 = call i8* @strcat(i8* %rslt1, i8* %arg3)
+  %rslt2 = call ptr @strcat(ptr %rslt1, ptr @null)
 
   ; rslt3 = strcat(rslt2, "\00hello\00")
-  %arg4 = getelementptr [7 x i8], [7 x i8]* @null_hello, i32 0, i32 0
-  %rslt3 = call i8* @strcat(i8* %rslt2, i8* %arg4)
+  %rslt3 = call ptr @strcat(ptr %rslt2, ptr @null_hello)
 
-  call i32 @puts( i8* %rslt3 )
+  call i32 @puts( ptr %rslt3 )
   ret i32 0
 }
index efce2d08d1e75bb8492564f496536d41b68331cd..6e22c40cfa4f8998346bcb8713ef99a2273733f9 100644 (file)
@@ -8,16 +8,14 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @empty = constant [1 x i8] c"\00"
 @a = common global [32 x i8] zeroinitializer, align 1
 
-declare i8* @strcat(i8*, i8*)
+declare ptr @strcat(ptr, ptr)
 
 define void @test_simplify1() {
 ; CHECK-LABEL: @test_simplify1(
-; CHECK-NOT: call i8* @strcat
+; CHECK-NOT: call ptr @strcat
 ; CHECK: ret void
 
-  %dst = getelementptr [32 x i8], [32 x i8]* @a, i32 0, i32 0
-  %src = getelementptr [6 x i8], [6 x i8]* @hello, i32 0, i32 0
-  call i8* @strcat(i8* %dst, i8* %src)
+  call ptr @strcat(ptr @a, ptr @hello)
   ret void
 }
 
@@ -25,8 +23,6 @@ define void @test_simplify2() {
 ; CHECK-LABEL: @test_simplify2(
 ; CHECK-NEXT: ret void
 
-  %dst = getelementptr [32 x i8], [32 x i8]* @a, i32 0, i32 0
-  %src = getelementptr [1 x i8], [1 x i8]* @empty, i32 0, i32 0
-  call i8* @strcat(i8* %dst, i8* %src)
+  call ptr @strcat(ptr @a, ptr @empty)
   ret void
 }
index 1de78e5268f9001e5a5887319953412e2d18fc66..1824d3ea52e77f804165951ba6b91206e12443ad 100644 (file)
@@ -9,16 +9,14 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @empty = constant [1 x i8] c"\00"
 @a = common global [32 x i8] zeroinitializer, align 1
 
-; Expected type: i8* @strcat(i8*, i8*).
-declare i16 @strcat(i8*, i8*)
+; Expected type: ptr @strcat(ptr, ptr).
+declare i16 @strcat(ptr, ptr)
 
 define void @test_nosimplify1() {
 ; CHECK-LABEL: @test_nosimplify1(
 ; CHECK: call i16 @strcat
 ; CHECK: ret void
 
-  %dst = getelementptr [32 x i8], [32 x i8]* @a, i32 0, i32 0
-  %src = getelementptr [6 x i8], [6 x i8]* @hello, i32 0, i32 0
-  call i16 @strcat(i8* %dst, i8* %src)
+  call i16 @strcat(ptr @a, ptr @hello)
   ret void
 }
index 590b98cbfd8216b6324a6561c23f880fc67d8d5c..c86e4ac866856a5de70b513cd4b61bd5b49c8495 100644 (file)
@@ -7,15 +7,14 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @hello = constant [14 x i8] c"hello world\5Cn\00"
 @chr = global i8 zeroinitializer
 
-declare i8 @strchr(i8*, i32)
+declare i8 @strchr(ptr, i32)
 
 define void @test_nosimplify1() {
 ; CHECK: test_nosimplify1
 ; CHECK: call i8 @strchr
 ; CHECK: ret void
 
-  %str = getelementptr [14 x i8], [14 x i8]* @hello, i32 0, i32 0
-  %dst = call i8 @strchr(i8* %str, i32 119)
-  store i8 %dst, i8* @chr
+  %dst = call i8 @strchr(ptr @hello, i32 119)
+  store i8 %dst, ptr @chr
   ret void
 }
index 566059b472152a4004d69b89f7d4753cc17875df..933bfa36b1c87a46f92bffbceaf262b93ddc5d29 100644 (file)
@@ -4,35 +4,35 @@
 ; Verify that the result of strchr calls used in equality expressions
 ; with either the first argument or null are optimally folded.
 
-declare i8* @strchr(i8*, i32)
+declare ptr @strchr(ptr, i32)
 
 
 ; Fold strchr(s, c) == s to *s == c.
 
-define i1 @fold_strchr_s_c_eq_s(i8* %s, i32 %c) {
+define i1 @fold_strchr_s_c_eq_s(ptr %s, i32 %c) {
 ; CHECK-LABEL: @fold_strchr_s_c_eq_s(
-; CHECK-NEXT:    [[TMP1:%.*]] = load i8, i8* [[S:%.*]], align 1
+; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[S:%.*]], align 1
 ; CHECK-NEXT:    [[TMP2:%.*]] = trunc i32 [[C:%.*]] to i8
 ; CHECK-NEXT:    [[CHAR0CMP:%.*]] = icmp eq i8 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i1 [[CHAR0CMP]]
 ;
-  %p = call i8* @strchr(i8* %s, i32 %c)
-  %cmp = icmp eq i8* %p, %s
+  %p = call ptr @strchr(ptr %s, i32 %c)
+  %cmp = icmp eq ptr %p, %s
   ret i1 %cmp
 }
 
 
 ; Fold strchr(s, c) != s to *s != c.
 
-define i1 @fold_strchr_s_c_neq_s(i8* %s, i32 %c) {
+define i1 @fold_strchr_s_c_neq_s(ptr %s, i32 %c) {
 ; CHECK-LABEL: @fold_strchr_s_c_neq_s(
-; CHECK-NEXT:    [[TMP1:%.*]] = load i8, i8* [[S:%.*]], align 1
+; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[S:%.*]], align 1
 ; CHECK-NEXT:    [[TMP2:%.*]] = trunc i32 [[C:%.*]] to i8
 ; CHECK-NEXT:    [[CHAR0CMP:%.*]] = icmp ne i8 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    ret i1 [[CHAR0CMP]]
 ;
-  %p = call i8* @strchr(i8* %s, i32 %c)
-  %cmp = icmp ne i8* %p, %s
+  %p = call ptr @strchr(ptr %s, i32 %c)
+  %cmp = icmp ne ptr %p, %s
   ret i1 %cmp
 }
 
@@ -40,24 +40,24 @@ define i1 @fold_strchr_s_c_neq_s(i8* %s, i32 %c) {
 ; Fold strchr(s, '\0') == null to false.  (A string must be nul-terminated,
 ; otherwise the call would read past the end of the array.)
 
-define i1 @fold_strchr_s_nul_eqz(i8* %s) {
+define i1 @fold_strchr_s_nul_eqz(ptr %s) {
 ; CHECK-LABEL: @fold_strchr_s_nul_eqz(
 ; CHECK-NEXT:    ret i1 false
 ;
-  %p = call i8* @strchr(i8* %s, i32 0)
-  %cmp = icmp eq i8* %p, null
+  %p = call ptr @strchr(ptr %s, i32 0)
+  %cmp = icmp eq ptr %p, null
   ret i1 %cmp
 }
 
 
 ; Fold strchr(s, '\0') != null to true.
 
-define i1 @fold_strchr_s_nul_nez(i8* %s) {
+define i1 @fold_strchr_s_nul_nez(ptr %s) {
 ; CHECK-LABEL: @fold_strchr_s_nul_nez(
 ; CHECK-NEXT:    ret i1 true
 ;
-  %p = call i8* @strchr(i8* %s, i32 0)
-  %cmp = icmp ne i8* %p, null
+  %p = call ptr @strchr(ptr %s, i32 0)
+  %cmp = icmp ne ptr %p, null
   ret i1 %cmp
 }
 
@@ -72,8 +72,7 @@ define i1 @fold_strchr_a_c_eq_a(i32 %c) {
 ; CHECK-NEXT:    [[CHAR0CMP:%.*]] = icmp eq i8 [[TMP1]], 49
 ; CHECK-NEXT:    ret i1 [[CHAR0CMP]]
 ;
-  %p = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 0
-  %q = call i8* @strchr(i8* %p, i32 %c)
-  %cmp = icmp eq i8* %q, %p
+  %q = call ptr @strchr(ptr @a5, i32 %c)
+  %cmp = icmp eq ptr %q, @a5
   ret i1 %cmp
 }
index 648e8682c9263790c29d390382bfc5fcbee033cd..7ac433ad862a1a1af8f2b35c831c39a42fcd767f 100644 (file)
@@ -10,51 +10,49 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @bell = constant [5 x i8] c"bell\00"
 @null = constant [1 x i8] zeroinitializer
 
-declare i32 @strcmp(i8*, i8*)
+declare i32 @strcmp(ptr, ptr)
 
 ; strcmp("", x) -> -*x
-define i32 @test1(i8* %str2) {
+define i32 @test1(ptr %str2) {
 ; CHECK-LABEL: @test1(
-; CHECK: %strcmpload = load i8, i8* %str
+; CHECK: %strcmpload = load i8, ptr %str
 ; CHECK: %1 = zext i8 %strcmpload to i32
 ; CHECK: %2 = sub nsw i32 0, %1
 ; CHECK: ret i32 %2
 ; NOBCMP-LABEL: @test1(
-; NOBCMP-NEXT:    [[STRCMPLOAD:%.*]] = load i8, i8* [[STR2:%.*]], align 1
+; NOBCMP-NEXT:    [[STRCMPLOAD:%.*]] = load i8, ptr [[STR2:%.*]], align 1
 ; NOBCMP-NEXT:    [[TMP1:%.*]] = zext i8 [[STRCMPLOAD]] to i32
 ; NOBCMP-NEXT:    [[TMP2:%.*]] = sub nsw i32 0, [[TMP1]]
 ; NOBCMP-NEXT:    ret i32 [[TMP2]]
 ;
 ; BCMP-LABEL: @test1(
-; BCMP-NEXT:    [[STRCMPLOAD:%.*]] = load i8, i8* [[STR2:%.*]], align 1
+; BCMP-NEXT:    [[STRCMPLOAD:%.*]] = load i8, ptr [[STR2:%.*]], align 1
 ; BCMP-NEXT:    [[TMP1:%.*]] = zext i8 [[STRCMPLOAD]] to i32
 ; BCMP-NEXT:    [[TMP2:%.*]] = sub nsw i32 0, [[TMP1]]
 ; BCMP-NEXT:    ret i32 [[TMP2]]
 ;
-  %str1 = getelementptr inbounds [1 x i8], [1 x i8]* @null, i32 0, i32 0
-  %temp1 = call i32 @strcmp(i8* %str1, i8* %str2)
+  %temp1 = call i32 @strcmp(ptr @null, ptr %str2)
   ret i32 %temp1
 
 }
 
 ; strcmp(x, "") -> *x
-define i32 @test2(i8* %str1) {
+define i32 @test2(ptr %str1) {
 ; CHECK-LABEL: @test2(
-; CHECK: %strcmpload = load i8, i8* %str
+; CHECK: %strcmpload = load i8, ptr %str
 ; CHECK: %1 = zext i8 %strcmpload to i32
 ; CHECK: ret i32 %1
 ; NOBCMP-LABEL: @test2(
-; NOBCMP-NEXT:    [[STRCMPLOAD:%.*]] = load i8, i8* [[STR1:%.*]], align 1
+; NOBCMP-NEXT:    [[STRCMPLOAD:%.*]] = load i8, ptr [[STR1:%.*]], align 1
 ; NOBCMP-NEXT:    [[TMP1:%.*]] = zext i8 [[STRCMPLOAD]] to i32
 ; NOBCMP-NEXT:    ret i32 [[TMP1]]
 ;
 ; BCMP-LABEL: @test2(
-; BCMP-NEXT:    [[STRCMPLOAD:%.*]] = load i8, i8* [[STR1:%.*]], align 1
+; BCMP-NEXT:    [[STRCMPLOAD:%.*]] = load i8, ptr [[STR1:%.*]], align 1
 ; BCMP-NEXT:    [[TMP1:%.*]] = zext i8 [[STRCMPLOAD]] to i32
 ; BCMP-NEXT:    ret i32 [[TMP1]]
 ;
-  %str2 = getelementptr inbounds [1 x i8], [1 x i8]* @null, i32 0, i32 0
-  %temp1 = call i32 @strcmp(i8* %str1, i8* %str2)
+  %temp1 = call i32 @strcmp(ptr %str1, ptr @null)
   ret i32 %temp1
 }
 
@@ -68,9 +66,7 @@ define i32 @test3() {
 ; BCMP-LABEL: @test3(
 ; BCMP-NEXT:    ret i32 -1
 ;
-  %str1 = getelementptr inbounds [5 x i8], [5 x i8]* @hell, i32 0, i32 0
-  %str2 = getelementptr inbounds [6 x i8], [6 x i8]* @hello, i32 0, i32 0
-  %temp1 = call i32 @strcmp(i8* %str1, i8* %str2)
+  %temp1 = call i32 @strcmp(ptr @hell, ptr @hello)
   ret i32 %temp1
 }
 
@@ -83,9 +79,7 @@ define i32 @test4() {
 ; BCMP-LABEL: @test4(
 ; BCMP-NEXT:    ret i32 1
 ;
-  %str1 = getelementptr inbounds [5 x i8], [5 x i8]* @hell, i32 0, i32 0
-  %str2 = getelementptr inbounds [1 x i8], [1 x i8]* @null, i32 0, i32 0
-  %temp1 = call i32 @strcmp(i8* %str1, i8* %str2)
+  %temp1 = call i32 @strcmp(ptr @hell, ptr @null)
   ret i32 %temp1
 }
 
@@ -93,28 +87,25 @@ define i32 @test4() {
 ; (This transform is rather difficult to trigger in a useful manner)
 define i32 @test5(i1 %b) {
 ; CHECK-LABEL: @test5(
-; CHECK: %memcmp = call i32 @memcmp(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @hello, i32 0, i32 0), i8* %str2, i32 5)
+; CHECK: %memcmp = call i32 @memcmp(ptr @hello, ptr %str2, i32 5)
 ; CHECK: ret i32 %memcmp
 ; NOBCMP-LABEL: @test5(
-; NOBCMP-NEXT:    [[STR2:%.*]] = select i1 [[B:%.*]], i8* getelementptr inbounds ([5 x i8], [5 x i8]* @hell, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @bell, i32 0, i32 0)
-; NOBCMP-NEXT:    [[MEMCMP:%.*]] = call i32 @memcmp(i8* noundef nonnull dereferenceable(5) getelementptr inbounds ([6 x i8], [6 x i8]* @hello, i32 0, i32 0), i8* noundef nonnull dereferenceable(5) [[STR2]], i32 5)
+; NOBCMP-NEXT:    [[STR2:%.*]] = select i1 [[B:%.*]], ptr @hell, ptr @bell
+; NOBCMP-NEXT:    [[MEMCMP:%.*]] = call i32 @memcmp(ptr noundef nonnull dereferenceable(5) @hello, ptr noundef nonnull dereferenceable(5) [[STR2]], i32 5)
 ; NOBCMP-NEXT:    ret i32 [[MEMCMP]]
 ;
 ; BCMP-LABEL: @test5(
-; BCMP-NEXT:    [[STR2:%.*]] = select i1 [[B:%.*]], i8* getelementptr inbounds ([5 x i8], [5 x i8]* @hell, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @bell, i32 0, i32 0)
-; BCMP-NEXT:    [[MEMCMP:%.*]] = call i32 @memcmp(i8* noundef nonnull dereferenceable(5) getelementptr inbounds ([6 x i8], [6 x i8]* @hello, i32 0, i32 0), i8* noundef nonnull dereferenceable(5) [[STR2]], i32 5)
+; BCMP-NEXT:    [[STR2:%.*]] = select i1 [[B:%.*]], ptr @hell, ptr @bell
+; BCMP-NEXT:    [[MEMCMP:%.*]] = call i32 @memcmp(ptr noundef nonnull dereferenceable(5) @hello, ptr noundef nonnull dereferenceable(5) [[STR2]], i32 5)
 ; BCMP-NEXT:    ret i32 [[MEMCMP]]
 ;
-  %str1 = getelementptr inbounds [6 x i8], [6 x i8]* @hello, i32 0, i32 0
-  %temp1 = getelementptr inbounds [5 x i8], [5 x i8]* @hell, i32 0, i32 0
-  %temp2 = getelementptr inbounds [5 x i8], [5 x i8]* @bell, i32 0, i32 0
-  %str2 = select i1 %b, i8* %temp1, i8* %temp2
-  %temp3 = call i32 @strcmp(i8* %str1, i8* %str2)
+  %str2 = select i1 %b, ptr @hell, ptr @bell
+  %temp3 = call i32 @strcmp(ptr @hello, ptr %str2)
   ret i32 %temp3
 }
 
 ; strcmp(x,x)  -> 0
-define i32 @test6(i8* %str) {
+define i32 @test6(ptr %str) {
 ; CHECK-LABEL: @test6(
 ; CHECK: ret i32 0
 ; NOBCMP-LABEL: @test6(
@@ -123,31 +114,28 @@ define i32 @test6(i8* %str) {
 ; BCMP-LABEL: @test6(
 ; BCMP-NEXT:    ret i32 0
 ;
-  %temp1 = call i32 @strcmp(i8* %str, i8* %str)
+  %temp1 = call i32 @strcmp(ptr %str, ptr %str)
   ret i32 %temp1
 }
 
 ; strcmp(x, y) == 0  -> bcmp(x, y, <known length>)
 define i1 @test7(i1 %b) {
 ; NOBCMP-LABEL: @test7(
-; NOBCMP-NEXT:    [[STR2:%.*]] = select i1 [[B:%.*]], i8* getelementptr inbounds ([5 x i8], [5 x i8]* @hell, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @bell, i32 0, i32 0)
-; NOBCMP-NEXT:    [[MEMCMP:%.*]] = call i32 @memcmp(i8* noundef nonnull dereferenceable(5) getelementptr inbounds ([6 x i8], [6 x i8]* @hello, i32 0, i32 0), i8* noundef nonnull dereferenceable(5) [[STR2]], i32 5)
+; NOBCMP-NEXT:    [[STR2:%.*]] = select i1 [[B:%.*]], ptr @hell, ptr @bell
+; NOBCMP-NEXT:    [[MEMCMP:%.*]] = call i32 @memcmp(ptr noundef nonnull dereferenceable(5) @hello, ptr noundef nonnull dereferenceable(5) [[STR2]], i32 5)
 ; NOBCMP-NEXT:    [[RES:%.*]] = icmp eq i32 [[MEMCMP]], 0
 ; NOBCMP-NEXT:    ret i1 [[RES]]
 ;
 ; BCMP-LABEL: @test7(
-; BCMP-NEXT:    [[STR2:%.*]] = select i1 [[B:%.*]], i8* getelementptr inbounds ([5 x i8], [5 x i8]* @hell, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @bell, i32 0, i32 0)
-; BCMP-NEXT:    [[BCMP:%.*]] = call i32 @bcmp(i8* noundef nonnull dereferenceable(5) getelementptr inbounds ([6 x i8], [6 x i8]* @hello, i32 0, i32 0), i8* noundef nonnull dereferenceable(5) [[STR2]], i32 5)
+; BCMP-NEXT:    [[STR2:%.*]] = select i1 [[B:%.*]], ptr @hell, ptr @bell
+; BCMP-NEXT:    [[BCMP:%.*]] = call i32 @bcmp(ptr noundef nonnull dereferenceable(5) @hello, ptr noundef nonnull dereferenceable(5) [[STR2]], i32 5)
 ; BCMP-NEXT:    [[RES:%.*]] = icmp eq i32 [[BCMP]], 0
 ; BCMP-NEXT:    ret i1 [[RES]]
 ;
 
 
-  %str1 = getelementptr inbounds [6 x i8], [6 x i8]* @hello, i32 0, i32 0
-  %temp1 = getelementptr inbounds [5 x i8], [5 x i8]* @hell, i32 0, i32 0
-  %temp2 = getelementptr inbounds [5 x i8], [5 x i8]* @bell, i32 0, i32 0
-  %str2 = select i1 %b, i8* %temp1, i8* %temp2
-  %temp3 = call i32 @strcmp(i8* %str1, i8* %str2)
+  %str2 = select i1 %b, ptr @hell, ptr @bell
+  %temp3 = call i32 @strcmp(ptr @hello, ptr %str2)
   %res = icmp eq i32 %temp3, 0
   ret i1 %res
 }
index 5c134298d69eb03728f738bf1fe651b72192073d..5412df8ec8f06593348ed3d019f7a81e98f6db9f 100644 (file)
@@ -6,15 +6,13 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @hello = constant [6 x i8] c"hello\00"
 @hell = constant [5 x i8] c"hell\00"
 
-declare i16 @strcmp(i8*, i8*)
+declare i16 @strcmp(ptr, ptr)
 
 define i16 @test_nosimplify() {
 ; CHECK-LABEL: @test_nosimplify(
 ; CHECK: call i16 @strcmp
 ; CHECK: ret i16 %temp1
 
-  %str1 = getelementptr inbounds [5 x i8], [5 x i8]* @hell, i32 0, i32 0
-  %str2 = getelementptr inbounds [6 x i8], [6 x i8]* @hello, i32 0, i32 0
-  %temp1 = call i16 @strcmp(i8* %str1, i8* %str2)
+  %temp1 = call i16 @strcmp(ptr @hell, ptr @hello)
   ret i16 %temp1
 }
index 166d3d55fa026dc894e79b1edd39cde0da3ef9a2..66910b410f4cfb508e48365010c0cf2704400e26 100644 (file)
@@ -3,7 +3,7 @@
 ;
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare i32 @strcmp(i8*, i8*)
+declare i32 @strcmp(ptr, ptr)
 
 @a5 = constant [5 x [4 x i8]] [[4 x i8] c"123\00", [4 x i8] c"123\00", [4 x i8] c"12\00\00", [4 x i8] zeroinitializer, [4 x i8] zeroinitializer]
 
@@ -14,10 +14,9 @@ define i32 @fold_strcmp_a5i0_a5i1_to_0() {
 ; CHECK-LABEL: @fold_strcmp_a5i0_a5i1_to_0(
 ; CHECK-NEXT:    ret i32 0
 ;
-  %p = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 0, i64 0
-  %q = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 1, i64 0
+  %q = getelementptr [5 x [4 x i8]], ptr @a5, i64 0, i64 1, i64 0
 
-  %cmp = call i32 @strcmp(i8* %p, i8* %q)
+  %cmp = call i32 @strcmp(ptr @a5, ptr %q)
   ret i32 %cmp
 }
 
@@ -26,14 +25,13 @@ define i32 @fold_strcmp_a5i0_a5i1_to_0() {
 
 define i32 @call_strcmp_a5i0_a5iI(i64 %I) {
 ; CHECK-LABEL: @call_strcmp_a5i0_a5iI(
-; CHECK-NEXT:    [[Q:%.*]] = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 [[I:%.*]], i64 0
-; CHECK-NEXT:    [[CMP:%.*]] = call i32 @strcmp(i8* noundef nonnull dereferenceable(4) getelementptr inbounds ([5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 0, i64 0), i8* noundef nonnull dereferenceable(1) [[Q]])
+; CHECK-NEXT:    [[Q:%.*]] = getelementptr [5 x [4 x i8]], ptr @a5, i64 0, i64 [[I:%.*]], i64 0
+; CHECK-NEXT:    [[CMP:%.*]] = call i32 @strcmp(ptr noundef nonnull dereferenceable(4) @a5, ptr noundef nonnull dereferenceable(1) [[Q]])
 ; CHECK-NEXT:    ret i32 [[CMP]]
 ;
-  %p = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 0, i64 0
-  %q = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 %I, i64 0
+  %q = getelementptr [5 x [4 x i8]], ptr @a5, i64 0, i64 %I, i64 0
 
-  %cmp = call i32 @strcmp(i8* %p, i8* %q)
+  %cmp = call i32 @strcmp(ptr @a5, ptr %q)
   ret i32 %cmp
 }
 
@@ -42,14 +40,13 @@ define i32 @call_strcmp_a5i0_a5iI(i64 %I) {
 
 define i32 @call_strcmp_a5iI_a5i0(i64 %I) {
 ; CHECK-LABEL: @call_strcmp_a5iI_a5i0(
-; CHECK-NEXT:    [[P:%.*]] = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 [[I:%.*]], i64 0
-; CHECK-NEXT:    [[CMP:%.*]] = call i32 @strcmp(i8* noundef nonnull dereferenceable(1) [[P]], i8* noundef nonnull dereferenceable(4) getelementptr inbounds ([5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 0, i64 0))
+; CHECK-NEXT:    [[P:%.*]] = getelementptr [5 x [4 x i8]], ptr @a5, i64 0, i64 [[I:%.*]], i64 0
+; CHECK-NEXT:    [[CMP:%.*]] = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) [[P]], ptr noundef nonnull dereferenceable(4) @a5)
 ; CHECK-NEXT:    ret i32 [[CMP]]
 ;
-  %p = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 %I, i64 0
-  %q = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 0, i64 0
+  %p = getelementptr [5 x [4 x i8]], ptr @a5, i64 0, i64 %I, i64 0
 
-  %cmp = call i32 @strcmp(i8* %p, i8* %q)
+  %cmp = call i32 @strcmp(ptr %p, ptr @a5)
   ret i32 %cmp
 }
 
@@ -60,10 +57,9 @@ define i32 @fold_strcmp_a5i0_a5i1_p1_to_0() {
 ; CHECK-LABEL: @fold_strcmp_a5i0_a5i1_p1_to_0(
 ; CHECK-NEXT:    ret i32 -1
 ;
-  %p = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 0, i64 0
-  %q = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 1, i64 1
+  %q = getelementptr [5 x [4 x i8]], ptr @a5, i64 0, i64 1, i64 1
 
-  %cmp = call i32 @strcmp(i8* %p, i8* %q)
+  %cmp = call i32 @strcmp(ptr @a5, ptr %q)
   ret i32 %cmp
 }
 
@@ -72,14 +68,13 @@ define i32 @fold_strcmp_a5i0_a5i1_p1_to_0() {
 
 define i32 @call_strcmp_a5i0_a5i1_pI(i64 %I) {
 ; CHECK-LABEL: @call_strcmp_a5i0_a5i1_pI(
-; CHECK-NEXT:    [[Q:%.*]] = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 1, i64 [[I:%.*]]
-; CHECK-NEXT:    [[CMP:%.*]] = call i32 @strcmp(i8* noundef nonnull dereferenceable(4) getelementptr inbounds ([5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 0, i64 0), i8* noundef nonnull dereferenceable(1) [[Q]])
+; CHECK-NEXT:    [[Q:%.*]] = getelementptr [5 x [4 x i8]], ptr @a5, i64 0, i64 1, i64 [[I:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = call i32 @strcmp(ptr noundef nonnull dereferenceable(4) @a5, ptr noundef nonnull dereferenceable(1) [[Q]])
 ; CHECK-NEXT:    ret i32 [[CMP]]
 ;
-  %p = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 0, i64 0
-  %q = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 1, i64 %I
+  %q = getelementptr [5 x [4 x i8]], ptr @a5, i64 0, i64 1, i64 %I
 
-  %cmp = call i32 @strcmp(i8* %p, i8* %q)
+  %cmp = call i32 @strcmp(ptr @a5, ptr %q)
   ret i32 %cmp
 }
 
@@ -90,10 +85,10 @@ define i32 @fold_strcmp_a5i0_p1_a5i1_to_0() {
 ; CHECK-LABEL: @fold_strcmp_a5i0_p1_a5i1_to_0(
 ; CHECK-NEXT:    ret i32 1
 ;
-  %p = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 0, i64 1
-  %q = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 1, i64 0
+  %p = getelementptr [5 x [4 x i8]], ptr @a5, i64 0, i64 0, i64 1
+  %q = getelementptr [5 x [4 x i8]], ptr @a5, i64 0, i64 1, i64 0
 
-  %cmp = call i32 @strcmp(i8* %p, i8* %q)
+  %cmp = call i32 @strcmp(ptr %p, ptr %q)
   ret i32 %cmp
 }
 
@@ -104,10 +99,9 @@ define i32 @fold_strcmp_a5i0_a5i2_to_0() {
 ; CHECK-LABEL: @fold_strcmp_a5i0_a5i2_to_0(
 ; CHECK-NEXT:    ret i32 1
 ;
-  %p = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 0, i64 0
-  %q = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 2, i64 0
+  %q = getelementptr [5 x [4 x i8]], ptr @a5, i64 0, i64 2, i64 0
 
-  %cmp = call i32 @strcmp(i8* %p, i8* %q)
+  %cmp = call i32 @strcmp(ptr @a5, ptr %q)
   ret i32 %cmp
 }
 
@@ -118,9 +112,8 @@ define i32 @fold_strcmp_a5i2_a5i0_to_m1() {
 ; CHECK-LABEL: @fold_strcmp_a5i2_a5i0_to_m1(
 ; CHECK-NEXT:    ret i32 -1
 ;
-  %p = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 0, i64 0
-  %q = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5, i64 0, i64 2, i64 0
+  %q = getelementptr [5 x [4 x i8]], ptr @a5, i64 0, i64 2, i64 0
 
-  %cmp = call i32 @strcmp(i8* %q, i8* %p)
+  %cmp = call i32 @strcmp(ptr %q, ptr @a5)
   ret i32 %cmp
 }
index 7bf3dacd52e6c18f20f1cd42f965a7b7f65e38d6..bdd521ddb9094c6645aefd10f264368a3258c3e5 100644 (file)
@@ -2,7 +2,7 @@
 ; TODO: Test that ...
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare i32 @strcmp(i8*, i8*)
+declare i32 @strcmp(ptr, ptr)
 
 @s9 = constant [10 x i8] c"123456789\00"
 
@@ -11,15 +11,15 @@ declare i32 @strcmp(i8*, i8*)
 
 define i32 @fold_strcmp_s3_x_s4_s3(i1 %C) {
 ; CHECK-LABEL: @fold_strcmp_s3_x_s4_s3(
-; CHECK-NEXT:    [[PTR:%.*]] = select i1 [[C:%.*]], i8* getelementptr inbounds ([10 x i8], [10 x i8]* @s9, i64 0, i64 6), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @s9, i64 0, i64 5)
-; CHECK-NEXT:    [[CMP:%.*]] = call i32 @strcmp(i8* noundef nonnull dereferenceable(1) [[PTR]], i8* noundef nonnull dereferenceable(4) getelementptr inbounds ([10 x i8], [10 x i8]* @s9, i64 0, i64 6))
+; CHECK-NEXT:    [[PTR:%.*]] = select i1 [[C:%.*]], ptr getelementptr inbounds ([10 x i8], ptr @s9, i64 0, i64 6), ptr getelementptr inbounds ([10 x i8], ptr @s9, i64 0, i64 5)
+; CHECK-NEXT:    [[CMP:%.*]] = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) [[PTR]], ptr noundef nonnull dereferenceable(4) getelementptr inbounds ([10 x i8], ptr @s9, i64 0, i64 6))
 ; CHECK-NEXT:    ret i32 [[CMP]]
 ;
 
-  %ps3 = getelementptr [10 x i8], [10 x i8]* @s9, i64 0, i64 6
-  %ps4 = getelementptr [10 x i8], [10 x i8]* @s9, i64 0, i64 5
+  %ps3 = getelementptr [10 x i8], ptr @s9, i64 0, i64 6
+  %ps4 = getelementptr [10 x i8], ptr @s9, i64 0, i64 5
 
-  %ptr = select i1 %C, i8* %ps3, i8* %ps4
-  %cmp = call i32 @strcmp(i8* %ptr, i8* %ps3)
+  %ptr = select i1 %C, ptr %ps3, ptr %ps4
+  %cmp = call i32 @strcmp(ptr %ptr, ptr %ps3)
   ret i32 %cmp
 }
index f67dd426a6326597fa7b2a23343d9f8ab0fd4e83..21bc99430b90c06dba2cefe6e398057a4ee54f02 100644 (file)
@@ -10,16 +10,14 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @hello = constant [6 x i8] c"hello\00"
 @a = common global [32 x i8] zeroinitializer, align 1
 
-; Expected type: i8* @strcpy(i8*, i8*)
-declare i16 @strcpy(i8*, i8*)
+; Expected type: ptr @strcpy(ptr, ptr)
+declare i16 @strcpy(ptr, ptr)
 
 define void @test_no_simplify1() {
 ; CHECK-LABEL: @test_no_simplify1(
 
-  %dst = getelementptr [32 x i8], [32 x i8]* @a, i32 0, i32 0
-  %src = getelementptr [6 x i8], [6 x i8]* @hello, i32 0, i32 0
 
-  call i16 @strcpy(i8* %dst, i8* %src)
+  call i16 @strcpy(ptr @a, ptr @hello)
 ; CHECK: call i16 @strcpy
   ret void
 }
index f70fd517da6ed5f632cedda61422e63c1e2b9aa9..86b49ffdf04b2b6864af28918c8057b48afa08d1 100644 (file)
@@ -6,68 +6,68 @@ target datalayout = "e-m:e-p200:128:128:128:64-p:64:64-A200-P200-G200"
 
 @str = private unnamed_addr addrspace(200) constant [17 x i8] c"exactly 16 chars\00", align 1
 
-declare i8 addrspace(200)* @strcpy(i8 addrspace(200)*, i8 addrspace(200)*) addrspace(200)
-declare i8 addrspace(200)* @stpcpy(i8 addrspace(200)*, i8 addrspace(200)*) addrspace(200)
-declare i8 addrspace(200)* @strncpy(i8 addrspace(200)*, i8 addrspace(200)*, i64) addrspace(200)
-declare i8 addrspace(200)* @stpncpy(i8 addrspace(200)*, i8 addrspace(200)*, i64) addrspace(200)
+declare ptr addrspace(200) @strcpy(ptr addrspace(200), ptr addrspace(200)) addrspace(200)
+declare ptr addrspace(200) @stpcpy(ptr addrspace(200), ptr addrspace(200)) addrspace(200)
+declare ptr addrspace(200) @strncpy(ptr addrspace(200), ptr addrspace(200), i64) addrspace(200)
+declare ptr addrspace(200) @stpncpy(ptr addrspace(200), ptr addrspace(200), i64) addrspace(200)
 
-define void @test_strcpy_to_memcpy(i8 addrspace(200)* %dst) addrspace(200) nounwind {
+define void @test_strcpy_to_memcpy(ptr addrspace(200) %dst) addrspace(200) nounwind {
 ; CHECK-LABEL: define {{[^@]+}}@test_strcpy_to_memcpy
-; CHECK-SAME: (i8 addrspace(200)* [[DST:%.*]]) addrspace(200) #[[ATTR1:[0-9]+]] {
+; CHECK-SAME: (ptr addrspace(200) [[DST:%.*]]) addrspace(200) #[[ATTR1:[0-9]+]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    call addrspace(200) void @llvm.memcpy.p200i8.p200i8.i64(i8 addrspace(200)* noundef align 1 dereferenceable(17) [[DST]], i8 addrspace(200)* noundef align 1 dereferenceable(17) getelementptr inbounds ([17 x i8], [17 x i8] addrspace(200)* @str, i64 0, i64 0), i64 17, i1 false)
+; CHECK-NEXT:    call addrspace(200) void @llvm.memcpy.p200.p200.i64(ptr addrspace(200) noundef align 1 dereferenceable(17) [[DST]], ptr addrspace(200) noundef align 1 dereferenceable(17) @str, i64 17, i1 false)
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %call = call i8 addrspace(200)* @strcpy(i8 addrspace(200)* %dst, i8 addrspace(200)* getelementptr inbounds ([17 x i8], [17 x i8] addrspace(200)* @str, i64 0, i64 0))
+  %call = call ptr addrspace(200) @strcpy(ptr addrspace(200) %dst, ptr addrspace(200) @str)
   ret void
 }
 
-define void @test_stpcpy_to_memcpy(i8 addrspace(200)* %dst) addrspace(200) nounwind {
+define void @test_stpcpy_to_memcpy(ptr addrspace(200) %dst) addrspace(200) nounwind {
 ; CHECK-LABEL: define {{[^@]+}}@test_stpcpy_to_memcpy
-; CHECK-SAME: (i8 addrspace(200)* [[DST:%.*]]) addrspace(200) #[[ATTR1]] {
+; CHECK-SAME: (ptr addrspace(200) [[DST:%.*]]) addrspace(200) #[[ATTR1]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    call addrspace(200) void @llvm.memcpy.p200i8.p200i8.i64(i8 addrspace(200)* noundef align 1 dereferenceable(17) [[DST]], i8 addrspace(200)* noundef align 1 dereferenceable(17) getelementptr inbounds ([17 x i8], [17 x i8] addrspace(200)* @str, i64 0, i64 0), i64 17, i1 false)
+; CHECK-NEXT:    call addrspace(200) void @llvm.memcpy.p200.p200.i64(ptr addrspace(200) noundef align 1 dereferenceable(17) [[DST]], ptr addrspace(200) noundef align 1 dereferenceable(17) @str, i64 17, i1 false)
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %call = call i8 addrspace(200)* @stpcpy(i8 addrspace(200)* %dst, i8 addrspace(200)* getelementptr inbounds ([17 x i8], [17 x i8] addrspace(200)* @str, i64 0, i64 0))
+  %call = call ptr addrspace(200) @stpcpy(ptr addrspace(200) %dst, ptr addrspace(200) @str)
   ret void
 }
 
-define void @test_stpcpy_to_strcpy(i8 addrspace(200)* %dst, i8 addrspace(200)* %src) addrspace(200) nounwind {
+define void @test_stpcpy_to_strcpy(ptr addrspace(200) %dst, ptr addrspace(200) %src) addrspace(200) nounwind {
 ; CHECK-LABEL: define {{[^@]+}}@test_stpcpy_to_strcpy
-; CHECK-SAME: (i8 addrspace(200)* [[DST:%.*]], i8 addrspace(200)* [[SRC:%.*]]) addrspace(200) #[[ATTR1]] {
+; CHECK-SAME: (ptr addrspace(200) [[DST:%.*]], ptr addrspace(200) [[SRC:%.*]]) addrspace(200) #[[ATTR1]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[STRCPY:%.*]] = call addrspace(200) i8 addrspace(200)* @strcpy(i8 addrspace(200)* noundef [[DST]], i8 addrspace(200)* noundef [[SRC]])
+; CHECK-NEXT:    [[STRCPY:%.*]] = call addrspace(200) ptr addrspace(200) @strcpy(ptr addrspace(200) noundef [[DST]], ptr addrspace(200) noundef [[SRC]])
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %call = call i8 addrspace(200)* @stpcpy(i8 addrspace(200)* %dst, i8 addrspace(200)* %src)
+  %call = call ptr addrspace(200) @stpcpy(ptr addrspace(200) %dst, ptr addrspace(200) %src)
   ret void
 }
 
 
-define void @test_strncpy_to_memcpy(i8 addrspace(200)* %dst) addrspace(200) nounwind {
+define void @test_strncpy_to_memcpy(ptr addrspace(200) %dst) addrspace(200) nounwind {
 ; CHECK-LABEL: define {{[^@]+}}@test_strncpy_to_memcpy
-; CHECK-SAME: (i8 addrspace(200)* [[DST:%.*]]) addrspace(200) #[[ATTR1]] {
+; CHECK-SAME: (ptr addrspace(200) [[DST:%.*]]) addrspace(200) #[[ATTR1]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    call addrspace(200) void @llvm.memcpy.p200i8.p200i8.i128(i8 addrspace(200)* noundef align 1 dereferenceable(17) [[DST]], i8 addrspace(200)* noundef align 1 dereferenceable(17) getelementptr inbounds ([17 x i8], [17 x i8] addrspace(200)* @str, i64 0, i64 0), i128 17, i1 false)
+; CHECK-NEXT:    call addrspace(200) void @llvm.memcpy.p200.p200.i128(ptr addrspace(200) noundef align 1 dereferenceable(17) [[DST]], ptr addrspace(200) noundef align 1 dereferenceable(17) @str, i128 17, i1 false)
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %call = call i8 addrspace(200)* @strncpy(i8 addrspace(200)* %dst, i8 addrspace(200)* getelementptr inbounds ([17 x i8], [17 x i8] addrspace(200)* @str, i64 0, i64 0), i64 17)
+  %call = call ptr addrspace(200) @strncpy(ptr addrspace(200) %dst, ptr addrspace(200) @str, i64 17)
   ret void
 }
 
-define void @test_stpncpy_to_memcpy(i8 addrspace(200)* %dst) addrspace(200) nounwind {
+define void @test_stpncpy_to_memcpy(ptr addrspace(200) %dst) addrspace(200) nounwind {
 ; CHECK-LABEL: define {{[^@]+}}@test_stpncpy_to_memcpy
-; CHECK-SAME: (i8 addrspace(200)* [[DST:%.*]]) addrspace(200) #[[ATTR1]] {
+; CHECK-SAME: (ptr addrspace(200) [[DST:%.*]]) addrspace(200) #[[ATTR1]] {
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    call addrspace(200) void @llvm.memcpy.p200i8.p200i8.i128(i8 addrspace(200)* noundef align 1 dereferenceable(17) [[DST]], i8 addrspace(200)* noundef align 1 dereferenceable(17) getelementptr inbounds ([17 x i8], [17 x i8] addrspace(200)* @str, i64 0, i64 0), i128 17, i1 false)
+; CHECK-NEXT:    call addrspace(200) void @llvm.memcpy.p200.p200.i128(ptr addrspace(200) noundef align 1 dereferenceable(17) [[DST]], ptr addrspace(200) noundef align 1 dereferenceable(17) @str, i128 17, i1 false)
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %call = call i8 addrspace(200)* @stpncpy(i8 addrspace(200)* %dst, i8 addrspace(200)* getelementptr inbounds ([17 x i8], [17 x i8] addrspace(200)* @str, i64 0, i64 0), i64 17)
+  %call = call ptr addrspace(200) @stpncpy(ptr addrspace(200) %dst, ptr addrspace(200) @str, i64 17)
   ret void
 }
index 226584839e04ca5c8de2f2a3405f466fe2d521ac..7d5ca38cf8f37f3120b88a908463b3f09705fdd3 100644 (file)
@@ -10,12 +10,10 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 
 define void @test_no_simplify() {
 ; CHECK-LABEL: @test_no_simplify(
-  %dst = getelementptr inbounds [60 x i16], [60 x i16]* @a, i32 0, i32 0
-  %src = getelementptr inbounds [8 x i8], [8 x i8]* @.str, i32 0, i32 0
 
 ; CHECK-NEXT: call i16 @__strcpy_chk
-  call i16 @__strcpy_chk(i16* %dst, i8* %src, i32 8)
+  call i16 @__strcpy_chk(ptr @a, ptr @.str, i32 8)
   ret void
 }
 
-declare i16 @__strcpy_chk(i16*, i8*, i32)
+declare i16 @__strcpy_chk(ptr, ptr, i32)
index 235d07a9375b0ab7ea5ade8b77d1f19f0e7a95d8..f331862b528b2fd305803fc18accb63546f784cb 100644 (file)
@@ -9,30 +9,28 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 @abc = constant [4 x i8] c"abc\00"
 @null = constant [1 x i8] zeroinitializer
 
-declare i64 @strcspn(i8*, i8*)
+declare i64 @strcspn(ptr, ptr)
 
 ; Check strcspn(s, "") -> strlen(s).
 
-define i64 @test_simplify1(i8* %str) {
+define i64 @test_simplify1(ptr %str) {
 ; CHECK-LABEL: @test_simplify1(
-; CHECK-NEXT:    [[STRLEN:%.*]] = call i64 @strlen(i8* noundef nonnull dereferenceable(1) [[STR:%.*]])
+; CHECK-NEXT:    [[STRLEN:%.*]] = call i64 @strlen(ptr noundef nonnull dereferenceable(1) [[STR:%.*]])
 ; CHECK-NEXT:    ret i64 [[STRLEN]]
 ;
-  %pat = getelementptr [1 x i8], [1 x i8]* @null, i32 0, i32 0
 
-  %ret = call i64 @strcspn(i8* %str, i8* %pat)
+  %ret = call i64 @strcspn(ptr %str, ptr @null)
   ret i64 %ret
 }
 
 ; Check strcspn("", s) -> 0.
 
-define i64 @test_simplify2(i8* %pat) {
+define i64 @test_simplify2(ptr %pat) {
 ; CHECK-LABEL: @test_simplify2(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %str = getelementptr [1 x i8], [1 x i8]* @null, i32 0, i32 0
 
-  %ret = call i64 @strcspn(i8* %str, i8* %pat)
+  %ret = call i64 @strcspn(ptr @null, ptr %pat)
   ret i64 %ret
 }
 
@@ -42,21 +40,19 @@ define i64 @test_simplify3() {
 ; CHECK-LABEL: @test_simplify3(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %str = getelementptr [6 x i8], [6 x i8]* @abcba, i32 0, i32 0
-  %pat = getelementptr [4 x i8], [4 x i8]* @abc, i32 0, i32 0
 
-  %ret = call i64 @strcspn(i8* %str, i8* %pat)
+  %ret = call i64 @strcspn(ptr @abcba, ptr @abc)
   ret i64 %ret
 }
 
 ; Check cases that shouldn't be simplified.
 
-define i64 @test_no_simplify1(i8* %str, i8* %pat) {
+define i64 @test_no_simplify1(ptr %str, ptr %pat) {
 ; CHECK-LABEL: @test_no_simplify1(
-; CHECK-NEXT:    [[RET:%.*]] = call i64 @strcspn(i8* [[STR:%.*]], i8* [[PAT:%.*]])
+; CHECK-NEXT:    [[RET:%.*]] = call i64 @strcspn(ptr [[STR:%.*]], ptr [[PAT:%.*]])
 ; CHECK-NEXT:    ret i64 [[RET]]
 ;
 
-  %ret = call i64 @strcspn(i8* %str, i8* %pat)
+  %ret = call i64 @strcspn(ptr %str, ptr %pat)
   ret i64 %ret
 }
index 5c62874b3b8fa1da9eb4f78f7aa48bc16a792264..bba099d9ddd22d5c7aa3b5d001a75c0f4002ebef 100644 (file)
@@ -6,15 +6,14 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 
 @null = constant [1 x i8] zeroinitializer
 
-declare double @strcspn(i8*, i8*)
+declare double @strcspn(ptr, ptr)
 
 ; Check that strcspn functions with the wrong prototype aren't simplified.
 
-define double @test_no_simplify1(i8* %pat) {
+define double @test_no_simplify1(ptr %pat) {
 ; CHECK-LABEL: @test_no_simplify1(
-  %str = getelementptr [1 x i8], [1 x i8]* @null, i32 0, i32 0
 
-  %ret = call double @strcspn(i8* %str, i8* %pat)
+  %ret = call double @strcspn(ptr @null, ptr %pat)
 ; CHECK-NEXT: call double @strcspn
   ret double %ret
 ; CHECK-NEXT: ret double %ret
index 85cfd05d4f740c033bc180ae1fe0049271dcaf0b..4cfd2bc6e106952771ddba62f3f573c7573e52dd 100644 (file)
@@ -5,11 +5,11 @@ target datalayout = "p:64:64"
 
 ; This would crash - PR50836
 
-define i64 @strlen(i32* %s) {
+define i64 @strlen(ptr %s) {
 ; CHECK-LABEL: @strlen(
-; CHECK-NEXT:    [[R:%.*]] = call i64 @strlen(i32* noundef nonnull dereferenceable(1) [[S:%.*]])
+; CHECK-NEXT:    [[R:%.*]] = call i64 @strlen(ptr noundef nonnull dereferenceable(1) [[S:%.*]])
 ; CHECK-NEXT:    ret i64 0
 ;
-  %r = call i64 @strlen(i32* %s)
+  %r = call i64 @strlen(ptr %s)
   ret i64 0
 }
index ea9f2bb48726fe597fd63f23a6810f768296e908..6f0347f73a478d4a25da100be780f2231d1e11e6 100644 (file)
@@ -3,7 +3,7 @@
 ;
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare i64 @strlen(i8*)
+declare i64 @strlen(ptr)
 
 @a5_4 = constant [5 x [4 x i8]] [[4 x i8] c"123\00", [4 x i8] c"12\00\00", [4 x i8] c"1\00\00\00", [4 x i8] zeroinitializer, [4 x i8] zeroinitializer]
 
@@ -14,8 +14,7 @@ define i64 @fold_a5_4_i0_to_3() {
 ; CHECK-LABEL: @fold_a5_4_i0_to_3(
 ; CHECK-NEXT:    ret i64 3
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 0, i64 0
-  %len = call i64 @strlen(i8* %ptr)
+  %len = call i64 @strlen(ptr @a5_4)
   ret i64 %len
 }
 
@@ -26,8 +25,8 @@ define i64 @fold_a5_4_i0_p1_to_2() {
 ; CHECK-LABEL: @fold_a5_4_i0_p1_to_2(
 ; CHECK-NEXT:    ret i64 2
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 0, i64 1
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 0, i64 1
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -38,8 +37,8 @@ define i64 @fold_a5_4_i0_p2_to_1() {
 ; CHECK-LABEL: @fold_a5_4_i0_p2_to_1(
 ; CHECK-NEXT:    ret i64 1
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 0, i64 2
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 0, i64 2
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -50,8 +49,8 @@ define i64 @fold_a5_4_i0_p3_to_0() {
 ; CHECK-LABEL: @fold_a5_4_i0_p3_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 0, i64 3
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 0, i64 3
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -62,8 +61,8 @@ define i64 @fold_a5_4_i1_to_2() {
 ; CHECK-LABEL: @fold_a5_4_i1_to_2(
 ; CHECK-NEXT:    ret i64 2
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 1, i64 0
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 1, i64 0
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -74,8 +73,8 @@ define i64 @fold_a5_4_i1_p1_to_1() {
 ; CHECK-LABEL: @fold_a5_4_i1_p1_to_1(
 ; CHECK-NEXT:    ret i64 1
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 1, i64 1
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 1, i64 1
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -86,8 +85,8 @@ define i64 @fold_a5_4_i1_p2_to_0() {
 ; CHECK-LABEL: @fold_a5_4_i1_p2_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 1, i64 2
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 1, i64 2
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -98,8 +97,8 @@ define i64 @fold_a5_4_i1_p3_to_0() {
 ; CHECK-LABEL: @fold_a5_4_i1_p3_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 1, i64 3
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 1, i64 3
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -110,8 +109,8 @@ define i64 @fold_a5_4_i2_to_1() {
 ; CHECK-LABEL: @fold_a5_4_i2_to_1(
 ; CHECK-NEXT:    ret i64 1
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 2, i64 0
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 2, i64 0
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -122,8 +121,8 @@ define i64 @fold_a5_4_i2_p1_to_0() {
 ; CHECK-LABEL: @fold_a5_4_i2_p1_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 2, i64 1
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 2, i64 1
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -134,8 +133,8 @@ define i64 @fold_a5_4_i2_p2_to_0() {
 ; CHECK-LABEL: @fold_a5_4_i2_p2_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 2, i64 2
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 2, i64 2
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -146,8 +145,8 @@ define i64 @fold_a5_4_i2_p3_to_0() {
 ; CHECK-LABEL: @fold_a5_4_i2_p3_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 2, i64 3
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 2, i64 3
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -158,8 +157,8 @@ define i64 @fold_a5_4_i3_to_0() {
 ; CHECK-LABEL: @fold_a5_4_i3_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 3, i64 0
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 3, i64 0
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -170,8 +169,8 @@ define i64 @fold_a5_4_i3_p1_to_0() {
 ; CHECK-LABEL: @fold_a5_4_i3_p1_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 3, i64 1
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 3, i64 1
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -182,8 +181,8 @@ define i64 @fold_a5_4_i3_p2_to_0() {
 ; CHECK-LABEL: @fold_a5_4_i3_p2_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 3, i64 2
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 3, i64 2
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -194,8 +193,8 @@ define i64 @fold_a5_3_i4_p3_to_0() {
 ; CHECK-LABEL: @fold_a5_3_i4_p3_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 3, i64 3
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 3, i64 3
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -206,8 +205,8 @@ define i64 @fold_a5_4_i4_to_0() {
 ; CHECK-LABEL: @fold_a5_4_i4_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 4, i64 0
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 4, i64 0
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -218,8 +217,8 @@ define i64 @fold_a5_4_i4_p1_to_0() {
 ; CHECK-LABEL: @fold_a5_4_i4_p1_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 4, i64 1
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 4, i64 1
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -230,8 +229,8 @@ define i64 @fold_a5_4_i4_p2_to_0() {
 ; CHECK-LABEL: @fold_a5_4_i4_p2_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 4, i64 2
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 4, i64 2
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -242,7 +241,7 @@ define i64 @fold_a5_4_i4_p3_to_0() {
 ; CHECK-LABEL: @fold_a5_4_i4_p3_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 4, i64 3
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 4, i64 3
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
index 2ccd4f3ae5a2cd7d5cd24ac4cb52c29564c27560..f1fe715d3893b0238df81bcaec97a20c3e3c89ad 100644 (file)
@@ -24,7 +24,7 @@
 @ax = external global [0 x i64]
 
 
-declare i64 @strlen(i8*)
+declare i64 @strlen(ptr)
 
 
 ; Fold strlen(a_s3.a) to 3.
@@ -33,8 +33,7 @@ define i64 @fold_strlen_a_S3_to_3() {
 ; CHECK-LABEL: @fold_strlen_a_S3_to_3(
 ; CHECK-NEXT:    ret i64 3
 ;
-  %ptr = getelementptr %struct.A_a4, %struct.A_a4* @a_s3, i32 0, i32 0, i32 0
-  %len = call i64 @strlen(i8* %ptr)
+  %len = call i64 @strlen(ptr @a_s3)
   ret i64 %len
 }
 
@@ -45,8 +44,8 @@ define i64 @fold_strlen_a_S3_p1_to_2() {
 ; CHECK-LABEL: @fold_strlen_a_S3_p1_to_2(
 ; CHECK-NEXT:    ret i64 2
 ;
-  %ptr = getelementptr %struct.A_a4, %struct.A_a4* @a_s3, i32 0, i32 0, i32 1
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr %struct.A_a4, ptr @a_s3, i32 0, i32 0, i32 1
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -57,8 +56,8 @@ define i64 @fold_strlen_a_S3_p2_to_1() {
 ; CHECK-LABEL: @fold_strlen_a_S3_p2_to_1(
 ; CHECK-NEXT:    ret i64 1
 ;
-  %ptr = getelementptr %struct.A_a4, %struct.A_a4* @a_s3, i32 0, i32 0, i32 2
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr %struct.A_a4, ptr @a_s3, i32 0, i32 0, i32 2
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -69,8 +68,8 @@ define i64 @fold_strlen_a_S3_p3_to_0() {
 ; CHECK-LABEL: @fold_strlen_a_S3_p3_to_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr %struct.A_a4, %struct.A_a4* @a_s3, i32 0, i32 0, i32 3
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr %struct.A_a4, ptr @a_s3, i32 0, i32 0, i32 3
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -81,8 +80,7 @@ define i64 @fold_strlen_a_S3_s4_to_3() {
 ; CHECK-LABEL: @fold_strlen_a_S3_s4_to_3(
 ; CHECK-NEXT:    ret i64 3
 ;
-  %ptr = getelementptr %struct.A_a4_a5, %struct.A_a4_a5* @a_s3_s4, i32 0, i32 0, i32 0
-  %len = call i64 @strlen(i8* %ptr)
+  %len = call i64 @strlen(ptr @a_s3_s4)
   ret i64 %len
 }
 
@@ -93,8 +91,8 @@ define i64 @fold_strlen_a_S3_p2_s4_to_1() {
 ; CHECK-LABEL: @fold_strlen_a_S3_p2_s4_to_1(
 ; CHECK-NEXT:    ret i64 1
 ;
-  %ptr = getelementptr %struct.A_a4_a5, %struct.A_a4_a5* @a_s3_s4, i32 0, i32 0, i32 2
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr %struct.A_a4_a5, ptr @a_s3_s4, i32 0, i32 0, i32 2
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -104,19 +102,18 @@ define i64 @fold_strlen_a_S3_p2_s4_to_1() {
 
 define void @fold_strlen_a_s3_S4_to_4() {
 ; CHECK-LABEL: @fold_strlen_a_s3_S4_to_4(
-; CHECK-NEXT:    store i64 4, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 0), align 4
-; CHECK-NEXT:    store i64 4, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 1), align 4
+; CHECK-NEXT:    store i64 4, ptr @ax, align 4
+; CHECK-NEXT:    store i64 4, ptr getelementptr inbounds ([0 x i64], ptr @ax, i64 0, i64 1), align 4
 ; CHECK-NEXT:    ret void
 ;
-  %p1 = getelementptr %struct.A_a4_a5, %struct.A_a4_a5* @a_s3_s4, i32 0, i32 0, i32 4
-  %len1 = call i64 @strlen(i8* %p1)
-  %pax0 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 0
-  store i64 %len1, i64* %pax0
+  %p1 = getelementptr %struct.A_a4_a5, ptr @a_s3_s4, i32 0, i32 0, i32 4
+  %len1 = call i64 @strlen(ptr %p1)
+  store i64 %len1, ptr @ax
 
-  %p2 = getelementptr %struct.A_a4_a5, %struct.A_a4_a5* @a_s3_s4, i32 0, i32 1, i32 0
-  %len2 = call i64 @strlen(i8* %p2)
-  %pax1 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 1
-  store i64 %len1, i64* %pax1
+  %p2 = getelementptr %struct.A_a4_a5, ptr @a_s3_s4, i32 0, i32 1, i32 0
+  %len2 = call i64 @strlen(ptr %p2)
+  %pax1 = getelementptr inbounds [0 x i64], ptr @ax, i64 0, i64 1
+  store i64 %len1, ptr %pax1
 
   ret void
 }
@@ -127,19 +124,18 @@ define void @fold_strlen_a_s3_S4_to_4() {
 
 define void @fold_strlen_a_s3_S4_p1_to_3() {
 ; CHECK-LABEL: @fold_strlen_a_s3_S4_p1_to_3(
-; CHECK-NEXT:    store i64 3, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 0), align 4
-; CHECK-NEXT:    store i64 3, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 1), align 4
+; CHECK-NEXT:    store i64 3, ptr @ax, align 4
+; CHECK-NEXT:    store i64 3, ptr getelementptr inbounds ([0 x i64], ptr @ax, i64 0, i64 1), align 4
 ; CHECK-NEXT:    ret void
 ;
-  %p1 = getelementptr %struct.A_a4_a5, %struct.A_a4_a5* @a_s3_s4, i32 0, i32 0, i32 5
-  %len1 = call i64 @strlen(i8* %p1)
-  %pax0 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 0
-  store i64 %len1, i64* %pax0
+  %p1 = getelementptr %struct.A_a4_a5, ptr @a_s3_s4, i32 0, i32 0, i32 5
+  %len1 = call i64 @strlen(ptr %p1)
+  store i64 %len1, ptr @ax
 
-  %p2 = getelementptr %struct.A_a4_a5, %struct.A_a4_a5* @a_s3_s4, i32 0, i32 1, i32 1
-  %len2 = call i64 @strlen(i8* %p2)
-  %pax1 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 1
-  store i64 %len1, i64* %pax1
+  %p2 = getelementptr %struct.A_a4_a5, ptr @a_s3_s4, i32 0, i32 1, i32 1
+  %len2 = call i64 @strlen(ptr %p2)
+  %pax1 = getelementptr inbounds [0 x i64], ptr @ax, i64 0, i64 1
+  store i64 %len1, ptr %pax1
 
   ret void
 }
@@ -150,19 +146,18 @@ define void @fold_strlen_a_s3_S4_p1_to_3() {
 
 define void @fold_strlen_a_s3_i32_S4_to_4() {
 ; CHECK-LABEL: @fold_strlen_a_s3_i32_S4_to_4(
-; CHECK-NEXT:    store i64 4, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 0), align 4
-; CHECK-NEXT:    store i64 4, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 1), align 4
+; CHECK-NEXT:    store i64 4, ptr @ax, align 4
+; CHECK-NEXT:    store i64 4, ptr getelementptr inbounds ([0 x i64], ptr @ax, i64 0, i64 1), align 4
 ; CHECK-NEXT:    ret void
 ;
-  %p1 = getelementptr %struct.A_a4_i32_a5, %struct.A_a4_i32_a5* @a_s3_i32_s4, i32 0, i32 0, i32 8
-  %len1 = call i64 @strlen(i8* %p1)
-  %pax0 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 0
-  store i64 %len1, i64* %pax0
+  %p1 = getelementptr %struct.A_a4_i32_a5, ptr @a_s3_i32_s4, i32 0, i32 0, i32 8
+  %len1 = call i64 @strlen(ptr %p1)
+  store i64 %len1, ptr @ax
 
-  %p2 = getelementptr %struct.A_a4_i32_a5, %struct.A_a4_i32_a5* @a_s3_i32_s4, i32 0, i32 2, i32 0
-  %len2 = call i64 @strlen(i8* %p2)
-  %pax1 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 1
-  store i64 %len1, i64* %pax1
+  %p2 = getelementptr %struct.A_a4_i32_a5, ptr @a_s3_i32_s4, i32 0, i32 2, i32 0
+  %len2 = call i64 @strlen(ptr %p2)
+  %pax1 = getelementptr inbounds [0 x i64], ptr @ax, i64 0, i64 1
+  store i64 %len1, ptr %pax1
 
   ret void
 }
@@ -173,19 +168,18 @@ define void @fold_strlen_a_s3_i32_S4_to_4() {
 
 define void @fold_strlen_a_s3_i32_S4_p1_to_3() {
 ; CHECK-LABEL: @fold_strlen_a_s3_i32_S4_p1_to_3(
-; CHECK-NEXT:    store i64 3, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 0), align 4
-; CHECK-NEXT:    store i64 3, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 1), align 4
+; CHECK-NEXT:    store i64 3, ptr @ax, align 4
+; CHECK-NEXT:    store i64 3, ptr getelementptr inbounds ([0 x i64], ptr @ax, i64 0, i64 1), align 4
 ; CHECK-NEXT:    ret void
 ;
-  %p1 = getelementptr %struct.A_a4_i32_a5, %struct.A_a4_i32_a5* @a_s3_i32_s4, i32 0, i32 0, i32 9
-  %len1 = call i64 @strlen(i8* %p1)
-  %pax0 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 0
-  store i64 %len1, i64* %pax0
+  %p1 = getelementptr %struct.A_a4_i32_a5, ptr @a_s3_i32_s4, i32 0, i32 0, i32 9
+  %len1 = call i64 @strlen(ptr %p1)
+  store i64 %len1, ptr @ax
 
-  %p2 = getelementptr %struct.A_a4_i32_a5, %struct.A_a4_i32_a5* @a_s3_i32_s4, i32 0, i32 2, i32 0
-  %len2 = call i64 @strlen(i8* %p2)
-  %pax1 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 1
-  store i64 %len1, i64* %pax1
+  %p2 = getelementptr %struct.A_a4_i32_a5, ptr @a_s3_i32_s4, i32 0, i32 2, i32 0
+  %len2 = call i64 @strlen(ptr %p2)
+  %pax1 = getelementptr inbounds [0 x i64], ptr @ax, i64 0, i64 1
+  store i64 %len1, ptr %pax1
 
   ret void
 }
@@ -196,19 +190,18 @@ define void @fold_strlen_a_s3_i32_S4_p1_to_3() {
 
 define void @fold_strlen_a_s3_i32_S4_p2_to_2() {
 ; CHECK-LABEL: @fold_strlen_a_s3_i32_S4_p2_to_2(
-; CHECK-NEXT:    store i64 2, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 0), align 4
-; CHECK-NEXT:    store i64 2, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 1), align 4
+; CHECK-NEXT:    store i64 2, ptr @ax, align 4
+; CHECK-NEXT:    store i64 2, ptr getelementptr inbounds ([0 x i64], ptr @ax, i64 0, i64 1), align 4
 ; CHECK-NEXT:    ret void
 ;
-  %p1 = getelementptr %struct.A_a4_i32_a5, %struct.A_a4_i32_a5* @a_s3_i32_s4, i32 0, i32 0, i32 10
-  %len1 = call i64 @strlen(i8* %p1)
-  %pax0 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 0
-  store i64 %len1, i64* %pax0
+  %p1 = getelementptr %struct.A_a4_i32_a5, ptr @a_s3_i32_s4, i32 0, i32 0, i32 10
+  %len1 = call i64 @strlen(ptr %p1)
+  store i64 %len1, ptr @ax
 
-  %p2 = getelementptr %struct.A_a4_i32_a5, %struct.A_a4_i32_a5* @a_s3_i32_s4, i32 0, i32 2, i32 2
-  %len2 = call i64 @strlen(i8* %p2)
-  %pax1 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 1
-  store i64 %len1, i64* %pax1
+  %p2 = getelementptr %struct.A_a4_i32_a5, ptr @a_s3_i32_s4, i32 0, i32 2, i32 2
+  %len2 = call i64 @strlen(ptr %p2)
+  %pax1 = getelementptr inbounds [0 x i64], ptr @ax, i64 0, i64 1
+  store i64 %len1, ptr %pax1
 
   ret void
 }
@@ -219,19 +212,18 @@ define void @fold_strlen_a_s3_i32_S4_p2_to_2() {
 
 define void @fold_strlen_a_s3_i32_S4_p3_to_1() {
 ; CHECK-LABEL: @fold_strlen_a_s3_i32_S4_p3_to_1(
-; CHECK-NEXT:    store i64 1, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 0), align 4
-; CHECK-NEXT:    store i64 1, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 1), align 4
+; CHECK-NEXT:    store i64 1, ptr @ax, align 4
+; CHECK-NEXT:    store i64 1, ptr getelementptr inbounds ([0 x i64], ptr @ax, i64 0, i64 1), align 4
 ; CHECK-NEXT:    ret void
 ;
-  %p1 = getelementptr %struct.A_a4_i32_a5, %struct.A_a4_i32_a5* @a_s3_i32_s4, i32 0, i32 0, i32 11
-  %len1 = call i64 @strlen(i8* %p1)
-  %pax0 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 0
-  store i64 %len1, i64* %pax0
+  %p1 = getelementptr %struct.A_a4_i32_a5, ptr @a_s3_i32_s4, i32 0, i32 0, i32 11
+  %len1 = call i64 @strlen(ptr %p1)
+  store i64 %len1, ptr @ax
 
-  %p2 = getelementptr %struct.A_a4_i32_a5, %struct.A_a4_i32_a5* @a_s3_i32_s4, i32 0, i32 2, i32 3
-  %len2 = call i64 @strlen(i8* %p2)
-  %pax1 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 1
-  store i64 %len1, i64* %pax1
+  %p2 = getelementptr %struct.A_a4_i32_a5, ptr @a_s3_i32_s4, i32 0, i32 2, i32 3
+  %len2 = call i64 @strlen(ptr %p2)
+  %pax1 = getelementptr inbounds [0 x i64], ptr @ax, i64 0, i64 1
+  store i64 %len1, ptr %pax1
 
   ret void
 }
@@ -242,19 +234,18 @@ define void @fold_strlen_a_s3_i32_S4_p3_to_1() {
 
 define void @fold_strlen_a_s3_i32_S4_p4_to_0() {
 ; CHECK-LABEL: @fold_strlen_a_s3_i32_S4_p4_to_0(
-; CHECK-NEXT:    store i64 0, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 0), align 4
-; CHECK-NEXT:    store i64 0, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 1), align 4
+; CHECK-NEXT:    store i64 0, ptr @ax, align 4
+; CHECK-NEXT:    store i64 0, ptr getelementptr inbounds ([0 x i64], ptr @ax, i64 0, i64 1), align 4
 ; CHECK-NEXT:    ret void
 ;
-  %p1 = getelementptr %struct.A_a4_i32_a5, %struct.A_a4_i32_a5* @a_s3_i32_s4, i32 0, i32 0, i32 12
-  %len1 = call i64 @strlen(i8* %p1)
-  %pax0 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 0
-  store i64 %len1, i64* %pax0
+  %p1 = getelementptr %struct.A_a4_i32_a5, ptr @a_s3_i32_s4, i32 0, i32 0, i32 12
+  %len1 = call i64 @strlen(ptr %p1)
+  store i64 %len1, ptr @ax
 
-  %p2 = getelementptr %struct.A_a4_i32_a5, %struct.A_a4_i32_a5* @a_s3_i32_s4, i32 0, i32 2, i32 4
-  %len2 = call i64 @strlen(i8* %p2)
-  %pax1 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 1
-  store i64 %len1, i64* %pax1
+  %p2 = getelementptr %struct.A_a4_i32_a5, ptr @a_s3_i32_s4, i32 0, i32 2, i32 4
+  %len2 = call i64 @strlen(ptr %p2)
+  %pax1 = getelementptr inbounds [0 x i64], ptr @ax, i64 0, i64 1
+  store i64 %len1, ptr %pax1
 
   ret void
 }
@@ -265,25 +256,24 @@ define void @fold_strlen_a_s3_i32_S4_p4_to_0() {
 
 define void @fold_strlen_ax_s() {
 ; CHECK-LABEL: @fold_strlen_ax_s(
-; CHECK-NEXT:    store i64 3, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 0), align 4
-; CHECK-NEXT:    store i64 5, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 1), align 4
-; CHECK-NEXT:    store i64 7, i64* getelementptr inbounds ([0 x i64], [0 x i64]* @ax, i64 0, i64 2), align 4
+; CHECK-NEXT:    store i64 3, ptr @ax, align 4
+; CHECK-NEXT:    store i64 5, ptr getelementptr inbounds ([0 x i64], ptr @ax, i64 0, i64 1), align 4
+; CHECK-NEXT:    store i64 7, ptr getelementptr inbounds ([0 x i64], ptr @ax, i64 0, i64 2), align 4
 ; CHECK-NEXT:    ret void
 ;
-  %pax_s3 = getelementptr { i8, [4 x i8] }, { i8, [4 x i8] }* @ax_s3, i64 0, i32 1, i64 0
-  %len3 = call i64 @strlen(i8* %pax_s3)
-  %pax1 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 0
-  store i64 %len3, i64* %pax1
-
-  %pax_s5 = getelementptr { i16, [6 x i8] }, { i16, [6 x i8] }* @ax_s5, i64 0, i32 1, i64 0
-  %len5 = call i64 @strlen(i8* %pax_s5)
-  %pax2 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 1
-  store i64 %len5, i64* %pax2
-
-  %pax_s7 = getelementptr { i32, i32, [8 x i8] }, { i32, i32, [8 x i8] }* @ax_s7, i64 0, i32 2, i64 0
-  %len7 = call i64 @strlen(i8* %pax_s7)
-  %pax3 = getelementptr inbounds [0 x i64], [0 x i64]* @ax, i64 0, i64 2
-  store i64 %len7, i64* %pax3
+  %pax_s3 = getelementptr { i8, [4 x i8] }, ptr @ax_s3, i64 0, i32 1, i64 0
+  %len3 = call i64 @strlen(ptr %pax_s3)
+  store i64 %len3, ptr @ax
+
+  %pax_s5 = getelementptr { i16, [6 x i8] }, ptr @ax_s5, i64 0, i32 1, i64 0
+  %len5 = call i64 @strlen(ptr %pax_s5)
+  %pax2 = getelementptr inbounds [0 x i64], ptr @ax, i64 0, i64 1
+  store i64 %len5, ptr %pax2
+
+  %pax_s7 = getelementptr { i32, i32, [8 x i8] }, ptr @ax_s7, i64 0, i32 2, i64 0
+  %len7 = call i64 @strlen(ptr %pax_s7)
+  %pax3 = getelementptr inbounds [0 x i64], ptr @ax, i64 0, i64 2
+  store i64 %len7, ptr %pax3
 
   ret void
 }
index 14486a8793d85003d8a03bfbd46a1fa9e3716fcf..1a12a791329b52301ec439b6312f1457039d4903 100644 (file)
@@ -3,7 +3,7 @@
 ;
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare i64 @strlen(i8*)
+declare i64 @strlen(ptr)
 
 %struct.A = type { [4 x i8], [5 x i8] }
 
@@ -13,152 +13,150 @@ declare i64 @strlen(i8*)
 ; Fold strlen(a[I].a + J) and strlen(a[I].b + J) with constant I and J
 ; to constants.
 
-define void @fold_strlen_A(i64* %plen) {
+define void @fold_strlen_A(ptr %plen) {
 ; CHECK-LABEL: @fold_strlen_A(
-; CHECK-NEXT:    store i64 1, i64* [[PLEN:%.*]], align 4
-; CHECK-NEXT:    [[PLEN1:%.*]] = getelementptr i64, i64* [[PLEN]], i64 1
-; CHECK-NEXT:    store i64 0, i64* [[PLEN1]], align 4
-; CHECK-NEXT:    [[PLEN2:%.*]] = getelementptr i64, i64* [[PLEN]], i64 2
-; CHECK-NEXT:    store i64 0, i64* [[PLEN2]], align 4
-; CHECK-NEXT:    [[PLEN3:%.*]] = getelementptr i64, i64* [[PLEN]], i64 3
-; CHECK-NEXT:    store i64 0, i64* [[PLEN3]], align 4
-; CHECK-NEXT:    [[PLEN4:%.*]] = getelementptr i64, i64* [[PLEN]], i64 4
-; CHECK-NEXT:    store i64 2, i64* [[PLEN4]], align 4
-; CHECK-NEXT:    [[PLEN5:%.*]] = getelementptr i64, i64* [[PLEN]], i64 5
-; CHECK-NEXT:    store i64 1, i64* [[PLEN5]], align 4
-; CHECK-NEXT:    [[PLEN6:%.*]] = getelementptr i64, i64* [[PLEN]], i64 6
-; CHECK-NEXT:    store i64 0, i64* [[PLEN6]], align 4
-; CHECK-NEXT:    [[PLEN7:%.*]] = getelementptr i64, i64* [[PLEN]], i64 7
-; CHECK-NEXT:    store i64 0, i64* [[PLEN7]], align 4
-; CHECK-NEXT:    [[PLEN8:%.*]] = getelementptr i64, i64* [[PLEN]], i64 8
-; CHECK-NEXT:    store i64 0, i64* [[PLEN8]], align 4
-; CHECK-NEXT:    [[PLEN9:%.*]] = getelementptr i64, i64* [[PLEN]], i64 9
-; CHECK-NEXT:    store i64 3, i64* [[PLEN9]], align 4
-; CHECK-NEXT:    [[PLEN10:%.*]] = getelementptr i64, i64* [[PLEN]], i64 10
-; CHECK-NEXT:    store i64 2, i64* [[PLEN10]], align 4
-; CHECK-NEXT:    [[PLEN11:%.*]] = getelementptr i64, i64* [[PLEN]], i64 11
-; CHECK-NEXT:    store i64 1, i64* [[PLEN11]], align 4
-; CHECK-NEXT:    [[PLEN12:%.*]] = getelementptr i64, i64* [[PLEN]], i64 12
-; CHECK-NEXT:    store i64 0, i64* [[PLEN12]], align 4
-; CHECK-NEXT:    [[PLEN14:%.*]] = getelementptr i64, i64* [[PLEN]], i64 14
-; CHECK-NEXT:    store i64 4, i64* [[PLEN14]], align 4
-; CHECK-NEXT:    [[PLEN15:%.*]] = getelementptr i64, i64* [[PLEN]], i64 15
-; CHECK-NEXT:    store i64 3, i64* [[PLEN15]], align 4
-; CHECK-NEXT:    [[PLEN16:%.*]] = getelementptr i64, i64* [[PLEN]], i64 16
-; CHECK-NEXT:    store i64 2, i64* [[PLEN16]], align 4
-; CHECK-NEXT:    [[PLEN17:%.*]] = getelementptr i64, i64* [[PLEN]], i64 17
-; CHECK-NEXT:    store i64 1, i64* [[PLEN17]], align 4
-; CHECK-NEXT:    [[PLEN18:%.*]] = getelementptr i64, i64* [[PLEN]], i64 18
-; CHECK-NEXT:    store i64 0, i64* [[PLEN18]], align 4
+; CHECK-NEXT:    store i64 1, ptr [[PLEN:%.*]], align 4
+; CHECK-NEXT:    [[PLEN1:%.*]] = getelementptr i64, ptr [[PLEN]], i64 1
+; CHECK-NEXT:    store i64 0, ptr [[PLEN1]], align 4
+; CHECK-NEXT:    [[PLEN2:%.*]] = getelementptr i64, ptr [[PLEN]], i64 2
+; CHECK-NEXT:    store i64 0, ptr [[PLEN2]], align 4
+; CHECK-NEXT:    [[PLEN3:%.*]] = getelementptr i64, ptr [[PLEN]], i64 3
+; CHECK-NEXT:    store i64 0, ptr [[PLEN3]], align 4
+; CHECK-NEXT:    [[PLEN4:%.*]] = getelementptr i64, ptr [[PLEN]], i64 4
+; CHECK-NEXT:    store i64 2, ptr [[PLEN4]], align 4
+; CHECK-NEXT:    [[PLEN5:%.*]] = getelementptr i64, ptr [[PLEN]], i64 5
+; CHECK-NEXT:    store i64 1, ptr [[PLEN5]], align 4
+; CHECK-NEXT:    [[PLEN6:%.*]] = getelementptr i64, ptr [[PLEN]], i64 6
+; CHECK-NEXT:    store i64 0, ptr [[PLEN6]], align 4
+; CHECK-NEXT:    [[PLEN7:%.*]] = getelementptr i64, ptr [[PLEN]], i64 7
+; CHECK-NEXT:    store i64 0, ptr [[PLEN7]], align 4
+; CHECK-NEXT:    [[PLEN8:%.*]] = getelementptr i64, ptr [[PLEN]], i64 8
+; CHECK-NEXT:    store i64 0, ptr [[PLEN8]], align 4
+; CHECK-NEXT:    [[PLEN9:%.*]] = getelementptr i64, ptr [[PLEN]], i64 9
+; CHECK-NEXT:    store i64 3, ptr [[PLEN9]], align 4
+; CHECK-NEXT:    [[PLEN10:%.*]] = getelementptr i64, ptr [[PLEN]], i64 10
+; CHECK-NEXT:    store i64 2, ptr [[PLEN10]], align 4
+; CHECK-NEXT:    [[PLEN11:%.*]] = getelementptr i64, ptr [[PLEN]], i64 11
+; CHECK-NEXT:    store i64 1, ptr [[PLEN11]], align 4
+; CHECK-NEXT:    [[PLEN12:%.*]] = getelementptr i64, ptr [[PLEN]], i64 12
+; CHECK-NEXT:    store i64 0, ptr [[PLEN12]], align 4
+; CHECK-NEXT:    [[PLEN14:%.*]] = getelementptr i64, ptr [[PLEN]], i64 14
+; CHECK-NEXT:    store i64 4, ptr [[PLEN14]], align 4
+; CHECK-NEXT:    [[PLEN15:%.*]] = getelementptr i64, ptr [[PLEN]], i64 15
+; CHECK-NEXT:    store i64 3, ptr [[PLEN15]], align 4
+; CHECK-NEXT:    [[PLEN16:%.*]] = getelementptr i64, ptr [[PLEN]], i64 16
+; CHECK-NEXT:    store i64 2, ptr [[PLEN16]], align 4
+; CHECK-NEXT:    [[PLEN17:%.*]] = getelementptr i64, ptr [[PLEN]], i64 17
+; CHECK-NEXT:    store i64 1, ptr [[PLEN17]], align 4
+; CHECK-NEXT:    [[PLEN18:%.*]] = getelementptr i64, ptr [[PLEN]], i64 18
+; CHECK-NEXT:    store i64 0, ptr [[PLEN18]], align 4
 ; CHECK-NEXT:    ret void
 ;
 ; Fold strlen(a[0].a) to 1.
-  %pa0a = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 0, i64 0
-  %lena0a = call i64 @strlen(i8* %pa0a)
-  %plen0 = getelementptr i64, i64* %plen, i32 0
-  store i64 %lena0a, i64* %plen0
+  %lena0a = call i64 @strlen(ptr @a)
+  store i64 %lena0a, ptr %plen
 
 ; Fold strlen(a[0].a + 1) to 0.
-  %pa0ap1 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 0, i64 1
-  %lena0ap1 = call i64 @strlen(i8* %pa0ap1)
-  %plen1 = getelementptr i64, i64* %plen, i32 1
-  store i64 %lena0ap1, i64* %plen1
+  %pa0ap1 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 0, i64 1
+  %lena0ap1 = call i64 @strlen(ptr %pa0ap1)
+  %plen1 = getelementptr i64, ptr %plen, i32 1
+  store i64 %lena0ap1, ptr %plen1
 
 ; Fold strlen(a[0].a + 2) to 0.
-  %pa0ap2 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 0, i64 2
-  %lena0ap2 = call i64 @strlen(i8* %pa0ap2)
-  %plen2 = getelementptr i64, i64* %plen, i32 2
-  store i64 %lena0ap2, i64* %plen2
+  %pa0ap2 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 0, i64 2
+  %lena0ap2 = call i64 @strlen(ptr %pa0ap2)
+  %plen2 = getelementptr i64, ptr %plen, i32 2
+  store i64 %lena0ap2, ptr %plen2
 
 ; Fold strlen(a[0].a + 3) to 0.
-  %pa0ap3 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 0, i64 3
-  %lena0ap3 = call i64 @strlen(i8* %pa0ap3)
-  %plen3 = getelementptr i64, i64* %plen, i32 3
-  store i64 %lena0ap3, i64* %plen3
+  %pa0ap3 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 0, i64 3
+  %lena0ap3 = call i64 @strlen(ptr %pa0ap3)
+  %plen3 = getelementptr i64, ptr %plen, i32 3
+  store i64 %lena0ap3, ptr %plen3
 
 ; Fold strlen(a[0].b) to 2.
-  %pa0b = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 1, i64 0
-  %lena0b = call i64 @strlen(i8* %pa0b)
-  %plen4 = getelementptr i64, i64* %plen, i32 4
-  store i64 %lena0b, i64* %plen4
+  %pa0b = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 1, i64 0
+  %lena0b = call i64 @strlen(ptr %pa0b)
+  %plen4 = getelementptr i64, ptr %plen, i32 4
+  store i64 %lena0b, ptr %plen4
 
 ; Fold strlen(a[0].b + 1) to 1.
-  %pa0bp1 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 1, i64 1
-  %lena0bp1 = call i64 @strlen(i8* %pa0bp1)
-  %plen5 = getelementptr i64, i64* %plen, i32 5
-  store i64 %lena0bp1, i64* %plen5
+  %pa0bp1 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 1, i64 1
+  %lena0bp1 = call i64 @strlen(ptr %pa0bp1)
+  %plen5 = getelementptr i64, ptr %plen, i32 5
+  store i64 %lena0bp1, ptr %plen5
 
 ; Fold strlen(a[0].b + 2) to 0.
-  %pa0bp2 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 1, i64 2
-  %lena0bp2 = call i64 @strlen(i8* %pa0bp2)
-  %plen6 = getelementptr i64, i64* %plen, i32 6
-  store i64 %lena0bp2, i64* %plen6
+  %pa0bp2 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 1, i64 2
+  %lena0bp2 = call i64 @strlen(ptr %pa0bp2)
+  %plen6 = getelementptr i64, ptr %plen, i32 6
+  store i64 %lena0bp2, ptr %plen6
 
 ; Fold strlen(a[0].b + 3) to 0.
-  %pa0bp3 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 1, i64 3
-  %lena0bp3 = call i64 @strlen(i8* %pa0bp3)
-  %plen7 = getelementptr i64, i64* %plen, i32 7
-  store i64 %lena0bp3, i64* %plen7
+  %pa0bp3 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 1, i64 3
+  %lena0bp3 = call i64 @strlen(ptr %pa0bp3)
+  %plen7 = getelementptr i64, ptr %plen, i32 7
+  store i64 %lena0bp3, ptr %plen7
 
 ; Fold strlen(a[0].b + 4) to 0.
-  %pa0bp4 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 1, i64 4
-  %lena0bp4 = call i64 @strlen(i8* %pa0bp4)
-  %plen8 = getelementptr i64, i64* %plen, i32 8
-  store i64 %lena0bp4, i64* %plen8
+  %pa0bp4 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 1, i64 4
+  %lena0bp4 = call i64 @strlen(ptr %pa0bp4)
+  %plen8 = getelementptr i64, ptr %plen, i32 8
+  store i64 %lena0bp4, ptr %plen8
 
 ; Fold strlen(a[1].a) to 3.
-  %pa1a = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 0, i64 0
-  %lena1a = call i64 @strlen(i8* %pa1a)
-  %plen9 = getelementptr i64, i64* %plen, i32 9
-  store i64 %lena1a, i64* %plen9
+  %pa1a = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 0, i64 0
+  %lena1a = call i64 @strlen(ptr %pa1a)
+  %plen9 = getelementptr i64, ptr %plen, i32 9
+  store i64 %lena1a, ptr %plen9
 
 ; Fold strlen(a[1].a + 1) to 2.
-  %pa1ap1 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 0, i64 1
-  %lena1ap1 = call i64 @strlen(i8* %pa1ap1)
-  %plen10 = getelementptr i64, i64* %plen, i32 10
-  store i64 %lena1ap1, i64* %plen10
+  %pa1ap1 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 0, i64 1
+  %lena1ap1 = call i64 @strlen(ptr %pa1ap1)
+  %plen10 = getelementptr i64, ptr %plen, i32 10
+  store i64 %lena1ap1, ptr %plen10
 
 ; Fold strlen(a[1].a + 2) to 1.
-  %pa1ap2 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 0, i64 2
-  %lena1ap2 = call i64 @strlen(i8* %pa1ap2)
-  %plen11 = getelementptr i64, i64* %plen, i32 11
-  store i64 %lena1ap2, i64* %plen11
+  %pa1ap2 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 0, i64 2
+  %lena1ap2 = call i64 @strlen(ptr %pa1ap2)
+  %plen11 = getelementptr i64, ptr %plen, i32 11
+  store i64 %lena1ap2, ptr %plen11
 
 ; Fold strlen(a[1].a + 3) to 0.
-  %pa1ap3 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 0, i64 3
-  %lena1ap3 = call i64 @strlen(i8* %pa1ap3)
-  %plen12 = getelementptr i64, i64* %plen, i32 12
-  store i64 %lena1ap3, i64* %plen12
+  %pa1ap3 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 0, i64 3
+  %lena1ap3 = call i64 @strlen(ptr %pa1ap3)
+  %plen12 = getelementptr i64, ptr %plen, i32 12
+  store i64 %lena1ap3, ptr %plen12
 
 ; Fold strlen(a[1].b) to 4.
-  %pa1b = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 1, i64 0
-  %lena1b = call i64 @strlen(i8* %pa1b)
-  %plen14 = getelementptr i64, i64* %plen, i32 14
-  store i64 %lena1b, i64* %plen14
+  %pa1b = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 1, i64 0
+  %lena1b = call i64 @strlen(ptr %pa1b)
+  %plen14 = getelementptr i64, ptr %plen, i32 14
+  store i64 %lena1b, ptr %plen14
 
 ; Fold strlen(a[1].b + 1) to 3.
-  %pa1bp1 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 1, i64 1
-  %lena1bp1 = call i64 @strlen(i8* %pa1bp1)
-  %plen15 = getelementptr i64, i64* %plen, i32 15
-  store i64 %lena1bp1, i64* %plen15
+  %pa1bp1 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 1, i64 1
+  %lena1bp1 = call i64 @strlen(ptr %pa1bp1)
+  %plen15 = getelementptr i64, ptr %plen, i32 15
+  store i64 %lena1bp1, ptr %plen15
 
 ; Fold strlen(a[1].b + 2) to 2.
-  %pa1bp2 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 1, i64 2
-  %lena1bp2 = call i64 @strlen(i8* %pa1bp2)
-  %plen16 = getelementptr i64, i64* %plen, i32 16
-  store i64 %lena1bp2, i64* %plen16
+  %pa1bp2 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 1, i64 2
+  %lena1bp2 = call i64 @strlen(ptr %pa1bp2)
+  %plen16 = getelementptr i64, ptr %plen, i32 16
+  store i64 %lena1bp2, ptr %plen16
 
 ; Fold strlen(a[1].b + 3) to 1.
-  %pa1bp3 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 1, i64 3
-  %lena1bp3 = call i64 @strlen(i8* %pa1bp3)
-  %plen17 = getelementptr i64, i64* %plen, i32 17
-  store i64 %lena1bp3, i64* %plen17
+  %pa1bp3 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 1, i64 3
+  %lena1bp3 = call i64 @strlen(ptr %pa1bp3)
+  %plen17 = getelementptr i64, ptr %plen, i32 17
+  store i64 %lena1bp3, ptr %plen17
 
 ; Fold strlen(a[1].b + 4) to 0.
-  %pa1bp4 = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 1, i64 4
-  %lena1bp4 = call i64 @strlen(i8* %pa1bp4)
-  %plen18 = getelementptr i64, i64* %plen, i32 18
-  store i64 %lena1bp4, i64* %plen18
+  %pa1bp4 = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 1, i64 4
+  %lena1bp4 = call i64 @strlen(ptr %pa1bp4)
+  %plen18 = getelementptr i64, ptr %plen, i32 18
+  store i64 %lena1bp4, ptr %plen18
 
   ret void
 }
@@ -167,44 +165,43 @@ define void @fold_strlen_A(i64* %plen) {
 ; TODO: Fold strlen(a[I].a + X) and strlen(a[I].b + X) with constant I and
 ; variable X to (X - strlen(a[I].a)) and (X - strlen(a[I].b)) respectively.
 
-define void @fold_strlen_A_pI(i64* %plen, i64 %I) {
+define void @fold_strlen_A_pI(ptr %plen, i64 %I) {
 ; CHECK-LABEL: @fold_strlen_A_pI(
-; CHECK-NEXT:    [[PA0A:%.*]] = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 0, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LENA0A:%.*]] = call i64 @strlen(i8* noundef nonnull dereferenceable(1) [[PA0A]])
-; CHECK-NEXT:    store i64 [[LENA0A]], i64* [[PLEN:%.*]], align 4
-; CHECK-NEXT:    [[PA0B:%.*]] = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 1, i64 [[I]]
-; CHECK-NEXT:    [[LENA0B:%.*]] = call i64 @strlen(i8* noundef nonnull dereferenceable(1) [[PA0B]])
-; CHECK-NEXT:    [[PLEN1:%.*]] = getelementptr i64, i64* [[PLEN]], i64 1
-; CHECK-NEXT:    store i64 [[LENA0B]], i64* [[PLEN1]], align 4
-; CHECK-NEXT:    [[PA1A:%.*]] = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 0, i64 [[I]]
-; CHECK-NEXT:    [[LENA1A:%.*]] = call i64 @strlen(i8* noundef nonnull dereferenceable(1) [[PA1A]])
-; CHECK-NEXT:    [[PLEN2:%.*]] = getelementptr i64, i64* [[PLEN]], i64 2
-; CHECK-NEXT:    store i64 [[LENA1A]], i64* [[PLEN2]], align 4
-; CHECK-NEXT:    [[PA1B:%.*]] = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 1, i64 [[I]]
-; CHECK-NEXT:    [[LENA1B:%.*]] = call i64 @strlen(i8* noundef nonnull dereferenceable(1) [[PA1B]])
-; CHECK-NEXT:    [[PLEN3:%.*]] = getelementptr i64, i64* [[PLEN]], i64 3
-; CHECK-NEXT:    store i64 [[LENA1B]], i64* [[PLEN3]], align 4
+; CHECK-NEXT:    [[PA0A:%.*]] = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 0, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LENA0A:%.*]] = call i64 @strlen(ptr noundef nonnull dereferenceable(1) [[PA0A]])
+; CHECK-NEXT:    store i64 [[LENA0A]], ptr [[PLEN:%.*]], align 4
+; CHECK-NEXT:    [[PA0B:%.*]] = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 1, i64 [[I]]
+; CHECK-NEXT:    [[LENA0B:%.*]] = call i64 @strlen(ptr noundef nonnull dereferenceable(1) [[PA0B]])
+; CHECK-NEXT:    [[PLEN1:%.*]] = getelementptr i64, ptr [[PLEN]], i64 1
+; CHECK-NEXT:    store i64 [[LENA0B]], ptr [[PLEN1]], align 4
+; CHECK-NEXT:    [[PA1A:%.*]] = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 0, i64 [[I]]
+; CHECK-NEXT:    [[LENA1A:%.*]] = call i64 @strlen(ptr noundef nonnull dereferenceable(1) [[PA1A]])
+; CHECK-NEXT:    [[PLEN2:%.*]] = getelementptr i64, ptr [[PLEN]], i64 2
+; CHECK-NEXT:    store i64 [[LENA1A]], ptr [[PLEN2]], align 4
+; CHECK-NEXT:    [[PA1B:%.*]] = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 1, i64 [[I]]
+; CHECK-NEXT:    [[LENA1B:%.*]] = call i64 @strlen(ptr noundef nonnull dereferenceable(1) [[PA1B]])
+; CHECK-NEXT:    [[PLEN3:%.*]] = getelementptr i64, ptr [[PLEN]], i64 3
+; CHECK-NEXT:    store i64 [[LENA1B]], ptr [[PLEN3]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %pa0a = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 0, i64 %I
-  %lena0a = call i64 @strlen(i8* %pa0a)
-  %plen0 = getelementptr i64, i64* %plen, i32 0
-  store i64 %lena0a, i64* %plen0
-
-  %pa0b = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 0, i32 1, i64 %I
-  %lena0b = call i64 @strlen(i8* %pa0b)
-  %plen1 = getelementptr i64, i64* %plen, i32 1
-  store i64 %lena0b, i64* %plen1
-
-  %pa1a = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 0, i64 %I
-  %lena1a = call i64 @strlen(i8* %pa1a)
-  %plen2 = getelementptr i64, i64* %plen, i32 2
-  store i64 %lena1a, i64* %plen2
-
-  %pa1b = getelementptr [2 x %struct.A], [2 x %struct.A]* @a, i64 0, i64 1, i32 1, i64 %I
-  %lena1b = call i64 @strlen(i8* %pa1b)
-  %plen3 = getelementptr i64, i64* %plen, i32 3
-  store i64 %lena1b, i64* %plen3
+  %pa0a = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 0, i64 %I
+  %lena0a = call i64 @strlen(ptr %pa0a)
+  store i64 %lena0a, ptr %plen
+
+  %pa0b = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 0, i32 1, i64 %I
+  %lena0b = call i64 @strlen(ptr %pa0b)
+  %plen1 = getelementptr i64, ptr %plen, i32 1
+  store i64 %lena0b, ptr %plen1
+
+  %pa1a = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 0, i64 %I
+  %lena1a = call i64 @strlen(ptr %pa1a)
+  %plen2 = getelementptr i64, ptr %plen, i32 2
+  store i64 %lena1a, ptr %plen2
+
+  %pa1b = getelementptr [2 x %struct.A], ptr @a, i64 0, i64 1, i32 1, i64 %I
+  %lena1b = call i64 @strlen(ptr %pa1b)
+  %plen3 = getelementptr i64, ptr %plen, i32 3
+  store i64 %lena1b, ptr %plen3
 
   ret void
 }
index a59d6ab51d371dff005c636b18410f038ad03e19..b4334ddd8f1ac323b33c3bbe337dd37839cb5833 100644 (file)
@@ -7,7 +7,7 @@
 ;
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare i64 @strlen(i8*)
+declare i64 @strlen(ptr)
 
 @a5_4 = constant [5 x [4 x i8]] [[4 x i8] c"123\00", [4 x i8] c"12\00\00", [4 x i8] c"1\00\00\00", [4 x i8] zeroinitializer, [4 x i8] zeroinitializer]
 
@@ -16,12 +16,12 @@ declare i64 @strlen(i8*)
 
 define i64 @fold_a5_4_i0_pI(i64 %I) {
 ; CHECK-LABEL: @fold_a5_4_i0_pI(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 0, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strlen(i8* noundef nonnull dereferenceable(1) [[PTR]])
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 0, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strlen(ptr noundef nonnull dereferenceable(1) [[PTR]])
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 0, i64 %I
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 0, i64 %I
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -30,12 +30,12 @@ define i64 @fold_a5_4_i0_pI(i64 %I) {
 
 define i64 @fold_a5_4_i1_pI(i64 %I) {
 ; CHECK-LABEL: @fold_a5_4_i1_pI(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 1, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strlen(i8* noundef nonnull dereferenceable(1) [[PTR]])
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 1, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strlen(ptr noundef nonnull dereferenceable(1) [[PTR]])
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 1, i64 %I
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 1, i64 %I
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -44,12 +44,12 @@ define i64 @fold_a5_4_i1_pI(i64 %I) {
 
 define i64 @fold_a5_4_i2_pI(i64 %I) {
 ; CHECK-LABEL: @fold_a5_4_i2_pI(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 2, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strlen(i8* noundef nonnull dereferenceable(1) [[PTR]])
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 2, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strlen(ptr noundef nonnull dereferenceable(1) [[PTR]])
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 2, i64 %I
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 2, i64 %I
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -58,12 +58,12 @@ define i64 @fold_a5_4_i2_pI(i64 %I) {
 
 define i64 @fold_a5_4_i3_pI_to_0(i64 %I) {
 ; CHECK-LABEL: @fold_a5_4_i3_pI_to_0(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 3, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strlen(i8* noundef nonnull dereferenceable(1) [[PTR]])
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 3, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strlen(ptr noundef nonnull dereferenceable(1) [[PTR]])
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 3, i64 %I
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 3, i64 %I
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
 
@@ -72,11 +72,11 @@ define i64 @fold_a5_4_i3_pI_to_0(i64 %I) {
 
 define i64 @fold_a5_4_i4_pI_to_0(i64 %I) {
 ; CHECK-LABEL: @fold_a5_4_i4_pI_to_0(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 4, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strlen(i8* noundef nonnull dereferenceable(1) [[PTR]])
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 4, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strlen(ptr noundef nonnull dereferenceable(1) [[PTR]])
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
-  %ptr = getelementptr [5 x [4 x i8]], [5 x [4 x i8]]* @a5_4, i64 0, i64 4, i64 %I
-  %len = call i64 @strlen(i8* %ptr)
+  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 4, i64 %I
+  %len = call i64 @strlen(ptr %ptr)
   ret i64 %len
 }
index bea9ec1de3826957156a44fb37d34646351d8b38..4e0d728fb184e5297684a5a3b7facb6d770d91ae 100644 (file)
@@ -5,7 +5,7 @@
 ;
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare i64 @strlen(i8*)
+declare i64 @strlen(ptr)
 
 @a5 = constant [5 x i8] c"12345"
 @s5 = constant [6 x i8] c"12345\00"
@@ -17,75 +17,72 @@ declare i64 @strlen(i8*)
 ; making the library calls even though it prevents sanitizers from reporting
 ; the bugs.
 
-define void @fold_strlen_no_nul(i64* %plen, i32 %i) {
+define void @fold_strlen_no_nul(ptr %plen, i32 %i) {
 ; CHECK-LABEL: @fold_strlen_no_nul(
-; CHECK-NEXT:    store i64 5, i64* [[PLEN:%.*]], align 4
-; CHECK-NEXT:    [[PNA5_P5:%.*]] = getelementptr i64, i64* [[PLEN]], i64 1
-; CHECK-NEXT:    store i64 0, i64* [[PNA5_P5]], align 4
-; CHECK-NEXT:    [[PNS5_P6:%.*]] = getelementptr i64, i64* [[PLEN]], i64 2
-; CHECK-NEXT:    store i64 0, i64* [[PNS5_P6]], align 4
+; CHECK-NEXT:    store i64 5, ptr [[PLEN:%.*]], align 4
+; CHECK-NEXT:    [[PNA5_P5:%.*]] = getelementptr i64, ptr [[PLEN]], i64 1
+; CHECK-NEXT:    store i64 0, ptr [[PNA5_P5]], align 4
+; CHECK-NEXT:    [[PNS5_P6:%.*]] = getelementptr i64, ptr [[PLEN]], i64 2
+; CHECK-NEXT:    store i64 0, ptr [[PNS5_P6]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = sext i32 [[I:%.*]] to i64
-; CHECK-NEXT:    [[PA5_PI:%.*]] = getelementptr [5 x i8], [5 x i8]* @a5, i64 0, i64 [[TMP1]]
-; CHECK-NEXT:    [[NA5_PI:%.*]] = call i64 @strlen(i8* noundef nonnull dereferenceable(1) [[PA5_PI]])
-; CHECK-NEXT:    [[PNA5_PI:%.*]] = getelementptr i64, i64* [[PLEN]], i64 3
-; CHECK-NEXT:    store i64 [[NA5_PI]], i64* [[PNA5_PI]], align 4
-; CHECK-NEXT:    [[PNZ0_P0:%.*]] = getelementptr i64, i64* [[PLEN]], i64 4
-; CHECK-NEXT:    store i64 0, i64* [[PNZ0_P0]], align 4
+; CHECK-NEXT:    [[PA5_PI:%.*]] = getelementptr [5 x i8], ptr @a5, i64 0, i64 [[TMP1]]
+; CHECK-NEXT:    [[NA5_PI:%.*]] = call i64 @strlen(ptr noundef nonnull dereferenceable(1) [[PA5_PI]])
+; CHECK-NEXT:    [[PNA5_PI:%.*]] = getelementptr i64, ptr [[PLEN]], i64 3
+; CHECK-NEXT:    store i64 [[NA5_PI]], ptr [[PNA5_PI]], align 4
+; CHECK-NEXT:    [[PNZ0_P0:%.*]] = getelementptr i64, ptr [[PLEN]], i64 4
+; CHECK-NEXT:    store i64 0, ptr [[PNZ0_P0]], align 4
 ; CHECK-NEXT:    [[TMP2:%.*]] = sext i32 [[I]] to i64
-; CHECK-NEXT:    [[PZ0_PI:%.*]] = getelementptr [0 x i8], [0 x i8]* @z0, i64 0, i64 [[TMP2]]
-; CHECK-NEXT:    [[NZ0_PI:%.*]] = call i64 @strlen(i8* noundef nonnull dereferenceable(1) [[PZ0_PI]])
-; CHECK-NEXT:    [[PNZ0_PI:%.*]] = getelementptr i64, i64* [[PLEN]], i64 5
-; CHECK-NEXT:    store i64 [[NZ0_PI]], i64* [[PNZ0_PI]], align 4
-; CHECK-NEXT:    [[PNZ5_P5:%.*]] = getelementptr i64, i64* [[PLEN]], i64 6
-; CHECK-NEXT:    store i64 0, i64* [[PNZ5_P5]], align 4
+; CHECK-NEXT:    [[PZ0_PI:%.*]] = getelementptr [0 x i8], ptr @z0, i64 0, i64 [[TMP2]]
+; CHECK-NEXT:    [[NZ0_PI:%.*]] = call i64 @strlen(ptr noundef nonnull dereferenceable(1) [[PZ0_PI]])
+; CHECK-NEXT:    [[PNZ0_PI:%.*]] = getelementptr i64, ptr [[PLEN]], i64 5
+; CHECK-NEXT:    store i64 [[NZ0_PI]], ptr [[PNZ0_PI]], align 4
+; CHECK-NEXT:    [[PNZ5_P5:%.*]] = getelementptr i64, ptr [[PLEN]], i64 6
+; CHECK-NEXT:    store i64 0, ptr [[PNZ5_P5]], align 4
 ; CHECK-NEXT:    ret void
 ;
 ; Verify that strlen(a5) is folded to 5.
-  %pa0_p0 = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 0
-  %na5_p0 = call i64 @strlen(i8* %pa0_p0)
-  %pna5_p0 = getelementptr i64, i64* %plen, i64 0
-  store i64 %na5_p0, i64* %pna5_p0
+  %na5_p0 = call i64 @strlen(ptr @a5)
+  store i64 %na5_p0, ptr %plen
 
 ; Verify that strlen(a5 + 5) is folded to 0.
-  %pa5_p5 = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 5
-  %na5_p5 = call i64 @strlen(i8* %pa5_p5)
-  %pna5_p5 = getelementptr i64, i64* %plen, i64 1
-  store i64 %na5_p5, i64* %pna5_p5
+  %pa5_p5 = getelementptr [5 x i8], ptr @a5, i32 0, i32 5
+  %na5_p5 = call i64 @strlen(ptr %pa5_p5)
+  %pna5_p5 = getelementptr i64, ptr %plen, i64 1
+  store i64 %na5_p5, ptr %pna5_p5
 
 ; Verify that strlen(s5 + 6) is folded to 0.
-  %ps5_p6 = getelementptr [6 x i8], [6 x i8]* @s5, i32 0, i32 6
-  %ns5_p6 = call i64 @strlen(i8* %ps5_p6)
-  %pns5_p6 = getelementptr i64, i64* %plen, i64 2
-  store i64 %ns5_p6, i64* %pns5_p6
+  %ps5_p6 = getelementptr [6 x i8], ptr @s5, i32 0, i32 6
+  %ns5_p6 = call i64 @strlen(ptr %ps5_p6)
+  %pns5_p6 = getelementptr i64, ptr %plen, i64 2
+  store i64 %ns5_p6, ptr %pns5_p6
 
 ; TODO: Verify that strlen(a5 + i) is folded to 5 - i?  It's currently
 ; not folded because the variable offset makes getConstantDataArrayInfo
 ; fail.
-  %pa5_pi = getelementptr [5 x i8], [5 x i8]* @a5, i32 0, i32 %i
-  %na5_pi = call i64 @strlen(i8* %pa5_pi)
-  %pna5_pi = getelementptr i64, i64* %plen, i64 3
-  store i64 %na5_pi, i64* %pna5_pi
+  %pa5_pi = getelementptr [5 x i8], ptr @a5, i32 0, i32 %i
+  %na5_pi = call i64 @strlen(ptr %pa5_pi)
+  %pna5_pi = getelementptr i64, ptr %plen, i64 3
+  store i64 %na5_pi, ptr %pna5_pi
 
 ; Verify that strlen(z0) is folded to 0.
-  %pz0_p0 = getelementptr [0 x i8], [0 x i8]* @z0, i32 0, i32 0
-  %nz0_p0 = call i64 @strlen(i8* %pz0_p0)
-  %pnz0_p0 = getelementptr i64, i64* %plen, i64 4
-  store i64 %nz0_p0, i64* %pnz0_p0
+  %nz0_p0 = call i64 @strlen(ptr @z0)
+  %pnz0_p0 = getelementptr i64, ptr %plen, i64 4
+  store i64 %nz0_p0, ptr %pnz0_p0
 
 ; TODO: Verify that strlen(z0 + i) is folded to 0.  As the case above,
 ; this one is not folded either because the variable offset makes
 ; getConstantDataArrayInfo fail.
 
-  %pz0_pi = getelementptr [0 x i8], [0 x i8]* @z0, i32 0, i32 %i
-  %nz0_pi = call i64 @strlen(i8* %pz0_pi)
-  %pnz0_pi = getelementptr i64, i64* %plen, i64 5
-  store i64 %nz0_pi, i64* %pnz0_pi
+  %pz0_pi = getelementptr [0 x i8], ptr @z0, i32 0, i32 %i
+  %nz0_pi = call i64 @strlen(ptr %pz0_pi)
+  %pnz0_pi = getelementptr i64, ptr %plen, i64 5
+  store i64 %nz0_pi, ptr %pnz0_pi
 
 ; Verify that strlen(z5 + 5) is folded to 0.
-  %pz5_p5 = getelementptr [5 x i8], [5 x i8]* @z5, i32 0, i32 5
-  %nz5_p5 = call i64 @strlen(i8* %pz5_p5)
-  %pnz5_p5 = getelementptr i64, i64* %plen, i64 6
-  store i64 %nz5_p5, i64* %pnz5_p5
+  %pz5_p5 = getelementptr [5 x i8], ptr @z5, i32 0, i32 5
+  %nz5_p5 = call i64 @strlen(ptr %pz5_p5)
+  %pnz5_p5 = getelementptr i64, ptr %plen, i64 6
+  store i64 %nz5_p5, ptr %pnz5_p5
 
   ret void
 }
index 006dac56b873edc9d2ebe1cee9e042277beedba6..0e2ad6e648e396d5b836a25ded88fb79abb0a6a1 100644 (file)
@@ -7,41 +7,41 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @hello = constant [6 x i8] c"hello\00"
 @hello_no_nul = constant [5 x i8] c"hello"
 
-declare i32 @__strlen_chk(i8*, i32)
+declare i32 @__strlen_chk(ptr, i32)
 
 ; Check __strlen_chk(string constant) -> strlen or constants
 
 ; CHECK-LABEL: @unknown_str_known_object_size
-define i32 @unknown_str_known_object_size(i8* %c) {
+define i32 @unknown_str_known_object_size(ptr %c) {
   ; CHECK: call i32 @__strlen_chk
-  %1 = call i32 @__strlen_chk(i8* %c, i32 8)
+  %1 = call i32 @__strlen_chk(ptr %c, i32 8)
   ret i32 %1
 }
 
 ; CHECK-LABEL: @known_str_known_object_size
-define i32 @known_str_known_object_size(i8* %c) {
+define i32 @known_str_known_object_size(ptr %c) {
   ; CHECK: ret i32 5
-  %1 = call i32 @__strlen_chk(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @hello, i32 0, i32 0), i32 6)
+  %1 = call i32 @__strlen_chk(ptr @hello, i32 6)
   ret i32 %1
 }
 
 ; CHECK-LABEL: @known_str_too_small_object_size
-define i32 @known_str_too_small_object_size(i8* %c) {
+define i32 @known_str_too_small_object_size(ptr %c) {
   ; CHECK: call i32 @__strlen_chk
-  %1 = call i32 @__strlen_chk(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @hello, i32 0, i32 0), i32 5)
+  %1 = call i32 @__strlen_chk(ptr @hello, i32 5)
   ret i32 %1
 }
 
 ; CHECK-LABEL: @known_str_no_nul
-define i32 @known_str_no_nul(i8* %c) {
+define i32 @known_str_no_nul(ptr %c) {
   ; CHECK: call i32 @__strlen_chk
-  %1 = call i32 @__strlen_chk(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @hello_no_nul, i32 0, i32 0), i32 5)
+  %1 = call i32 @__strlen_chk(ptr @hello_no_nul, i32 5)
   ret i32 %1
 }
 
 ; CHECK-LABEL: @unknown_str_unknown_object_size
-define i32 @unknown_str_unknown_object_size(i8* %c) {
+define i32 @unknown_str_unknown_object_size(ptr %c) {
   ; CHECK: call i32 @strlen
-  %1 = call i32 @__strlen_chk(i8* %c, i32 -1)
+  %1 = call i32 @__strlen_chk(ptr %c, i32 -1)
   ret i32 %1
 }
index 22ecb43b7cf6ca51b5156871f2a59af8758a112b..ffd4b52b9f1946bc06cafdbc33fdeb3398f35ba7 100644 (file)
@@ -8,30 +8,26 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @null = constant [1 x i8] zeroinitializer
 @null_hello = constant [7 x i8] c"\00hello\00"
 
-declare i8* @strncat(i8*, i8*, i32)
-declare i32 @puts(i8*)
+declare ptr @strncat(ptr, ptr, i32)
+declare i32 @puts(ptr)
 
 define i32 @main() {
 ; CHECK-LABEL: @main(
-; CHECK-NOT: call i8* @strncat
+; CHECK-NOT: call ptr @strncat
 ; CHECK: call i32 @puts
 
   %target = alloca [1024 x i8]
-  %arg1 = getelementptr [1024 x i8], [1024 x i8]* %target, i32 0, i32 0
-  store i8 0, i8* %arg1
+  store i8 0, ptr %target
 
   ; rslt1 = strncat(target, "hello\00")
-  %arg2 = getelementptr [6 x i8], [6 x i8]* @hello, i32 0, i32 0
-  %rslt1 = call i8* @strncat(i8* %arg1, i8* %arg2, i32 6)
+  %rslt1 = call ptr @strncat(ptr %target, ptr @hello, i32 6)
 
   ; rslt2 = strncat(rslt1, "\00")
-  %arg3 = getelementptr [1 x i8], [1 x i8]* @null, i32 0, i32 0
-  %rslt2 = call i8* @strncat(i8* %rslt1, i8* %arg3, i32 42)
+  %rslt2 = call ptr @strncat(ptr %rslt1, ptr @null, i32 42)
 
   ; rslt3 = strncat(rslt2, "\00hello\00")
-  %arg4 = getelementptr [7 x i8], [7 x i8]* @null_hello, i32 0, i32 0
-  %rslt3 = call i8* @strncat(i8* %rslt2, i8* %arg4, i32 42)
+  %rslt3 = call ptr @strncat(ptr %rslt2, ptr @null_hello, i32 42)
 
-  call i32 @puts(i8* %rslt3)
+  call i32 @puts(ptr %rslt3)
   ret i32 0
 }
index 79ccaf466996e0525bb8c4adde9858eb75e2b156..da16448983552b5120897981c404612d79970310 100644 (file)
@@ -9,32 +9,30 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @bell = constant [5 x i8] c"bell\00"
 @null = constant [1 x i8] zeroinitializer
 
-declare i32 @strncmp(i8*, i8*, i32)
+declare i32 @strncmp(ptr, ptr, i32)
 
 ; strncmp("", x, n) -> -*x
-define i32 @test1(i8* %str2) {
+define i32 @test1(ptr %str2) {
 ; CHECK-LABEL: @test1(
-; CHECK-NEXT:    [[STRCMPLOAD:%.*]] = load i8, i8* [[STR2:%.*]], align 1
+; CHECK-NEXT:    [[STRCMPLOAD:%.*]] = load i8, ptr [[STR2:%.*]], align 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = zext i8 [[STRCMPLOAD]] to i32
 ; CHECK-NEXT:    [[TMP2:%.*]] = sub nsw i32 0, [[TMP1]]
 ; CHECK-NEXT:    ret i32 [[TMP2]]
 ;
 
-  %str1 = getelementptr inbounds [1 x i8], [1 x i8]* @null, i32 0, i32 0
-  %temp1 = call i32 @strncmp(i8* %str1, i8* %str2, i32 10)
+  %temp1 = call i32 @strncmp(ptr @null, ptr %str2, i32 10)
   ret i32 %temp1
 }
 
 ; strncmp(x, "", n) -> *x
-define i32 @test2(i8* %str1) {
+define i32 @test2(ptr %str1) {
 ; CHECK-LABEL: @test2(
-; CHECK-NEXT:    [[STRCMPLOAD:%.*]] = load i8, i8* [[STR1:%.*]], align 1
+; CHECK-NEXT:    [[STRCMPLOAD:%.*]] = load i8, ptr [[STR1:%.*]], align 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = zext i8 [[STRCMPLOAD]] to i32
 ; CHECK-NEXT:    ret i32 [[TMP1]]
 ;
 
-  %str2 = getelementptr inbounds [1 x i8], [1 x i8]* @null, i32 0, i32 0
-  %temp1 = call i32 @strncmp(i8* %str1, i8* %str2, i32 10)
+  %temp1 = call i32 @strncmp(ptr %str1, ptr @null, i32 10)
   ret i32 %temp1
 }
 
@@ -44,9 +42,7 @@ define i32 @test3() {
 ; CHECK-NEXT:    ret i32 -1
 ;
 
-  %str1 = getelementptr inbounds [5 x i8], [5 x i8]* @hell, i32 0, i32 0
-  %str2 = getelementptr inbounds [6 x i8], [6 x i8]* @hello, i32 0, i32 0
-  %temp1 = call i32 @strncmp(i8* %str1, i8* %str2, i32 10)
+  %temp1 = call i32 @strncmp(ptr @hell, ptr @hello, i32 10)
   ret i32 %temp1
 }
 
@@ -55,9 +51,7 @@ define i32 @test4() {
 ; CHECK-NEXT:    ret i32 1
 ;
 
-  %str1 = getelementptr inbounds [5 x i8], [5 x i8]* @hell, i32 0, i32 0
-  %str2 = getelementptr inbounds [1 x i8], [1 x i8]* @null, i32 0, i32 0
-  %temp1 = call i32 @strncmp(i8* %str1, i8* %str2, i32 10)
+  %temp1 = call i32 @strncmp(ptr @hell, ptr @null, i32 10)
   ret i32 %temp1
 }
 
@@ -66,85 +60,83 @@ define i32 @test5() {
 ; CHECK-NEXT:    ret i32 0
 ;
 
-  %str1 = getelementptr inbounds [5 x i8], [5 x i8]* @hell, i32 0, i32 0
-  %str2 = getelementptr inbounds [6 x i8], [6 x i8]* @hello, i32 0, i32 0
-  %temp1 = call i32 @strncmp(i8* %str1, i8* %str2, i32 4)
+  %temp1 = call i32 @strncmp(ptr @hell, ptr @hello, i32 4)
   ret i32 %temp1
 }
 
 ; strncmp(x,y,1) -> memcmp(x,y,1)
-define i32 @test6(i8* %str1, i8* %str2) {
+define i32 @test6(ptr %str1, ptr %str2) {
 ; CHECK-LABEL: @test6(
-; CHECK-NEXT:    [[LHSC:%.*]] = load i8, i8* [[STR1:%.*]], align 1
+; CHECK-NEXT:    [[LHSC:%.*]] = load i8, ptr [[STR1:%.*]], align 1
 ; CHECK-NEXT:    [[LHSV:%.*]] = zext i8 [[LHSC]] to i32
-; CHECK-NEXT:    [[RHSC:%.*]] = load i8, i8* [[STR2:%.*]], align 1
+; CHECK-NEXT:    [[RHSC:%.*]] = load i8, ptr [[STR2:%.*]], align 1
 ; CHECK-NEXT:    [[RHSV:%.*]] = zext i8 [[RHSC]] to i32
 ; CHECK-NEXT:    [[CHARDIFF:%.*]] = sub nsw i32 [[LHSV]], [[RHSV]]
 ; CHECK-NEXT:    ret i32 [[CHARDIFF]]
 ;
 
-  %temp1 = call i32 @strncmp(i8* %str1, i8* %str2, i32 1)
+  %temp1 = call i32 @strncmp(ptr %str1, ptr %str2, i32 1)
   ret i32 %temp1
 }
 
 ; strncmp(x,y,0)   -> 0
-define i32 @test7(i8* %str1, i8* %str2) {
+define i32 @test7(ptr %str1, ptr %str2) {
 ; CHECK-LABEL: @test7(
 ; CHECK-NEXT:    ret i32 0
 ;
 
-  %temp1 = call i32 @strncmp(i8* %str1, i8* %str2, i32 0)
+  %temp1 = call i32 @strncmp(ptr %str1, ptr %str2, i32 0)
   ret i32 %temp1
 }
 
 ; strncmp(x,x,n)  -> 0
-define i32 @test8(i8* %str, i32 %n) {
+define i32 @test8(ptr %str, i32 %n) {
 ; CHECK-LABEL: @test8(
 ; CHECK-NEXT:    ret i32 0
 ;
 
-  %temp1 = call i32 @strncmp(i8* %str, i8* %str, i32 %n)
+  %temp1 = call i32 @strncmp(ptr %str, ptr %str, i32 %n)
   ret i32 %temp1
 }
 
 ; strncmp(nonnull x, nonnull y, n)  -> strncmp(x, y, n)
-define i32 @test9(i8* %str1, i8* %str2, i32 %n) {
+define i32 @test9(ptr %str1, ptr %str2, i32 %n) {
 ; CHECK-LABEL: @test9(
-; CHECK-NEXT:    [[TEMP1:%.*]] = call i32 @strncmp(i8* nonnull [[STR1:%.*]], i8* nonnull [[STR2:%.*]], i32 [[N:%.*]])
+; CHECK-NEXT:    [[TEMP1:%.*]] = call i32 @strncmp(ptr nonnull [[STR1:%.*]], ptr nonnull [[STR2:%.*]], i32 [[N:%.*]])
 ; CHECK-NEXT:    ret i32 [[TEMP1]]
 ;
 
-  %temp1 = call i32 @strncmp(i8* nonnull %str1, i8* nonnull %str2, i32 %n)
+  %temp1 = call i32 @strncmp(ptr nonnull %str1, ptr nonnull %str2, i32 %n)
   ret i32 %temp1
 }
 
 ; strncmp(nonnull x, nonnull y, 0)  -> 0
-define i32 @test10(i8* %str1, i8* %str2, i32 %n) {
+define i32 @test10(ptr %str1, ptr %str2, i32 %n) {
 ; CHECK-LABEL: @test10(
 ; CHECK-NEXT:    ret i32 0
 ;
 
-  %temp1 = call i32 @strncmp(i8* nonnull %str1, i8* nonnull %str2, i32 0)
+  %temp1 = call i32 @strncmp(ptr nonnull %str1, ptr nonnull %str2, i32 0)
   ret i32 %temp1
 }
 
 ; strncmp(x, y, 5)  -> strncmp(nonnull x, nonnull y, 5)
-define i32 @test11(i8* %str1, i8* %str2, i32 %n) {
+define i32 @test11(ptr %str1, ptr %str2, i32 %n) {
 ; CHECK-LABEL: @test11(
-; CHECK-NEXT:    [[TEMP1:%.*]] = call i32 @strncmp(i8* noundef nonnull dereferenceable(1) [[STR1:%.*]], i8* noundef nonnull dereferenceable(1) [[STR2:%.*]], i32 5)
+; CHECK-NEXT:    [[TEMP1:%.*]] = call i32 @strncmp(ptr noundef nonnull dereferenceable(1) [[STR1:%.*]], ptr noundef nonnull dereferenceable(1) [[STR2:%.*]], i32 5)
 ; CHECK-NEXT:    ret i32 [[TEMP1]]
 ;
 
-  %temp1 = call i32 @strncmp(i8* %str1, i8* %str2, i32 5)
+  %temp1 = call i32 @strncmp(ptr %str1, ptr %str2, i32 5)
   ret i32 %temp1
 }
 
-define i32 @test12(i8* %str1, i8* %str2, i32 %n) null_pointer_is_valid {
+define i32 @test12(ptr %str1, ptr %str2, i32 %n) null_pointer_is_valid {
 ; CHECK-LABEL: @test12(
-; CHECK-NEXT:    [[TEMP1:%.*]] = call i32 @strncmp(i8* [[STR1:%.*]], i8* [[STR2:%.*]], i32 [[N:%.*]])
+; CHECK-NEXT:    [[TEMP1:%.*]] = call i32 @strncmp(ptr [[STR1:%.*]], ptr [[STR2:%.*]], i32 [[N:%.*]])
 ; CHECK-NEXT:    ret i32 [[TEMP1]]
 ;
 
-  %temp1 = call i32 @strncmp(i8* %str1, i8* %str2, i32 %n)
+  %temp1 = call i32 @strncmp(ptr %str1, ptr %str2, i32 %n)
   ret i32 %temp1
 }
index 6d1348de68354bbeab8c1509df579297a6d8e9aa..0e019dad3a02ac081209947a9c61a65d62778f3a 100644 (file)
@@ -8,55 +8,53 @@
 
 @a = constant %struct.A { [3 x i8] c"123", [4 x i8] c"1231", [4 x i8] c"2345" }
 
-declare i32 @strncmp(i8*, i8*, i64)
+declare i32 @strncmp(ptr, ptr, i64)
 
-define void @fold_strncmp_Aa_b(i32* %pcmp) {
+define void @fold_strncmp_Aa_b(ptr %pcmp) {
 ; CHECK-LABEL: @fold_strncmp_Aa_b(
-; CHECK-NEXT:    store i32 0, i32* [[PCMP:%.*]], align 4
-; CHECK-NEXT:    [[PCMP1:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; CHECK-NEXT:    store i32 0, i32* [[PCMP1]], align 4
-; CHECK-NEXT:    [[PCMP2:%.*]] = getelementptr i32, i32* [[PCMP]], i64 2
-; CHECK-NEXT:    store i32 0, i32* [[PCMP2]], align 4
-; CHECK-NEXT:    [[PCMP3:%.*]] = getelementptr i32, i32* [[PCMP]], i64 3
-; CHECK-NEXT:    store i32 0, i32* [[PCMP3]], align 4
-; CHECK-NEXT:    [[PCMP4:%.*]] = getelementptr i32, i32* [[PCMP]], i64 4
-; CHECK-NEXT:    store i32 0, i32* [[PCMP4]], align 4
-; CHECK-NEXT:    [[PCMP5:%.*]] = getelementptr i32, i32* [[PCMP]], i64 5
-; CHECK-NEXT:    store i32 0, i32* [[PCMP5]], align 4
-; CHECK-NEXT:    [[PCMP6:%.*]] = getelementptr i32, i32* [[PCMP]], i64 6
-; CHECK-NEXT:    store i32 0, i32* [[PCMP6]], align 4
-; CHECK-NEXT:    [[PCMP7:%.*]] = getelementptr i32, i32* [[PCMP]], i64 7
-; CHECK-NEXT:    store i32 -1, i32* [[PCMP7]], align 4
-; CHECK-NEXT:    [[PCMP8:%.*]] = getelementptr i32, i32* [[PCMP]], i64 8
-; CHECK-NEXT:    store i32 -1, i32* [[PCMP8]], align 4
-; CHECK-NEXT:    [[PCMP9:%.*]] = getelementptr i32, i32* [[PCMP]], i64 9
-; CHECK-NEXT:    store i32 -1, i32* [[PCMP9]], align 4
+; CHECK-NEXT:    store i32 0, ptr [[PCMP:%.*]], align 4
+; CHECK-NEXT:    [[PCMP1:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; CHECK-NEXT:    store i32 0, ptr [[PCMP1]], align 4
+; CHECK-NEXT:    [[PCMP2:%.*]] = getelementptr i32, ptr [[PCMP]], i64 2
+; CHECK-NEXT:    store i32 0, ptr [[PCMP2]], align 4
+; CHECK-NEXT:    [[PCMP3:%.*]] = getelementptr i32, ptr [[PCMP]], i64 3
+; CHECK-NEXT:    store i32 0, ptr [[PCMP3]], align 4
+; CHECK-NEXT:    [[PCMP4:%.*]] = getelementptr i32, ptr [[PCMP]], i64 4
+; CHECK-NEXT:    store i32 0, ptr [[PCMP4]], align 4
+; CHECK-NEXT:    [[PCMP5:%.*]] = getelementptr i32, ptr [[PCMP]], i64 5
+; CHECK-NEXT:    store i32 0, ptr [[PCMP5]], align 4
+; CHECK-NEXT:    [[PCMP6:%.*]] = getelementptr i32, ptr [[PCMP]], i64 6
+; CHECK-NEXT:    store i32 0, ptr [[PCMP6]], align 4
+; CHECK-NEXT:    [[PCMP7:%.*]] = getelementptr i32, ptr [[PCMP]], i64 7
+; CHECK-NEXT:    store i32 -1, ptr [[PCMP7]], align 4
+; CHECK-NEXT:    [[PCMP8:%.*]] = getelementptr i32, ptr [[PCMP]], i64 8
+; CHECK-NEXT:    store i32 -1, ptr [[PCMP8]], align 4
+; CHECK-NEXT:    [[PCMP9:%.*]] = getelementptr i32, ptr [[PCMP]], i64 9
+; CHECK-NEXT:    store i32 -1, ptr [[PCMP9]], align 4
 ; CHECK-NEXT:    ret void
 ;
 ; p1 = a.a
-  %p1 = getelementptr %struct.A, %struct.A* @a, i32 0, i32 0, i32 0
 ; p2 = a.b
-  %p2 = getelementptr %struct.A, %struct.A* @a, i32 0, i32 1, i32 0
+  %p2 = getelementptr %struct.A, ptr @a, i32 0, i32 1, i32 0
 
 ; Fold strncmp(a.a = "123", a.b = "1231", 0) to 0.
-  %cmp0 = call i32 @strncmp(i8* %p1, i8* %p2, i64 0)
-  %pcmp0 = getelementptr i32, i32* %pcmp, i64 0
-  store i32 %cmp0, i32* %pcmp0
+  %cmp0 = call i32 @strncmp(ptr @a, ptr %p2, i64 0)
+  store i32 %cmp0, ptr %pcmp
 
 ; Fold strncmp(a.a = "123", a.b = "1231", 1) to 0.
-  %cmp1 = call i32 @strncmp(i8* %p1, i8* %p2, i64 1)
-  %pcmp1 = getelementptr i32, i32* %pcmp, i64 1
-  store i32 %cmp1, i32* %pcmp1
+  %cmp1 = call i32 @strncmp(ptr @a, ptr %p2, i64 1)
+  %pcmp1 = getelementptr i32, ptr %pcmp, i64 1
+  store i32 %cmp1, ptr %pcmp1
 
 ; Fold strncmp(a.a = "123", a.b = "1231", 2) to 0.
-  %cmp2 = call i32 @strncmp(i8* %p1, i8* %p2, i64 2)
-  %pcmp2 = getelementptr i32, i32* %pcmp, i64 2
-  store i32 %cmp2, i32* %pcmp2
+  %cmp2 = call i32 @strncmp(ptr @a, ptr %p2, i64 2)
+  %pcmp2 = getelementptr i32, ptr %pcmp, i64 2
+  store i32 %cmp2, ptr %pcmp2
 
 ; Fold strncmp(a.a = "123", a.b = "1231", 3) to 0.
-  %cmp3 = call i32 @strncmp(i8* %p1, i8* %p2, i64 3)
-  %pcmp3 = getelementptr i32, i32* %pcmp, i64 3
-  store i32 %cmp3, i32* %pcmp3
+  %cmp3 = call i32 @strncmp(ptr @a, ptr %p2, i64 3)
+  %pcmp3 = getelementptr i32, ptr %pcmp, i64 3
+  store i32 %cmp3, ptr %pcmp3
 
 ; Fold strncmp(a.a = "123", a.b = "1231", 4) to 0.
 ; In this and the subsequent tests, reading past the end of a.a is
@@ -64,88 +62,86 @@ define void @fold_strncmp_Aa_b(i32* %pcmp) {
 ; subobject) but handling such cases as if they were well-defined is
 ; simpler than trying to exclude them.
 
-  %cmp4 = call i32 @strncmp(i8* %p1, i8* %p2, i64 4)
-  %pcmp4 = getelementptr i32, i32* %pcmp, i64 4
-  store i32 %cmp4, i32* %pcmp4
+  %cmp4 = call i32 @strncmp(ptr @a, ptr %p2, i64 4)
+  %pcmp4 = getelementptr i32, ptr %pcmp, i64 4
+  store i32 %cmp4, ptr %pcmp4
 
 ; Fold strncmp("123", "1231" "2", 5) to 0.
-  %cmp5 = call i32 @strncmp(i8* %p1, i8* %p2, i64 5)
-  %pcmp5 = getelementptr i32, i32* %pcmp, i64 5
-  store i32 %cmp5, i32* %pcmp5
+  %cmp5 = call i32 @strncmp(ptr @a, ptr %p2, i64 5)
+  %pcmp5 = getelementptr i32, ptr %pcmp, i64 5
+  store i32 %cmp5, ptr %pcmp5
 
 ; Fold strncmp("123", "1231" "23", 6) to 0.
-  %cmp6 = call i32 @strncmp(i8* %p1, i8* %p2, i64 6)
-  %pcmp6 = getelementptr i32, i32* %pcmp, i64 6
-  store i32 %cmp6, i32* %pcmp6
+  %cmp6 = call i32 @strncmp(ptr @a, ptr %p2, i64 6)
+  %pcmp6 = getelementptr i32, ptr %pcmp, i64 6
+  store i32 %cmp6, ptr %pcmp6
 
 ; Fold strncmp("123", "1231" "2345", 7) to 1.
-  %cmp7 = call i32 @strncmp(i8* %p1, i8* %p2, i64 7)
-  %pcmp7 = getelementptr i32, i32* %pcmp, i64 7
-  store i32 %cmp7, i32* %pcmp7
+  %cmp7 = call i32 @strncmp(ptr @a, ptr %p2, i64 7)
+  %pcmp7 = getelementptr i32, ptr %pcmp, i64 7
+  store i32 %cmp7, ptr %pcmp7
 
 ; Fold strncmp("123", "1231" "2345", 8) to 1.
-  %cmp8 = call i32 @strncmp(i8* %p1, i8* %p2, i64 8)
-  %pcmp8 = getelementptr i32, i32* %pcmp, i64 8
-  store i32 %cmp8, i32* %pcmp8
+  %cmp8 = call i32 @strncmp(ptr @a, ptr %p2, i64 8)
+  %pcmp8 = getelementptr i32, ptr %pcmp, i64 8
+  store i32 %cmp8, ptr %pcmp8
 
 ; Fold strncmp("123", "1231" "2345", 9) to 1.
-  %cmp9 = call i32 @strncmp(i8* %p1, i8* %p2, i64 9)
-  %pcmp9 = getelementptr i32, i32* %pcmp, i64 9
-  store i32 %cmp9, i32* %pcmp9
+  %cmp9 = call i32 @strncmp(ptr @a, ptr %p2, i64 9)
+  %pcmp9 = getelementptr i32, ptr %pcmp, i64 9
+  store i32 %cmp9, ptr %pcmp9
 
   ret void
 }
 
 
-define void @fold_strncmp_Ab_a(i32* %pcmp) {
+define void @fold_strncmp_Ab_a(ptr %pcmp) {
 ; CHECK-LABEL: @fold_strncmp_Ab_a(
-; CHECK-NEXT:    store i32 0, i32* [[PCMP:%.*]], align 4
-; CHECK-NEXT:    [[PCMP1:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; CHECK-NEXT:    store i32 0, i32* [[PCMP1]], align 4
-; CHECK-NEXT:    [[PCMP2:%.*]] = getelementptr i32, i32* [[PCMP]], i64 2
-; CHECK-NEXT:    store i32 0, i32* [[PCMP2]], align 4
-; CHECK-NEXT:    [[PCMP3:%.*]] = getelementptr i32, i32* [[PCMP]], i64 3
-; CHECK-NEXT:    store i32 0, i32* [[PCMP3]], align 4
-; CHECK-NEXT:    [[PCMP4:%.*]] = getelementptr i32, i32* [[PCMP]], i64 4
-; CHECK-NEXT:    store i32 1, i32* [[PCMP4]], align 4
-; CHECK-NEXT:    [[PCMP5:%.*]] = getelementptr i32, i32* [[PCMP]], i64 5
-; CHECK-NEXT:    store i32 1, i32* [[PCMP5]], align 4
+; CHECK-NEXT:    store i32 0, ptr [[PCMP:%.*]], align 4
+; CHECK-NEXT:    [[PCMP1:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; CHECK-NEXT:    store i32 0, ptr [[PCMP1]], align 4
+; CHECK-NEXT:    [[PCMP2:%.*]] = getelementptr i32, ptr [[PCMP]], i64 2
+; CHECK-NEXT:    store i32 0, ptr [[PCMP2]], align 4
+; CHECK-NEXT:    [[PCMP3:%.*]] = getelementptr i32, ptr [[PCMP]], i64 3
+; CHECK-NEXT:    store i32 0, ptr [[PCMP3]], align 4
+; CHECK-NEXT:    [[PCMP4:%.*]] = getelementptr i32, ptr [[PCMP]], i64 4
+; CHECK-NEXT:    store i32 1, ptr [[PCMP4]], align 4
+; CHECK-NEXT:    [[PCMP5:%.*]] = getelementptr i32, ptr [[PCMP]], i64 5
+; CHECK-NEXT:    store i32 1, ptr [[PCMP5]], align 4
 ; CHECK-NEXT:    ret void
 ;
 ; p1 = &a.b[3]
-  %p1 = getelementptr %struct.A, %struct.A* @a, i32 0, i32 1, i32 3
+  %p1 = getelementptr %struct.A, ptr @a, i32 0, i32 1, i32 3
 ; p2 = &a.a
-  %p2 = getelementptr %struct.A, %struct.A* @a, i32 0, i32 0, i32 0
 
 ; Fold strncmp(a.a = "123", &a.b[3] = "1" "2345", 0) to 0.
-  %cmp0 = call i32 @strncmp(i8* %p1, i8* %p2, i64 0)
-  %pcmp0 = getelementptr i32, i32* %pcmp, i64 0
-  store i32 %cmp0, i32* %pcmp0
+  %cmp0 = call i32 @strncmp(ptr %p1, ptr @a, i64 0)
+  store i32 %cmp0, ptr %pcmp
 
 ; Fold strncmp(a.a = "123", &a.b[3] = "1" "2345", 1) to 0.
-  %cmp1 = call i32 @strncmp(i8* %p1, i8* %p2, i64 1)
-  %pcmp1 = getelementptr i32, i32* %pcmp, i64 1
-  store i32 %cmp1, i32* %pcmp1
+  %cmp1 = call i32 @strncmp(ptr %p1, ptr @a, i64 1)
+  %pcmp1 = getelementptr i32, ptr %pcmp, i64 1
+  store i32 %cmp1, ptr %pcmp1
 
 ; Fold strncmp(a.a = "123", &a.b[3] = "1" "2345", 2) to 0.
-  %cmp2 = call i32 @strncmp(i8* %p1, i8* %p2, i64 2)
-  %pcmp2 = getelementptr i32, i32* %pcmp, i64 2
-  store i32 %cmp2, i32* %pcmp2
+  %cmp2 = call i32 @strncmp(ptr %p1, ptr @a, i64 2)
+  %pcmp2 = getelementptr i32, ptr %pcmp, i64 2
+  store i32 %cmp2, ptr %pcmp2
 
 ; Fold strncmp(a.a = "123", &a.b[3] = "1" "2345", 3) to 0.
-  %cmp3 = call i32 @strncmp(i8* %p1, i8* %p2, i64 3)
-  %pcmp3 = getelementptr i32, i32* %pcmp, i64 3
-  store i32 %cmp3, i32* %pcmp3
+  %cmp3 = call i32 @strncmp(ptr %p1, ptr @a, i64 3)
+  %pcmp3 = getelementptr i32, ptr %pcmp, i64 3
+  store i32 %cmp3, ptr %pcmp3
 
 ; Fold strncmp(a.a = "123", &a.b[3] = "1" "2345", 4) to 1.
-  %cmp4 = call i32 @strncmp(i8* %p1, i8* %p2, i64 4)
-  %pcmp4 = getelementptr i32, i32* %pcmp, i64 4
-  store i32 %cmp4, i32* %pcmp4
+  %cmp4 = call i32 @strncmp(ptr %p1, ptr @a, i64 4)
+  %pcmp4 = getelementptr i32, ptr %pcmp, i64 4
+  store i32 %cmp4, ptr %pcmp4
 
 ; Fold strncmp(a.a = "123", &a.b[3] = "1" "2345", 5) to 1.
-  %cmp5 = call i32 @strncmp(i8* %p1, i8* %p2, i64 5)
-  %pcmp5 = getelementptr i32, i32* %pcmp, i64 5
-  store i32 %cmp5, i32* %pcmp5
+  %cmp5 = call i32 @strncmp(ptr %p1, ptr @a, i64 5)
+  %pcmp5 = getelementptr i32, ptr %pcmp, i64 5
+  store i32 %cmp5, ptr %pcmp5
 
   ret void
 }
index 59443174bd37f8a434fcece81ab16d0a5bc932e9..6d2eb9739229f02eaf4f7a9680c2b08b0b07680f 100644 (file)
@@ -4,7 +4,7 @@
 ; Exercise folding of strncmp calls with constant arrays including both
 ; negative and positive characters and both constant and nonconstant sizes.
 
-declare i32 @strncmp(i8*, i8*, i64)
+declare i32 @strncmp(ptr, ptr, i64)
 
 @a = constant [7 x i8] c"abcdef\7f"
 @b = constant [7 x i8] c"abcdef\80"
@@ -13,42 +13,41 @@ declare i32 @strncmp(i8*, i8*, i64)
 ; Exercise strncmp(A + C, B + C, 2) folding of small arrays that differ in
 ; a character with the opposite sign and a constant size.
 
-define void @fold_strncmp_cst_cst(i32* %pcmp) {
+define void @fold_strncmp_cst_cst(ptr %pcmp) {
 ; CHECK-LABEL: @fold_strncmp_cst_cst(
-; CHECK-NEXT:    store i32 -1, i32* [[PCMP:%.*]], align 4
-; CHECK-NEXT:    [[SB5_A5:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; CHECK-NEXT:    store i32 1, i32* [[SB5_A5]], align 4
-; CHECK-NEXT:    [[SA6_B6:%.*]] = getelementptr i32, i32* [[PCMP]], i64 2
-; CHECK-NEXT:    store i32 -1, i32* [[SA6_B6]], align 4
-; CHECK-NEXT:    [[SB6_A6:%.*]] = getelementptr i32, i32* [[PCMP]], i64 3
-; CHECK-NEXT:    store i32 1, i32* [[SB6_A6]], align 4
+; CHECK-NEXT:    store i32 -1, ptr [[PCMP:%.*]], align 4
+; CHECK-NEXT:    [[SB5_A5:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; CHECK-NEXT:    store i32 1, ptr [[SB5_A5]], align 4
+; CHECK-NEXT:    [[SA6_B6:%.*]] = getelementptr i32, ptr [[PCMP]], i64 2
+; CHECK-NEXT:    store i32 -1, ptr [[SA6_B6]], align 4
+; CHECK-NEXT:    [[SB6_A6:%.*]] = getelementptr i32, ptr [[PCMP]], i64 3
+; CHECK-NEXT:    store i32 1, ptr [[SB6_A6]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %p5 = getelementptr [7 x i8], [7 x i8]* @a, i64 0, i64 5
-  %p6 = getelementptr [7 x i8], [7 x i8]* @a, i64 0, i64 6
+  %p5 = getelementptr [7 x i8], ptr @a, i64 0, i64 5
+  %p6 = getelementptr [7 x i8], ptr @a, i64 0, i64 6
 
-  %q5 = getelementptr [7 x i8], [7 x i8]* @b, i64 0, i64 5
-  %q6 = getelementptr [7 x i8], [7 x i8]* @b, i64 0, i64 6
+  %q5 = getelementptr [7 x i8], ptr @b, i64 0, i64 5
+  %q6 = getelementptr [7 x i8], ptr @b, i64 0, i64 6
 
   ; Fold strncmp(a + 5, b + 5, 2) to -1.
-  %ca5_b5 = call i32 @strncmp(i8* %p5, i8* %q5, i64 2)
-  %sa5_b5 = getelementptr i32, i32* %pcmp, i64 0
-  store i32 %ca5_b5, i32* %sa5_b5
+  %ca5_b5 = call i32 @strncmp(ptr %p5, ptr %q5, i64 2)
+  store i32 %ca5_b5, ptr %pcmp
 
   ; Fold strncmp(b + 5, a + 5, 2) to +1.
-  %cb5_a5 = call i32 @strncmp(i8* %q5, i8* %p5, i64 2)
-  %sb5_a5 = getelementptr i32, i32* %pcmp, i64 1
-  store i32 %cb5_a5, i32* %sb5_a5
+  %cb5_a5 = call i32 @strncmp(ptr %q5, ptr %p5, i64 2)
+  %sb5_a5 = getelementptr i32, ptr %pcmp, i64 1
+  store i32 %cb5_a5, ptr %sb5_a5
 
   ; Fold strncmp(a + 6, b + 6, 1) to -1.
-  %ca6_b6 = call i32 @strncmp(i8* %p6, i8* %q6, i64 1)
-  %sa6_b6 = getelementptr i32, i32* %pcmp, i64 2
-  store i32 %ca6_b6, i32* %sa6_b6
+  %ca6_b6 = call i32 @strncmp(ptr %p6, ptr %q6, i64 1)
+  %sa6_b6 = getelementptr i32, ptr %pcmp, i64 2
+  store i32 %ca6_b6, ptr %sa6_b6
 
   ; Fold strncmp(b + 6, a + 6, 1) to  +1.
-  %cb6_a6 = call i32 @strncmp(i8* %q6, i8* %p6, i64 1)
-  %sb6_a6 = getelementptr i32, i32* %pcmp, i64 3
-  store i32 %cb6_a6, i32* %sb6_a6
+  %cb6_a6 = call i32 @strncmp(ptr %q6, ptr %p6, i64 1)
+  %sb6_a6 = getelementptr i32, ptr %pcmp, i64 3
+  store i32 %cb6_a6, ptr %sb6_a6
 
   ret void
 }
@@ -57,50 +56,47 @@ define void @fold_strncmp_cst_cst(i32* %pcmp) {
 ; Exercise strncmp(A, B, N) folding of arrays that differ in a character
 ; with the opposite sign and a variable size
 
-define void @fold_strncmp_cst_var(i32* %pcmp, i64 %n) {
+define void @fold_strncmp_cst_var(ptr %pcmp, i64 %n) {
 ; CHECK-LABEL: @fold_strncmp_cst_var(
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ugt i64 [[N:%.*]], 6
 ; CHECK-NEXT:    [[TMP2:%.*]] = sext i1 [[TMP1]] to i32
-; CHECK-NEXT:    store i32 [[TMP2]], i32* [[PCMP:%.*]], align 4
+; CHECK-NEXT:    store i32 [[TMP2]], ptr [[PCMP:%.*]], align 4
 ; CHECK-NEXT:    [[TMP3:%.*]] = icmp ugt i64 [[N]], 6
 ; CHECK-NEXT:    [[TMP4:%.*]] = zext i1 [[TMP3]] to i32
-; CHECK-NEXT:    [[SB0_A0:%.*]] = getelementptr i32, i32* [[PCMP]], i64 1
-; CHECK-NEXT:    store i32 [[TMP4]], i32* [[SB0_A0]], align 4
+; CHECK-NEXT:    [[SB0_A0:%.*]] = getelementptr i32, ptr [[PCMP]], i64 1
+; CHECK-NEXT:    store i32 [[TMP4]], ptr [[SB0_A0]], align 4
 ; CHECK-NEXT:    [[TMP5:%.*]] = icmp ne i64 [[N]], 0
 ; CHECK-NEXT:    [[TMP6:%.*]] = sext i1 [[TMP5]] to i32
-; CHECK-NEXT:    [[SA6_B6:%.*]] = getelementptr i32, i32* [[PCMP]], i64 2
-; CHECK-NEXT:    store i32 [[TMP6]], i32* [[SA6_B6]], align 4
+; CHECK-NEXT:    [[SA6_B6:%.*]] = getelementptr i32, ptr [[PCMP]], i64 2
+; CHECK-NEXT:    store i32 [[TMP6]], ptr [[SA6_B6]], align 4
 ; CHECK-NEXT:    [[TMP7:%.*]] = icmp ne i64 [[N]], 0
 ; CHECK-NEXT:    [[TMP8:%.*]] = zext i1 [[TMP7]] to i32
-; CHECK-NEXT:    [[SB6_A6:%.*]] = getelementptr i32, i32* [[PCMP]], i64 3
-; CHECK-NEXT:    store i32 [[TMP8]], i32* [[SB6_A6]], align 4
+; CHECK-NEXT:    [[SB6_A6:%.*]] = getelementptr i32, ptr [[PCMP]], i64 3
+; CHECK-NEXT:    store i32 [[TMP8]], ptr [[SB6_A6]], align 4
 ; CHECK-NEXT:    ret void
 ;
-  %p0 = getelementptr [7 x i8], [7 x i8]* @a, i64 0, i64 0
-  %p6 = getelementptr [7 x i8], [7 x i8]* @a, i64 0, i64 6
+  %p6 = getelementptr [7 x i8], ptr @a, i64 0, i64 6
 
-  %q0 = getelementptr [7 x i8], [7 x i8]* @b, i64 0, i64 0
-  %q6 = getelementptr [7 x i8], [7 x i8]* @b, i64 0, i64 6
+  %q6 = getelementptr [7 x i8], ptr @b, i64 0, i64 6
 
   ; Fold strncmp(a, b, n) to -1.
-  %ca0_b0 = call i32 @strncmp(i8* %p0, i8* %q0, i64 %n)
-  %sa0_b0 = getelementptr i32, i32* %pcmp, i64 0
-  store i32 %ca0_b0, i32* %sa0_b0
+  %ca0_b0 = call i32 @strncmp(ptr @a, ptr @b, i64 %n)
+  store i32 %ca0_b0, ptr %pcmp
 
   ; Fold strncmp(b, a, n) to +1.
-  %cb0_a0 = call i32 @strncmp(i8* %q0, i8* %p0, i64 %n)
-  %sb0_a0 = getelementptr i32, i32* %pcmp, i64 1
-  store i32 %cb0_a0, i32* %sb0_a0
+  %cb0_a0 = call i32 @strncmp(ptr @b, ptr @a, i64 %n)
+  %sb0_a0 = getelementptr i32, ptr %pcmp, i64 1
+  store i32 %cb0_a0, ptr %sb0_a0
 
   ; Fold strncmp(a + 6, b + 6, n) to -1.
-  %ca6_b6 = call i32 @strncmp(i8* %p6, i8* %q6, i64 %n)
-  %sa6_b6 = getelementptr i32, i32* %pcmp, i64 2
-  store i32 %ca6_b6, i32* %sa6_b6
+  %ca6_b6 = call i32 @strncmp(ptr %p6, ptr %q6, i64 %n)
+  %sa6_b6 = getelementptr i32, ptr %pcmp, i64 2
+  store i32 %ca6_b6, ptr %sa6_b6
 
   ; Fold strncmp(b + 6, a + 6, n) to +1.
-  %cb6_a6 = call i32 @strncmp(i8* %q6, i8* %p6, i64 %n)
-  %sb6_a6 = getelementptr i32, i32* %pcmp, i64 3
-  store i32 %cb6_a6, i32* %sb6_a6
+  %cb6_a6 = call i32 @strncmp(ptr %q6, ptr %p6, i64 %n)
+  %sb6_a6 = getelementptr i32, ptr %pcmp, i64 3
+  store i32 %cb6_a6, ptr %sb6_a6
 
   ret void
 }
index 495ed25c36657f77f1cccc48ce77aaddc6311f17..e5da923221627adccc4b3f321e9002365a210111 100644 (file)
@@ -5,12 +5,12 @@
 
 target datalayout = "e-p:64:64:64"
 
-declare i32 @strncmp(i8*, i8*, i32)
+declare i32 @strncmp(ptr, ptr, i32)
 
-define i32 @test6(i8* %str1, i8* %str2) {
+define i32 @test6(ptr %str1, ptr %str2) {
 ; CHECK-LABEL: @test6(
-; CHECK: call i32 @strncmp(i8* %str1, i8* %str2, i32 1)
+; CHECK: call i32 @strncmp(ptr %str1, ptr %str2, i32 1)
 
-  %temp1 = call i32 @strncmp(i8* %str1, i8* %str2, i32 1)
+  %temp1 = call i32 @strncmp(ptr %str1, ptr %str2, i32 1)
   ret i32 %temp1
 }
index e07d19a315c4f90cfe54702b040d1cdd834077f3..fb76f977b362848990569a9a45c6f6356ce0d4cf 100644 (file)
@@ -6,53 +6,50 @@
 @str2 = constant [3 x i8] c"abc"
 @str3 = constant [4 x i8] c"abcd"
 
-declare i8* @strncpy(i8*, i8*, i64)
+declare ptr @strncpy(ptr, ptr, i64)
 
 
-define void @fill_with_zeros(i8* %dst) {
+define void @fill_with_zeros(ptr %dst) {
 ; CHECK-LABEL: @fill_with_zeros(
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8* [[DST:%.*]] to i32*
-; CHECK-NEXT:    store i32 97, i32* [[TMP1]], align 1
+; CHECK-NEXT:    store i32 97, ptr [[DST:%.*]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  tail call i8* @strncpy(i8* %dst, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @str, i64 0, i64 0), i64 4)
+  tail call ptr @strncpy(ptr %dst, ptr @str, i64 4)
   ret void
 }
 
-define void @fill_with_zeros2(i8* %dst) {
+define void @fill_with_zeros2(ptr %dst) {
 ; CHECK-LABEL: @fill_with_zeros2(
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8* [[DST:%.*]] to i32*
-; CHECK-NEXT:    store i32 6513249, i32* [[TMP1]], align 1
+; CHECK-NEXT:    store i32 6513249, ptr [[DST:%.*]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  tail call i8* @strncpy(i8* %dst, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @str2, i64 0, i64 0), i64 4)
+  tail call ptr @strncpy(ptr %dst, ptr @str2, i64 4)
   ret void
 }
 
-define void @fill_with_zeros3(i8* %dst) {
+define void @fill_with_zeros3(ptr %dst) {
 ; CHECK-LABEL: @fill_with_zeros3(
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8* [[DST:%.*]] to i32*
-; CHECK-NEXT:    store i32 1684234849, i32* [[TMP1]], align 1
+; CHECK-NEXT:    store i32 1684234849, ptr [[DST:%.*]], align 1
 ; CHECK-NEXT:    ret void
 ;
-  tail call i8* @strncpy(i8* %dst, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @str3, i64 0, i64 0), i64 4)
+  tail call ptr @strncpy(ptr %dst, ptr @str3, i64 4)
   ret void
 }
 
-define void @fill_with_zeros4(i8* %dst) {
+define void @fill_with_zeros4(ptr %dst) {
 ; CHECK-LABEL: @fill_with_zeros4(
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 1 dereferenceable(128) [[DST:%.*]], i8* noundef nonnull align 1 dereferenceable(128) getelementptr inbounds ([129 x i8], [129 x i8]* @str.2, i64 0, i64 0), i64 128, i1 false)
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(128) [[DST:%.*]], ptr noundef nonnull align 1 dereferenceable(128) @str.2, i64 128, i1 false)
 ; CHECK-NEXT:    ret void
 ;
-  tail call i8* @strncpy(i8* %dst, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @str3, i64 0, i64 0), i64 128)
+  tail call ptr @strncpy(ptr %dst, ptr @str3, i64 128)
   ret void
 }
 
-define void @no_simplify(i8* %dst) {
+define void @no_simplify(ptr %dst) {
 ; CHECK-LABEL: @no_simplify(
-; CHECK-NEXT:    [[TMP1:%.*]] = tail call i8* @strncpy(i8* noundef nonnull dereferenceable(1) [[DST:%.*]], i8* noundef nonnull dereferenceable(5) getelementptr inbounds ([4 x i8], [4 x i8]* @str3, i64 0, i64 0), i64 129)
+; CHECK-NEXT:    [[TMP1:%.*]] = tail call ptr @strncpy(ptr noundef nonnull dereferenceable(1) [[DST:%.*]], ptr noundef nonnull dereferenceable(5) @str3, i64 129)
 ; CHECK-NEXT:    ret void
 ;
-  tail call i8* @strncpy(i8* %dst, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @str3, i64 0, i64 0), i64 129)
+  tail call ptr @strncpy(ptr %dst, ptr @str3, i64 129)
   ret void
 }
index 6b9f79b09261e0633eaa57d6ca54be0e2f368b0e..aa70e76e20ed9097bccc7d8133b7d656ced49f7e 100644 (file)
@@ -5,31 +5,31 @@
 ;
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare i8* @strncpy(i8*, i8*, i64)
+declare ptr @strncpy(ptr, ptr, i64)
 
 ; A string of length 4 but size 9 to also verify that characters after
 ; the nul don't affect the transformation.
 @s4 = constant [9 x i8] c"1234\00567\00"
 
-declare void @sink(i8*, i8*)
+declare void @sink(ptr, ptr)
 
 
 ; Verify that exactly overlapping strncpy(D, D, N) calls are simplified
 ; only when N < 2.
 
-define void @fold_strncpy_overlap(i8* %dst, i64 %n) {
+define void @fold_strncpy_overlap(ptr %dst, i64 %n) {
 ; CHECK-LABEL: @fold_strncpy_overlap(
-; CHECK-NEXT:    call void @sink(i8* [[DST:%.*]], i8* [[DST]])
-; CHECK-NEXT:    call void @sink(i8* [[DST]], i8* [[DST]])
+; CHECK-NEXT:    call void @sink(ptr [[DST:%.*]], ptr [[DST]])
+; CHECK-NEXT:    call void @sink(ptr [[DST]], ptr [[DST]])
 ; CHECK-NEXT:    ret void
 ;
 ; Fold strncpy(D, D, 0) to D.
-  %ed_0 = call i8* @strncpy(i8* %dst, i8* %dst, i64 0)
-  call void @sink(i8* %dst, i8* %ed_0)
+  %ed_0 = call ptr @strncpy(ptr %dst, ptr %dst, i64 0)
+  call void @sink(ptr %dst, ptr %ed_0)
 
 ; Fold strncpy(D, D, 1) to D.
-  %ed_1 = call i8* @strncpy(i8* %dst, i8* %dst, i64 1)
-  call void @sink(i8* %dst, i8* %ed_1)
+  %ed_1 = call ptr @strncpy(ptr %dst, ptr %dst, i64 1)
+  call void @sink(ptr %dst, ptr %ed_1)
 
   ret void
 }
@@ -42,28 +42,28 @@ define void @fold_strncpy_overlap(i8* %dst, i64 %n) {
 ;   memset(D + strnlen(D, N), D, N - strnlen(D, N))
 ; there is little to gain from it.
 
-define void @call_strncpy_overlap(i8* %dst, i64 %n) {
+define void @call_strncpy_overlap(ptr %dst, i64 %n) {
 ; CHECK-LABEL: @call_strncpy_overlap(
-; CHECK-NEXT:    [[ED_2:%.*]] = call i8* @strncpy(i8* noundef nonnull dereferenceable(1) [[DST:%.*]], i8* noundef nonnull dereferenceable(1) [[DST]], i64 2)
-; CHECK-NEXT:    call void @sink(i8* [[DST]], i8* [[ED_2]])
-; CHECK-NEXT:    [[ED_3:%.*]] = call i8* @strncpy(i8* noundef nonnull dereferenceable(1) [[DST]], i8* noundef nonnull dereferenceable(1) [[DST]], i64 3)
-; CHECK-NEXT:    call void @sink(i8* [[DST]], i8* [[ED_3]])
-; CHECK-NEXT:    [[ED_N:%.*]] = call i8* @strncpy(i8* [[DST]], i8* [[DST]], i64 [[N:%.*]])
-; CHECK-NEXT:    call void @sink(i8* [[DST]], i8* [[ED_N]])
+; CHECK-NEXT:    [[ED_2:%.*]] = call ptr @strncpy(ptr noundef nonnull dereferenceable(1) [[DST:%.*]], ptr noundef nonnull dereferenceable(1) [[DST]], i64 2)
+; CHECK-NEXT:    call void @sink(ptr [[DST]], ptr [[ED_2]])
+; CHECK-NEXT:    [[ED_3:%.*]] = call ptr @strncpy(ptr noundef nonnull dereferenceable(1) [[DST]], ptr noundef nonnull dereferenceable(1) [[DST]], i64 3)
+; CHECK-NEXT:    call void @sink(ptr [[DST]], ptr [[ED_3]])
+; CHECK-NEXT:    [[ED_N:%.*]] = call ptr @strncpy(ptr [[DST]], ptr [[DST]], i64 [[N:%.*]])
+; CHECK-NEXT:    call void @sink(ptr [[DST]], ptr [[ED_N]])
 ; CHECK-NEXT:    ret void
 ;
 
 ; Do not transform strncpy(D, D, 2).
-  %ed_2 = call i8* @strncpy(i8* %dst, i8* %dst, i64 2)
-  call void @sink(i8* %dst, i8* %ed_2)
+  %ed_2 = call ptr @strncpy(ptr %dst, ptr %dst, i64 2)
+  call void @sink(ptr %dst, ptr %ed_2)
 
 ; Do not transform strncpy(D, D, 3).
-  %ed_3 = call i8* @strncpy(i8* %dst, i8* %dst, i64 3)
-  call void @sink(i8* %dst, i8* %ed_3)
+  %ed_3 = call ptr @strncpy(ptr %dst, ptr %dst, i64 3)
+  call void @sink(ptr %dst, ptr %ed_3)
 
 ; Do not transform strncpy(D, D, N).
-  %ed_n = call i8* @strncpy(i8* %dst, i8* %dst, i64 %n)
-  call void @sink(i8* %dst, i8* %ed_n)
+  %ed_n = call ptr @strncpy(ptr %dst, ptr %dst, i64 %n)
+  call void @sink(ptr %dst, ptr %ed_n)
 
   ret void
 }
@@ -71,41 +71,40 @@ define void @call_strncpy_overlap(i8* %dst, i64 %n) {
 
 ; Verify that strncpy(D, "", N) calls are transformed to memset(D, 0, N).
 
-define void @fold_strncpy_s0(i8* %dst, i64 %n) {
+define void @fold_strncpy_s0(ptr %dst, i64 %n) {
 ; CHECK-LABEL: @fold_strncpy_s0(
-; CHECK-NEXT:    call void @sink(i8* [[DST:%.*]], i8* [[DST]])
-; CHECK-NEXT:    store i8 0, i8* [[DST]], align 1
-; CHECK-NEXT:    call void @sink(i8* nonnull [[DST]], i8* nonnull [[DST]])
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8* [[DST]] to i16*
-; CHECK-NEXT:    store i16 0, i16* [[TMP1]], align 1
-; CHECK-NEXT:    call void @sink(i8* nonnull [[DST]], i8* nonnull [[DST]])
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i64(i8* noundef nonnull align 1 dereferenceable(9) [[DST]], i8 0, i64 9, i1 false)
-; CHECK-NEXT:    call void @sink(i8* nonnull [[DST]], i8* nonnull [[DST]])
-; CHECK-NEXT:    call void @llvm.memset.p0i8.i64(i8* nonnull align 1 [[DST]], i8 0, i64 [[N:%.*]], i1 false)
-; CHECK-NEXT:    call void @sink(i8* nonnull [[DST]], i8* nonnull [[DST]])
+; CHECK-NEXT:    call void @sink(ptr [[DST:%.*]], ptr [[DST]])
+; CHECK-NEXT:    store i8 0, ptr [[DST]], align 1
+; CHECK-NEXT:    call void @sink(ptr nonnull [[DST]], ptr nonnull [[DST]])
+; CHECK-NEXT:    store i16 0, ptr [[DST]], align 1
+; CHECK-NEXT:    call void @sink(ptr nonnull [[DST]], ptr nonnull [[DST]])
+; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr noundef nonnull align 1 dereferenceable(9) [[DST]], i8 0, i64 9, i1 false)
+; CHECK-NEXT:    call void @sink(ptr nonnull [[DST]], ptr nonnull [[DST]])
+; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr nonnull align 1 [[DST]], i8 0, i64 [[N:%.*]], i1 false)
+; CHECK-NEXT:    call void @sink(ptr nonnull [[DST]], ptr nonnull [[DST]])
 ; CHECK-NEXT:    ret void
 ;
-  %ps0 = getelementptr [9 x i8], [9 x i8]* @s4, i32 0, i32 4
+  %ps0 = getelementptr [9 x i8], ptr @s4, i32 0, i32 4
 
 ; Fold strncpy(D, "", 0) to just D.
-  %es0_0 = call i8* @strncpy(i8* %dst, i8* %ps0, i64 0)
-  call void @sink(i8* %dst, i8* %es0_0)
+  %es0_0 = call ptr @strncpy(ptr %dst, ptr %ps0, i64 0)
+  call void @sink(ptr %dst, ptr %es0_0)
 
 ; Transform strncpy(D, "", 1) to *D = '\0, D.
-  %es0_1 = call i8* @strncpy(i8* %dst, i8* %ps0, i64 1)
-  call void @sink(i8* %dst, i8* %es0_1)
+  %es0_1 = call ptr @strncpy(ptr %dst, ptr %ps0, i64 1)
+  call void @sink(ptr %dst, ptr %es0_1)
 
 ; Transform strncpy(D, "", 2) to memset(D, 0, 2), D.
-  %es0_2 = call i8* @strncpy(i8* %dst, i8* %ps0, i64 2)
-  call void @sink(i8* %dst, i8* %es0_2)
+  %es0_2 = call ptr @strncpy(ptr %dst, ptr %ps0, i64 2)
+  call void @sink(ptr %dst, ptr %es0_2)
 
 ; Transform strncpy(D, "", 9) to memset(D, 0, 9), D.
-  %es0_9 = call i8* @strncpy(i8* %dst, i8* %ps0, i64 9)
-  call void @sink(i8* %dst, i8* %es0_9)
+  %es0_9 = call ptr @strncpy(ptr %dst, ptr %ps0, i64 9)
+  call void @sink(ptr %dst, ptr %es0_9)
 
 ; Transform strncpy(D, "", n) to memset(D, 0, n), D.
-  %es0_n = call i8* @strncpy(i8* %dst, i8* %ps0, i64 %n)
-  call void @sink(i8* %dst, i8* %es0_n)
+  %es0_n = call ptr @strncpy(ptr %dst, ptr %ps0, i64 %n)
+  call void @sink(ptr %dst, ptr %es0_n)
 
   ret void
 }
@@ -114,21 +113,21 @@ define void @fold_strncpy_s0(i8* %dst, i64 %n) {
 ; Verify that strncpy(D, S, N) calls with nonconstant source S and constant
 ; size are simplified when N < 2.
 
-define void @fold_strncpy_s(i8* %dst, i8* %src, i64 %n) {
+define void @fold_strncpy_s(ptr %dst, ptr %src, i64 %n) {
 ; CHECK-LABEL: @fold_strncpy_s(
-; CHECK-NEXT:    call void @sink(i8* [[DST:%.*]], i8* [[DST]])
-; CHECK-NEXT:    [[STXNCPY_CHAR0:%.*]] = load i8, i8* [[SRC:%.*]], align 1
-; CHECK-NEXT:    store i8 [[STXNCPY_CHAR0]], i8* [[DST]], align 1
-; CHECK-NEXT:    call void @sink(i8* nonnull [[DST]], i8* nonnull [[DST]])
+; CHECK-NEXT:    call void @sink(ptr [[DST:%.*]], ptr [[DST]])
+; CHECK-NEXT:    [[STXNCPY_CHAR0:%.*]] = load i8, ptr [[SRC:%.*]], align 1
+; CHECK-NEXT:    store i8 [[STXNCPY_CHAR0]], ptr [[DST]], align 1
+; CHECK-NEXT:    call void @sink(ptr nonnull [[DST]], ptr nonnull [[DST]])
 ; CHECK-NEXT:    ret void
 ;
 ; Fold strncpy(D, S, 0) to just D.
-  %ed_0 = call i8* @strncpy(i8* %dst, i8* %src, i64 0)
-  call void @sink(i8* %dst, i8* %ed_0)
+  %ed_0 = call ptr @strncpy(ptr %dst, ptr %src, i64 0)
+  call void @sink(ptr %dst, ptr %ed_0)
 
 ; Transform strncpy(D, S, 1) to *D = '\0, D.
-  %ed_1 = call i8* @strncpy(i8* %dst, i8* %src, i64 1)
-  call void @sink(i8* %dst, i8* %ed_1)
+  %ed_1 = call ptr @strncpy(ptr %dst, ptr %src, i64 1)
+  call void @sink(ptr %dst, ptr %ed_1)
 
   ret void
 }
@@ -139,31 +138,31 @@ define void @fold_strncpy_s(i8* %dst, i8* %src, i64 %n) {
 ; Also verify that the arguments of the call are annotated with the right
 ; attributes.
 
-define void @call_strncpy_s(i8* %dst, i8* %src, i64 %n) {
+define void @call_strncpy_s(ptr %dst, ptr %src, i64 %n) {
 ; CHECK-LABEL: @call_strncpy_s(
-; CHECK-NEXT:    [[ED_2:%.*]] = call i8* @strncpy(i8* noundef nonnull dereferenceable(1) [[DST:%.*]], i8* noundef nonnull dereferenceable(1) [[SRC:%.*]], i64 2)
-; CHECK-NEXT:    call void @sink(i8* [[DST]], i8* [[ED_2]])
-; CHECK-NEXT:    [[ED_9:%.*]] = call i8* @strncpy(i8* noundef nonnull dereferenceable(1) [[DST]], i8* noundef nonnull dereferenceable(1) [[SRC]], i64 9)
-; CHECK-NEXT:    call void @sink(i8* [[DST]], i8* [[ED_9]])
-; CHECK-NEXT:    [[ED_N:%.*]] = call i8* @strncpy(i8* [[DST]], i8* [[SRC]], i64 [[N:%.*]])
-; CHECK-NEXT:    call void @sink(i8* [[DST]], i8* [[ED_N]])
+; CHECK-NEXT:    [[ED_2:%.*]] = call ptr @strncpy(ptr noundef nonnull dereferenceable(1) [[DST:%.*]], ptr noundef nonnull dereferenceable(1) [[SRC:%.*]], i64 2)
+; CHECK-NEXT:    call void @sink(ptr [[DST]], ptr [[ED_2]])
+; CHECK-NEXT:    [[ED_9:%.*]] = call ptr @strncpy(ptr noundef nonnull dereferenceable(1) [[DST]], ptr noundef nonnull dereferenceable(1) [[SRC]], i64 9)
+; CHECK-NEXT:    call void @sink(ptr [[DST]], ptr [[ED_9]])
+; CHECK-NEXT:    [[ED_N:%.*]] = call ptr @strncpy(ptr [[DST]], ptr [[SRC]], i64 [[N:%.*]])
+; CHECK-NEXT:    call void @sink(ptr [[DST]], ptr [[ED_N]])
 ; CHECK-NEXT:    ret void
 ;
 ; Do not transform strncpy(D, S, 2) when S is unknown.  Both *D and *S must
 ; be derefernceable but neither D[1] nor S[1] need be.
-  %ed_2 = call i8* @strncpy(i8* %dst, i8* %src, i64 2)
-  call void @sink(i8* %dst, i8* %ed_2)
+  %ed_2 = call ptr @strncpy(ptr %dst, ptr %src, i64 2)
+  call void @sink(ptr %dst, ptr %ed_2)
 
 ; Do not transform strncpy(D, S, 9) when S is unknown..
-  %ed_9 = call i8* @strncpy(i8* %dst, i8* %src, i64 9)
-  call void @sink(i8* %dst, i8* %ed_9)
+  %ed_9 = call ptr @strncpy(ptr %dst, ptr %src, i64 9)
+  call void @sink(ptr %dst, ptr %ed_9)
 
 ; Do not transform strncpy(D, S, N) when all arguments are unknown.  Both
 ; D and S must be nonnull but neither *D nor *S need be dereferenceable.
 ; TODO: Both D and S should be annotated nonnull and noundef regardless
 ; of the value of N.  See https://reviews.llvm.org/D124633.
-  %ed_n = call i8* @strncpy(i8* %dst, i8* %src, i64 %n)
-  call void @sink(i8* %dst, i8* %ed_n)
+  %ed_n = call ptr @strncpy(ptr %dst, ptr %src, i64 %n)
+  call void @sink(ptr %dst, ptr %ed_n)
 
   ret void
 }
index 0016dc08a96b60a819c40c150f1ca37bfdb634bb..d54f7c14f9f04d7651ed6ee10257fb0c1b29c3e3 100644 (file)
@@ -10,12 +10,10 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 
 define void @test_no_simplify() {
 ; CHECK-LABEL: @test_no_simplify(
-  %dst = getelementptr inbounds [60 x i16], [60 x i16]* @a, i32 0, i32 0
-  %src = getelementptr inbounds [60 x i8], [60 x i8]* @b, i32 0, i32 0
 
 ; CHECK-NEXT: call i16 @__strncpy_chk
-  call i16 @__strncpy_chk(i16* %dst, i8* %src, i32 60, i32 60)
+  call i16 @__strncpy_chk(ptr @a, ptr @b, i32 60, i32 60)
   ret void
 }
 
-declare i16 @__strncpy_chk(i16*, i8*, i32, i32)
+declare i16 @__strncpy_chk(ptr, ptr, i32, i32)
index 318ffe06414d9c8c830f1c72cb30ba10f9a6f09d..d6b7ed9b1aa28eeb3ddb4e3515819fac9787f053 100644 (file)
@@ -4,7 +4,7 @@
 ;
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare i64 @strnlen(i8*, i64)
+declare i64 @strnlen(ptr, i64)
 
 @ax = external global [0 x i8]
 @s5 = constant [6 x i8] c"12345\00"
@@ -14,12 +14,12 @@ declare i64 @strnlen(i8*, i64)
 ; Verify that the strnlen pointer argument is not annotated nonnull when
 ; nothing is known about the bound.
 
-define i64 @no_access_strnlen_p_n(i8* %ptr, i64 %n) {
+define i64 @no_access_strnlen_p_n(ptr %ptr, i64 %n) {
 ; CHECK-LABEL: @no_access_strnlen_p_n(
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* [[PTR:%.*]], i64 [[N:%.*]])
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr [[PTR:%.*]], i64 [[N:%.*]])
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
-  %len = call i64 @strnlen(i8* %ptr, i64 %n)
+  %len = call i64 @strnlen(ptr %ptr, i64 %n)
   ret i64 %len
 }
 
@@ -27,12 +27,12 @@ define i64 @no_access_strnlen_p_n(i8* %ptr, i64 %n) {
 ; Verify that the strnlen pointer argument is annotated dereferenceable(1)
 ; (and not more) when the constant bound is greater than 1.
 
-define i64 @access_strnlen_p_2(i8* %ptr) {
+define i64 @access_strnlen_p_2(ptr %ptr) {
 ; CHECK-LABEL: @access_strnlen_p_2(
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* noundef nonnull dereferenceable(1) [[PTR:%.*]], i64 2)
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr noundef nonnull dereferenceable(1) [[PTR:%.*]], i64 2)
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
-  %len = call i64 @strnlen(i8* noundef nonnull dereferenceable(1) %ptr, i64 2)
+  %len = call i64 @strnlen(ptr noundef nonnull dereferenceable(1) %ptr, i64 2)
   ret i64 %len
 }
 
@@ -40,14 +40,14 @@ define i64 @access_strnlen_p_2(i8* %ptr) {
 ; Verify that the strnlen pointer argument is annotated nonnull etc.,
 ; when the bound is known to be nonzero.
 
-define i64 @access_strnlen_p_nz(i8* %ptr, i64 %n) {
+define i64 @access_strnlen_p_nz(ptr %ptr, i64 %n) {
 ; CHECK-LABEL: @access_strnlen_p_nz(
 ; CHECK-NEXT:    [[NNZ:%.*]] = or i64 [[N:%.*]], 1
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* noundef nonnull dereferenceable(1) [[PTR:%.*]], i64 [[NNZ]])
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr noundef nonnull dereferenceable(1) [[PTR:%.*]], i64 [[NNZ]])
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
   %nnz = or i64 %n, 1
-  %len = call i64 @strnlen(i8* noundef nonnull dereferenceable(1) %ptr, i64 %nnz)
+  %len = call i64 @strnlen(ptr noundef nonnull dereferenceable(1) %ptr, i64 %nnz)
   ret i64 %len
 }
 
@@ -58,8 +58,7 @@ define i64 @fold_strnlen_ax_0() {
 ; CHECK-LABEL: @fold_strnlen_ax_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [0 x i8], [0 x i8]* @ax, i32 0, i32 0
-  %len = call i64 @strnlen(i8* %ptr, i64 0)
+  %len = call i64 @strnlen(ptr @ax, i64 0)
   ret i64 %len
 }
 
@@ -68,13 +67,12 @@ define i64 @fold_strnlen_ax_0() {
 
 define i64 @fold_strnlen_ax_1() {
 ; CHECK-LABEL: @fold_strnlen_ax_1(
-; CHECK-NEXT:    [[STRNLEN_CHAR0:%.*]] = load i8, i8* getelementptr inbounds ([0 x i8], [0 x i8]* @ax, i64 0, i64 0), align 1
+; CHECK-NEXT:    [[STRNLEN_CHAR0:%.*]] = load i8, ptr @ax, align 1
 ; CHECK-NEXT:    [[STRNLEN_CHAR0CMP:%.*]] = icmp ne i8 [[STRNLEN_CHAR0]], 0
 ; CHECK-NEXT:    [[TMP1:%.*]] = zext i1 [[STRNLEN_CHAR0CMP]] to i64
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
-  %ptr = getelementptr [0 x i8], [0 x i8]* @ax, i32 0, i32 0
-  %len = call i64 @strnlen(i8* %ptr, i64 1)
+  %len = call i64 @strnlen(ptr @ax, i64 1)
   ret i64 %len
 }
 
@@ -85,8 +83,7 @@ define i64 @fold_strnlen_s5_0() {
 ; CHECK-LABEL: @fold_strnlen_s5_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [6 x i8], [6 x i8]* @s5, i32 0, i32 0
-  %len = call i64 @strnlen(i8* %ptr, i64 0)
+  %len = call i64 @strnlen(ptr @s5, i64 0)
   ret i64 %len
 }
 
@@ -97,8 +94,7 @@ define i64 @fold_strnlen_s5_4() {
 ; CHECK-LABEL: @fold_strnlen_s5_4(
 ; CHECK-NEXT:    ret i64 4
 ;
-  %ptr = getelementptr [6 x i8], [6 x i8]* @s5, i32 0, i32 0
-  %len = call i64 @strnlen(i8* %ptr, i64 4)
+  %len = call i64 @strnlen(ptr @s5, i64 4)
   ret i64 %len
 }
 
@@ -109,8 +105,7 @@ define i64 @fold_strnlen_s5_5() {
 ; CHECK-LABEL: @fold_strnlen_s5_5(
 ; CHECK-NEXT:    ret i64 5
 ;
-  %ptr = getelementptr [6 x i8], [6 x i8]* @s5, i32 0, i32 0
-  %len = call i64 @strnlen(i8* %ptr, i64 5)
+  %len = call i64 @strnlen(ptr @s5, i64 5)
   ret i64 %len
 }
 
@@ -121,8 +116,7 @@ define i64 @fold_strnlen_s5_m1() {
 ; CHECK-LABEL: @fold_strnlen_s5_m1(
 ; CHECK-NEXT:    ret i64 5
 ;
-  %ptr = getelementptr [6 x i8], [6 x i8]* @s5, i32 0, i32 0
-  %len = call i64 @strnlen(i8* %ptr, i64 -1)
+  %len = call i64 @strnlen(ptr @s5, i64 -1)
   ret i64 %len
 }
 
@@ -133,8 +127,8 @@ define i64 @fold_strnlen_s5_3_p4_5() {
 ; CHECK-LABEL: @fold_strnlen_s5_3_p4_5(
 ; CHECK-NEXT:    ret i64 1
 ;
-  %ptr = getelementptr [9 x i8], [9 x i8]* @s5_3, i32 0, i32 4
-  %len = call i64 @strnlen(i8* %ptr, i64 5)
+  %ptr = getelementptr [9 x i8], ptr @s5_3, i32 0, i32 4
+  %len = call i64 @strnlen(ptr %ptr, i64 5)
   ret i64 %len
 }
 
@@ -145,8 +139,8 @@ define i64 @fold_strnlen_s5_3_p5_5() {
 ; CHECK-LABEL: @fold_strnlen_s5_3_p5_5(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [9 x i8], [9 x i8]* @s5_3, i32 0, i32 5
-  %len = call i64 @strnlen(i8* %ptr, i64 5)
+  %ptr = getelementptr [9 x i8], ptr @s5_3, i32 0, i32 5
+  %len = call i64 @strnlen(ptr %ptr, i64 5)
   ret i64 %len
 }
 
@@ -157,8 +151,8 @@ define i64 @fold_strnlen_s5_3_p6_3() {
 ; CHECK-LABEL: @fold_strnlen_s5_3_p6_3(
 ; CHECK-NEXT:    ret i64 3
 ;
-  %ptr = getelementptr [9 x i8], [9 x i8]* @s5_3, i32 0, i32 6
-  %len = call i64 @strnlen(i8* %ptr, i64 3)
+  %ptr = getelementptr [9 x i8], ptr @s5_3, i32 0, i32 6
+  %len = call i64 @strnlen(ptr %ptr, i64 3)
   ret i64 %len
 }
 
@@ -172,7 +166,7 @@ define i64 @call_strnlen_s5_3_p6_4() {
 ; CHECK-LABEL: @call_strnlen_s5_3_p6_4(
 ; CHECK-NEXT:    ret i64 3
 ;
-  %ptr = getelementptr [9 x i8], [9 x i8]* @s5_3, i32 0, i32 6
-  %len = call i64 @strnlen(i8* %ptr, i64 4)
+  %ptr = getelementptr [9 x i8], ptr @s5_3, i32 0, i32 6
+  %len = call i64 @strnlen(ptr %ptr, i64 4)
   ret i64 %len
 }
index 877eae813c683d33a5aaa3542c241884b2075cff..3efa96625b9c1cba5a2caa388aa8bdc65ee47ee4 100644 (file)
@@ -5,7 +5,7 @@
 ;
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare i64 @strnlen(i8*, i64)
+declare i64 @strnlen(ptr, i64)
 
 @sx = external global [0 x i8]
 @a3 = constant [3 x i8] c"123"
@@ -21,8 +21,8 @@ define i64 @fold_strnlen_sx_pi_0(i64 %i) {
 ; CHECK-NEXT:    ret i64 0
 ;
 
-  %ptr = getelementptr [0 x i8], [0 x i8]* @sx, i64 0, i64 %i
-  %len = call i64 @strnlen(i8* %ptr, i64 0)
+  %ptr = getelementptr [0 x i8], ptr @sx, i64 0, i64 %i
+  %len = call i64 @strnlen(ptr %ptr, i64 0)
   ret i64 %len
 }
 
@@ -31,13 +31,13 @@ define i64 @fold_strnlen_sx_pi_0(i64 %i) {
 
 define i64 @call_strnlen_sx_pi_n(i64 %i, i64 %n) {
 ; CHECK-LABEL: @call_strnlen_sx_pi_n(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [0 x i8], [0 x i8]* @sx, i64 0, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* nonnull [[PTR]], i64 [[N:%.*]])
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [0 x i8], ptr @sx, i64 0, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr nonnull [[PTR]], i64 [[N:%.*]])
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
 
-  %ptr = getelementptr inbounds [0 x i8], [0 x i8]* @sx, i64 0, i64 %i
-  %len = call i64 @strnlen(i8* %ptr, i64 %n)
+  %ptr = getelementptr inbounds [0 x i8], ptr @sx, i64 0, i64 %i
+  %len = call i64 @strnlen(ptr %ptr, i64 %n)
   ret i64 %len
 }
 
@@ -46,13 +46,13 @@ define i64 @call_strnlen_sx_pi_n(i64 %i, i64 %n) {
 
 define i64 @call_strnlen_a3_pi_2(i64 %i) {
 ; CHECK-LABEL: @call_strnlen_a3_pi_2(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [3 x i8], [3 x i8]* @a3, i64 0, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* noundef nonnull [[PTR]], i64 2)
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [3 x i8], ptr @a3, i64 0, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr noundef nonnull [[PTR]], i64 2)
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
 
-  %ptr = getelementptr inbounds [3 x i8], [3 x i8]* @a3, i64 0, i64 %i
-  %len = call i64 @strnlen(i8* %ptr, i64 2)
+  %ptr = getelementptr inbounds [3 x i8], ptr @a3, i64 0, i64 %i
+  %len = call i64 @strnlen(ptr %ptr, i64 2)
   ret i64 %len
 }
 
@@ -61,13 +61,13 @@ define i64 @call_strnlen_a3_pi_2(i64 %i) {
 
 define i64 @call_strnlen_a3_pi_3(i64 %i) {
 ; CHECK-LABEL: @call_strnlen_a3_pi_3(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [3 x i8], [3 x i8]* @a3, i64 0, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* noundef nonnull [[PTR]], i64 3)
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [3 x i8], ptr @a3, i64 0, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr noundef nonnull [[PTR]], i64 3)
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
 
-  %ptr = getelementptr inbounds [3 x i8], [3 x i8]* @a3, i64 0, i64 %i
-  %len = call i64 @strnlen(i8* %ptr, i64 3)
+  %ptr = getelementptr inbounds [3 x i8], ptr @a3, i64 0, i64 %i
+  %len = call i64 @strnlen(ptr %ptr, i64 3)
   ret i64 %len
 }
 
@@ -78,8 +78,8 @@ define i64 @fold_strnlen_s3_pi_0(i64 %i) {
 ; CHECK-LABEL: @fold_strnlen_s3_pi_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr inbounds [4 x i8], [4 x i8]* @s3, i64 0, i64 %i
-  %len = call i64 @strnlen(i8* %ptr, i64 0)
+  %ptr = getelementptr inbounds [4 x i8], ptr @s3, i64 0, i64 %i
+  %len = call i64 @strnlen(ptr %ptr, i64 0)
   ret i64 %len
 }
 
@@ -90,8 +90,7 @@ define i64 @call_strnlen_s5_pi_0(i64 zeroext %i) {
 ; CHECK-LABEL: @call_strnlen_s5_pi_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [6 x i8], [6 x i8]* @s5, i32 0, i32 0
-  %len = call i64 @strnlen(i8* %ptr, i64 0)
+  %len = call i64 @strnlen(ptr @s5, i64 0)
   ret i64 %len
 }
 
@@ -102,8 +101,8 @@ define i64 @fold_strnlen_s5_3_pi_0(i64 zeroext %i) {
 ; CHECK-LABEL: @fold_strnlen_s5_3_pi_0(
 ; CHECK-NEXT:    ret i64 0
 ;
-  %ptr = getelementptr [10 x i8], [10 x i8]* @s5_3, i32 0, i64 %i
-  %len = call i64 @strnlen(i8* %ptr, i64 0)
+  %ptr = getelementptr [10 x i8], ptr @s5_3, i32 0, i64 %i
+  %len = call i64 @strnlen(ptr %ptr, i64 0)
   ret i64 %len
 }
 
@@ -112,12 +111,12 @@ define i64 @fold_strnlen_s5_3_pi_0(i64 zeroext %i) {
 
 define i64 @call_strnlen_s5_3_pi_n(i64 zeroext %i, i64 %n) {
 ; CHECK-LABEL: @call_strnlen_s5_3_pi_n(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [10 x i8], [10 x i8]* @s5_3, i64 0, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* nonnull [[PTR]], i64 [[N:%.*]])
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [10 x i8], ptr @s5_3, i64 0, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr nonnull [[PTR]], i64 [[N:%.*]])
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
-  %ptr = getelementptr inbounds [10 x i8], [10 x i8]* @s5_3, i32 0, i64 %i
-  %len = call i64 @strnlen(i8* %ptr, i64 %n)
+  %ptr = getelementptr inbounds [10 x i8], ptr @s5_3, i32 0, i64 %i
+  %len = call i64 @strnlen(ptr %ptr, i64 %n)
   ret i64 %len
 }
 
@@ -130,8 +129,7 @@ define i64 @fold_strnlen_a3_n(i64 %n) {
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
 
-  %ptr = getelementptr [3 x i8], [3 x i8]* @a3, i64 0, i64 0
-  %len = call i64 @strnlen(i8* %ptr, i64 %n)
+  %len = call i64 @strnlen(ptr @a3, i64 %n)
   ret i64 %len
 }
 
@@ -144,8 +142,7 @@ define i64 @fold_strnlen_s3_n(i64 %n) {
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
 
-  %ptr = getelementptr [4 x i8], [4 x i8]* @s3, i64 0, i64 0
-  %len = call i64 @strnlen(i8* %ptr, i64 %n)
+  %len = call i64 @strnlen(ptr @s3, i64 %n)
   ret i64 %len
 }
 
@@ -154,13 +151,13 @@ define i64 @fold_strnlen_s3_n(i64 %n) {
 
 define i64 @fold_strnlen_a3_pi_2(i64 %i) {
 ; CHECK-LABEL: @fold_strnlen_a3_pi_2(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [3 x i8], [3 x i8]* @a3, i64 0, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* noundef nonnull [[PTR]], i64 2)
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [3 x i8], ptr @a3, i64 0, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr noundef nonnull [[PTR]], i64 2)
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
 
-  %ptr = getelementptr inbounds [3 x i8], [3 x i8]* @a3, i64 0, i64 %i
-  %len = call i64 @strnlen(i8* %ptr, i64 2)
+  %ptr = getelementptr inbounds [3 x i8], ptr @a3, i64 0, i64 %i
+  %len = call i64 @strnlen(ptr %ptr, i64 2)
   ret i64 %len
 }
 
@@ -169,13 +166,13 @@ define i64 @fold_strnlen_a3_pi_2(i64 %i) {
 
 define i64 @fold_strnlen_s3_pi_2(i64 %i) {
 ; CHECK-LABEL: @fold_strnlen_s3_pi_2(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [4 x i8], [4 x i8]* @s3, i64 0, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* noundef nonnull [[PTR]], i64 2)
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [4 x i8], ptr @s3, i64 0, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr noundef nonnull [[PTR]], i64 2)
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
 
-  %ptr = getelementptr inbounds [4 x i8], [4 x i8]* @s3, i64 0, i64 %i
-  %len = call i64 @strnlen(i8* %ptr, i64 2)
+  %ptr = getelementptr inbounds [4 x i8], ptr @s3, i64 0, i64 %i
+  %len = call i64 @strnlen(ptr %ptr, i64 2)
   ret i64 %len
 }
 
@@ -184,13 +181,13 @@ define i64 @fold_strnlen_s3_pi_2(i64 %i) {
 
 define i64 @fold_strnlen_s3_pi_3(i64 %i) {
 ; CHECK-LABEL: @fold_strnlen_s3_pi_3(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [4 x i8], [4 x i8]* @s3, i64 0, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* noundef nonnull [[PTR]], i64 3)
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [4 x i8], ptr @s3, i64 0, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr noundef nonnull [[PTR]], i64 3)
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
 
-  %ptr = getelementptr inbounds [4 x i8], [4 x i8]* @s3, i64 0, i64 %i
-  %len = call i64 @strnlen(i8* %ptr, i64 3)
+  %ptr = getelementptr inbounds [4 x i8], ptr @s3, i64 0, i64 %i
+  %len = call i64 @strnlen(ptr %ptr, i64 3)
   ret i64 %len
 }
 
@@ -199,13 +196,13 @@ define i64 @fold_strnlen_s3_pi_3(i64 %i) {
 
 define i64 @fold_strnlen_s3_pi_n(i64 %i, i64 %n) {
 ; CHECK-LABEL: @fold_strnlen_s3_pi_n(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [4 x i8], [4 x i8]* @s3, i64 0, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* nonnull [[PTR]], i64 [[N:%.*]])
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [4 x i8], ptr @s3, i64 0, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr nonnull [[PTR]], i64 [[N:%.*]])
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
 
-  %ptr = getelementptr inbounds [4 x i8], [4 x i8]* @s3, i64 0, i64 %i
-  %len = call i64 @strnlen(i8* %ptr, i64 %n)
+  %ptr = getelementptr inbounds [4 x i8], ptr @s3, i64 0, i64 %i
+  %len = call i64 @strnlen(ptr %ptr, i64 %n)
   ret i64 %len
 }
 
@@ -215,12 +212,12 @@ define i64 @fold_strnlen_s3_pi_n(i64 %i, i64 %n) {
 
 define i64 @call_strnlen_s5_3_pi_2(i64 %i) {
 ; CHECK-LABEL: @call_strnlen_s5_3_pi_2(
-; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [10 x i8], [10 x i8]* @s5_3, i64 0, i64 [[I:%.*]]
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* noundef nonnull [[PTR]], i64 2)
+; CHECK-NEXT:    [[PTR:%.*]] = getelementptr inbounds [10 x i8], ptr @s5_3, i64 0, i64 [[I:%.*]]
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr noundef nonnull [[PTR]], i64 2)
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
 
-  %ptr = getelementptr inbounds [10 x i8], [10 x i8]* @s5_3, i64 0, i64 %i
-  %len = call i64 @strnlen(i8* %ptr, i64 2)
+  %ptr = getelementptr inbounds [10 x i8], ptr @s5_3, i64 0, i64 %i
+  %len = call i64 @strnlen(ptr %ptr, i64 2)
   ret i64 %len
 }
index 64d94e401d3e6ca74185e1c933edd5e101bfb82b..5fc3452b38474643817bd211cac205fe3881ae64 100644 (file)
@@ -5,9 +5,9 @@
 ;
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-declare i64 @strnlen(i8*, i64)
+declare i64 @strnlen(ptr, i64)
 
-@ecp = external global i8*, align 8
+@ecp = external global ptr, align 8
 
 
 ; Annotate strnlen(ecp, 3) call with noundef, nonnull, and dereferenceable
@@ -15,12 +15,12 @@ declare i64 @strnlen(i8*, i64)
 
 define i64 @deref_strnlen_ecp_3() {
 ; CHECK-LABEL: @deref_strnlen_ecp_3(
-; CHECK-NEXT:    [[PTR:%.*]] = load i8*, i8** @ecp, align 8
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* noundef nonnull dereferenceable(1) [[PTR]], i64 3)
+; CHECK-NEXT:    [[PTR:%.*]] = load ptr, ptr @ecp, align 8
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr noundef nonnull dereferenceable(1) [[PTR]], i64 3)
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
-  %ptr = load i8*, i8** @ecp
-  %len = call i64 @strnlen(i8* %ptr, i64 3)
+  %ptr = load ptr, ptr @ecp
+  %len = call i64 @strnlen(ptr %ptr, i64 3)
   ret i64 %len
 }
 
@@ -31,13 +31,13 @@ define i64 @deref_strnlen_ecp_3() {
 define i64 @deref_strnlen_ecp_nz(i64 %n) {
 ; CHECK-LABEL: @deref_strnlen_ecp_nz(
 ; CHECK-NEXT:    [[NONZERO:%.*]] = or i64 [[N:%.*]], 1
-; CHECK-NEXT:    [[PTR:%.*]] = load i8*, i8** @ecp, align 8
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* noundef nonnull dereferenceable(1) [[PTR]], i64 [[NONZERO]])
+; CHECK-NEXT:    [[PTR:%.*]] = load ptr, ptr @ecp, align 8
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr noundef nonnull dereferenceable(1) [[PTR]], i64 [[NONZERO]])
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
   %nonzero = or i64 %n, 1
-  %ptr = load i8*, i8** @ecp
-  %len = call i64 @strnlen(i8* %ptr, i64 %nonzero)
+  %ptr = load ptr, ptr @ecp
+  %len = call i64 @strnlen(ptr %ptr, i64 %nonzero)
   ret i64 %len
 }
 
@@ -50,11 +50,11 @@ define i64 @deref_strnlen_ecp_nz(i64 %n) {
 
 define i64 @noderef_strnlen_ecp_n(i64 %n) {
 ; CHECK-LABEL: @noderef_strnlen_ecp_n(
-; CHECK-NEXT:    [[PTR:%.*]] = load i8*, i8** @ecp, align 8
-; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(i8* [[PTR]], i64 [[N:%.*]])
+; CHECK-NEXT:    [[PTR:%.*]] = load ptr, ptr @ecp, align 8
+; CHECK-NEXT:    [[LEN:%.*]] = call i64 @strnlen(ptr [[PTR]], i64 [[N:%.*]])
 ; CHECK-NEXT:    ret i64 [[LEN]]
 ;
-  %ptr = load i8*, i8** @ecp
-  %len = call i64 @strnlen(i8* %ptr, i64 %n)
+  %ptr = load ptr, ptr @ecp
+  %len = call i64 @strnlen(ptr %ptr, i64 %n)
   ret i64 %len
 }
index 6772f80708daa0c2a3ed38a0e0f88378f2c4cb35..411bd8d627eca78f54dda11a98b751cdf0ed56eb 100644 (file)
@@ -9,66 +9,61 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @w = constant [2 x i8] c"w\00"
 @null = constant [1 x i8] zeroinitializer
 
-declare i8* @strpbrk(i8*, i8*)
+declare ptr @strpbrk(ptr, ptr)
 
 ; Check strpbrk(s, "") -> NULL.
 
-define i8* @test_simplify1(i8* %str) {
+define ptr @test_simplify1(ptr %str) {
 ; CHECK-LABEL: @test_simplify1(
-; CHECK-NEXT:    ret i8* null
+; CHECK-NEXT:    ret ptr null
 ;
-  %pat = getelementptr [1 x i8], [1 x i8]* @null, i32 0, i32 0
 
-  %ret = call i8* @strpbrk(i8* %str, i8* %pat)
-  ret i8* %ret
+  %ret = call ptr @strpbrk(ptr %str, ptr @null)
+  ret ptr %ret
 }
 
 ; Check strpbrk("", s) -> NULL.
 
-define i8* @test_simplify2(i8* %pat) {
+define ptr @test_simplify2(ptr %pat) {
 ; CHECK-LABEL: @test_simplify2(
-; CHECK-NEXT:    ret i8* null
+; CHECK-NEXT:    ret ptr null
 ;
-  %str = getelementptr [1 x i8], [1 x i8]* @null, i32 0, i32 0
 
-  %ret = call i8* @strpbrk(i8* %str, i8* %pat)
-  ret i8* %ret
+  %ret = call ptr @strpbrk(ptr @null, ptr %pat)
+  ret ptr %ret
 }
 
 ; Check strpbrk(s1, s2), where s1 and s2 are constants.
 
-define i8* @test_simplify3() {
+define ptr @test_simplify3() {
 ; CHECK-LABEL: @test_simplify3(
-; CHECK-NEXT:    ret i8* getelementptr inbounds ([12 x i8], [12 x i8]* @hello, i32 0, i32 6)
+; CHECK-NEXT:    ret ptr getelementptr inbounds ([12 x i8], ptr @hello, i32 0, i32 6)
 ;
-  %str = getelementptr [12 x i8], [12 x i8]* @hello, i32 0, i32 0
-  %pat = getelementptr [2 x i8], [2 x i8]* @w, i32 0, i32 0
 
-  %ret = call i8* @strpbrk(i8* %str, i8* %pat)
-  ret i8* %ret
+  %ret = call ptr @strpbrk(ptr @hello, ptr @w)
+  ret ptr %ret
 }
 
 ; Check strpbrk(s, "a") -> strchr(s, 'a').
 
-define i8* @test_simplify4(i8* %str) {
+define ptr @test_simplify4(ptr %str) {
 ; CHECK-LABEL: @test_simplify4(
-; CHECK-NEXT:    [[STRCHR:%.*]] = call i8* @strchr(i8* noundef nonnull dereferenceable(1) [[STR:%.*]], i32 119)
-; CHECK-NEXT:    ret i8* [[STRCHR]]
+; CHECK-NEXT:    [[STRCHR:%.*]] = call ptr @strchr(ptr noundef nonnull dereferenceable(1) [[STR:%.*]], i32 119)
+; CHECK-NEXT:    ret ptr [[STRCHR]]
 ;
-  %pat = getelementptr [2 x i8], [2 x i8]* @w, i32 0, i32 0
 
-  %ret = call i8* @strpbrk(i8* %str, i8* %pat)
-  ret i8* %ret
+  %ret = call ptr @strpbrk(ptr %str, ptr @w)
+  ret ptr %ret
 }
 
 ; Check cases that shouldn't be simplified.
 
-define i8* @test_no_simplify1(i8* %str, i8* %pat) {
+define ptr @test_no_simplify1(ptr %str, ptr %pat) {
 ; CHECK-LABEL: @test_no_simplify1(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @strpbrk(i8* [[STR:%.*]], i8* [[PAT:%.*]])
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @strpbrk(ptr [[STR:%.*]], ptr [[PAT:%.*]])
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
 
-  %ret = call i8* @strpbrk(i8* %str, i8* %pat)
-  ret i8* %ret
+  %ret = call ptr @strpbrk(ptr %str, ptr %pat)
+  ret ptr %ret
 }
index fc1010ff1f08aead91b034632ca95992abac815a..24bb97a498f1465dc324749b05bf4b0edd58e53a 100644 (file)
@@ -8,16 +8,14 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @hello = constant [12 x i8] c"hello world\00"
 @w = constant [2 x i8] c"w\00"
 
-declare i8 @strpbrk(i8*, i8*)
+declare i8 @strpbrk(ptr, ptr)
 
 ; Check that 'strpbrk' functions with the wrong prototype aren't simplified.
 
 define i8 @test_no_simplify1() {
 ; CHECK-LABEL: @test_no_simplify1(
-  %str = getelementptr [12 x i8], [12 x i8]* @hello, i32 0, i32 0
-  %pat = getelementptr [2 x i8], [2 x i8]* @w, i32 0, i32 0
 
-  %ret = call i8 @strpbrk(i8* %str, i8* %pat)
+  %ret = call i8 @strpbrk(ptr @hello, ptr @w)
 ; CHECK-NEXT: %ret = call i8 @strpbrk
   ret i8 %ret
 ; CHECK-NEXT: ret i8 %ret
index fdf6c30fc20f0f06a050175c2fbc5a37818a8870..661e040f8042ba2d19836e97b5019722ca6c01c7 100644 (file)
@@ -6,87 +6,82 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 
 @hello = constant [14 x i8] c"hello world\5Cn\00"
 @null = constant [1 x i8] zeroinitializer
-@chp = global i8* zeroinitializer
+@chp = global ptr zeroinitializer
 
-declare i8* @strrchr(i8*, i32)
+declare ptr @strrchr(ptr, i32)
 
 define void @test_simplify1() {
 ; CHECK-LABEL: @test_simplify1(
-; CHECK-NEXT:    store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @hello, i32 0, i32 6), i8** @chp, align 4
+; CHECK-NEXT:    store ptr getelementptr inbounds ([14 x i8], ptr @hello, i32 0, i32 6), ptr @chp, align 4
 ; CHECK-NEXT:    ret void
 ;
 
-  %str = getelementptr [14 x i8], [14 x i8]* @hello, i32 0, i32 0
-  %dst = call i8* @strrchr(i8* %str, i32 119)
-  store i8* %dst, i8** @chp
+  %dst = call ptr @strrchr(ptr @hello, i32 119)
+  store ptr %dst, ptr @chp
   ret void
 }
 
 define void @test_simplify2() {
 ; CHECK-LABEL: @test_simplify2(
-; CHECK-NEXT:    store i8* null, i8** @chp, align 4
+; CHECK-NEXT:    store ptr null, ptr @chp, align 4
 ; CHECK-NEXT:    ret void
 ;
 
-  %str = getelementptr [1 x i8], [1 x i8]* @null, i32 0, i32 0
-  %dst = call i8* @strrchr(i8* %str, i32 119)
-  store i8* %dst, i8** @chp
+  %dst = call ptr @strrchr(ptr @null, i32 119)
+  store ptr %dst, ptr @chp
   ret void
 }
 
 define void @test_simplify3() {
 ; CHECK-LABEL: @test_simplify3(
-; CHECK-NEXT:    store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @hello, i32 0, i32 13), i8** @chp, align 4
+; CHECK-NEXT:    store ptr getelementptr inbounds ([14 x i8], ptr @hello, i32 0, i32 13), ptr @chp, align 4
 ; CHECK-NEXT:    ret void
 ;
 
-  %src = getelementptr [14 x i8], [14 x i8]* @hello, i32 0, i32 0
-  %dst = call i8* @strrchr(i8* %src, i32 0)
-  store i8* %dst, i8** @chp
+  %dst = call ptr @strrchr(ptr @hello, i32 0)
+  store ptr %dst, ptr @chp
   ret void
 }
 
 define void @test_simplify4() {
 ; CHECK-LABEL: @test_simplify4(
-; CHECK-NEXT:    store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @hello, i32 0, i32 13), i8** @chp, align 4
+; CHECK-NEXT:    store ptr getelementptr inbounds ([14 x i8], ptr @hello, i32 0, i32 13), ptr @chp, align 4
 ; CHECK-NEXT:    ret void
 ;
 
-  %src = getelementptr [14 x i8], [14 x i8]* @hello, i32 0, i32 0
-  %dst = call i8* @strrchr(i8* %src, i32 65280)
-  store i8* %dst, i8** @chp
+  %dst = call ptr @strrchr(ptr @hello, i32 65280)
+  store ptr %dst, ptr @chp
   ret void
 }
 
 define void @test_xform_to_memrchr(i32 %chr) {
 ; CHECK-LABEL: @test_xform_to_memrchr(
-; CHECK-NEXT:    [[MEMRCHR:%.*]] = call i8* @memrchr(i8* noundef nonnull dereferenceable(14) getelementptr inbounds ([14 x i8], [14 x i8]* @hello, i32 0, i32 0), i32 [[CHR:%.*]], i32 14)
-; CHECK-NEXT:    store i8* [[MEMRCHR]], i8** @chp, align 4
+; CHECK-NEXT:    [[MEMRCHR:%.*]] = call ptr @memrchr(ptr noundef nonnull dereferenceable(14) @hello, i32 [[CHR:%.*]], i32 14)
+; CHECK-NEXT:    store ptr [[MEMRCHR]], ptr @chp, align 4
 ; CHECK-NEXT:    ret void
 ;
 
-  %src = getelementptr [14 x i8], [14 x i8]* @hello, i32 0, i32 0
-  %dst = call i8* @strrchr(i8* %src, i32 %chr)
-  store i8* %dst, i8** @chp
+  %dst = call ptr @strrchr(ptr @hello, i32 %chr)
+  store ptr %dst, ptr @chp
   ret void
 }
 
-define i8* @test1(i8* %str, i32 %c) {
+define ptr @test1(ptr %str, i32 %c) {
 ; CHECK-LABEL: @test1(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @strrchr(i8* noundef nonnull dereferenceable(1) [[STR:%.*]], i32 [[C:%.*]])
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @strrchr(ptr noundef nonnull dereferenceable(1) [[STR:%.*]], i32 [[C:%.*]])
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
 
-  %ret = call i8* @strrchr(i8* %str, i32 %c)
-  ret i8* %ret
+  %ret = call ptr @strrchr(ptr %str, i32 %c)
+  ret ptr %ret
 }
 
-define i8* @test2(i8* %str, i32 %c) null_pointer_is_valid {
+define ptr @test2(ptr %str, i32 %c) null_pointer_is_valid {
 ; CHECK-LABEL: @test2(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @strrchr(i8* noundef [[STR:%.*]], i32 [[C:%.*]])
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @strrchr(ptr noundef [[STR:%.*]], i32 [[C:%.*]])
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
 
-  %ret = call i8* @strrchr(i8* %str, i32 %c)
-  ret i8* %ret
+  %ret = call ptr @strrchr(ptr %str, i32 %c)
+  ret ptr %ret
 }
index 539fb35ba906beb512f7733395bc810559b4d89a..989c9759f530369d87c8b9e5882efaaa031cf532 100644 (file)
@@ -7,15 +7,14 @@ target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f3
 @hello = constant [14 x i8] c"hello world\5Cn\00"
 @chr = global i8 zeroinitializer
 
-declare i8 @strrchr(i8*, i32)
+declare i8 @strrchr(ptr, i32)
 
 define void @test_nosimplify1() {
 ; CHECK: test_nosimplify1
 ; CHECK: call i8 @strrchr
 ; CHECK: ret void
 
-  %str = getelementptr [14 x i8], [14 x i8]* @hello, i32 0, i32 0
-  %dst = call i8 @strrchr(i8* %str, i32 119)
-  store i8 %dst, i8* @chr
+  %dst = call i8 @strrchr(ptr @hello, i32 119)
+  store i8 %dst, ptr @chr
   ret void
 }
index 390f83c3acde16cbecdfc8f52e28cbdb3ec24ddd..1dadb048787171edcecbfdbf0db7fc2a6f01d1c2 100644 (file)
@@ -5,58 +5,58 @@
 
 @s10 = constant [11 x i8] c"0123456789\00"
 
-declare i8* @strrchr(i8*, i32)
+declare ptr @strrchr(ptr, i32)
 
 ; Fold strrchr(s + 10, c) to (unsigned char)c ? 0 : s + 10.
 
-define i8* @fold_strrchr_sp10_x(i32 %c) {
+define ptr @fold_strrchr_sp10_x(i32 %c) {
 ; CHECK-LABEL: @fold_strrchr_sp10_x(
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i32 [[C:%.*]] to i8
 ; CHECK-NEXT:    [[MEMRCHR_CHAR0CMP:%.*]] = icmp eq i8 [[TMP1]], 0
-; CHECK-NEXT:    [[MEMRCHR_SEL:%.*]] = select i1 [[MEMRCHR_CHAR0CMP]], i8* getelementptr inbounds ([11 x i8], [11 x i8]* @s10, i64 0, i64 10), i8* null
-; CHECK-NEXT:    ret i8* [[MEMRCHR_SEL]]
+; CHECK-NEXT:    [[MEMRCHR_SEL:%.*]] = select i1 [[MEMRCHR_CHAR0CMP]], ptr getelementptr inbounds ([11 x i8], ptr @s10, i64 0, i64 10), ptr null
+; CHECK-NEXT:    ret ptr [[MEMRCHR_SEL]]
 ;
-  %psp10 = getelementptr [11 x i8], [11 x i8]* @s10, i32 0, i32 10
-  %pc = call i8* @strrchr(i8* %psp10, i32 %c)
-  ret i8* %pc
+  %psp10 = getelementptr [11 x i8], ptr @s10, i32 0, i32 10
+  %pc = call ptr @strrchr(ptr %psp10, i32 %c)
+  ret ptr %pc
 }
 
 
 ; Transform strrchr(s + 9, c) to [the equivalent of] memrchr(s + 9, c, 2).
 
-define i8* @call_strrchr_sp9_x(i32 %c) {
+define ptr @call_strrchr_sp9_x(i32 %c) {
 ; CHECK-LABEL: @call_strrchr_sp9_x(
-; CHECK-NEXT:    [[MEMRCHR:%.*]] = call i8* @memrchr(i8* noundef nonnull dereferenceable(2) getelementptr inbounds ([11 x i8], [11 x i8]* @s10, i64 0, i64 9), i32 [[C:%.*]], i64 2)
-; CHECK-NEXT:    ret i8* [[MEMRCHR]]
+; CHECK-NEXT:    [[MEMRCHR:%.*]] = call ptr @memrchr(ptr noundef nonnull dereferenceable(2) getelementptr inbounds ([11 x i8], ptr @s10, i64 0, i64 9), i32 [[C:%.*]], i64 2)
+; CHECK-NEXT:    ret ptr [[MEMRCHR]]
 ;
-  %psp9 = getelementptr [11 x i8], [11 x i8]* @s10, i32 0, i32 9
-  %pc = call i8* @strrchr(i8* %psp9, i32 %c)
-  ret i8* %pc
+  %psp9 = getelementptr [11 x i8], ptr @s10, i32 0, i32 9
+  %pc = call ptr @strrchr(ptr %psp9, i32 %c)
+  ret ptr %pc
 }
 
 
 ; Do not transform strrchr(s + 2, c) (for short strings this could be
 ; folded into a chain of OR expressions ala D128011).
 
-define i8* @call_strrchr_sp2_x(i32 %c) {
+define ptr @call_strrchr_sp2_x(i32 %c) {
 ; CHECK-LABEL: @call_strrchr_sp2_x(
-; CHECK-NEXT:    [[MEMRCHR:%.*]] = call i8* @memrchr(i8* noundef nonnull dereferenceable(9) getelementptr inbounds ([11 x i8], [11 x i8]* @s10, i64 0, i64 2), i32 [[C:%.*]], i64 9)
-; CHECK-NEXT:    ret i8* [[MEMRCHR]]
+; CHECK-NEXT:    [[MEMRCHR:%.*]] = call ptr @memrchr(ptr noundef nonnull dereferenceable(9) getelementptr inbounds ([11 x i8], ptr @s10, i64 0, i64 2), i32 [[C:%.*]], i64 9)
+; CHECK-NEXT:    ret ptr [[MEMRCHR]]
 ;
-  %psp2 = getelementptr [11 x i8], [11 x i8]* @s10, i32 0, i32 2
-  %pc = call i8* @strrchr(i8* %psp2, i32 %c)
-  ret i8* %pc
+  %psp2 = getelementptr [11 x i8], ptr @s10, i32 0, i32 2
+  %pc = call ptr @strrchr(ptr %psp2, i32 %c)
+  ret ptr %pc
 }
 
 
 ; Do not transform strrchr(s + 1, c).
 
-define i8* @call_strrchr_sp1_x(i32 %c) {
+define ptr @call_strrchr_sp1_x(i32 %c) {
 ; CHECK-LABEL: @call_strrchr_sp1_x(
-; CHECK-NEXT:    [[MEMRCHR:%.*]] = call i8* @memrchr(i8* noundef nonnull dereferenceable(10) getelementptr inbounds ([11 x i8], [11 x i8]* @s10, i64 0, i64 1), i32 [[C:%.*]], i64 10)
-; CHECK-NEXT:    ret i8* [[MEMRCHR]]
+; CHECK-NEXT:    [[MEMRCHR:%.*]] = call ptr @memrchr(ptr noundef nonnull dereferenceable(10) getelementptr inbounds ([11 x i8], ptr @s10, i64 0, i64 1), i32 [[C:%.*]], i64 10)
+; CHECK-NEXT:    ret ptr [[MEMRCHR]]
 ;
-  %psp1 = getelementptr [11 x i8], [11 x i8]* @s10, i32 0, i32 1
-  %pc = call i8* @strrchr(i8* %psp1, i32 %c)
-  ret i8* %pc
+  %psp1 = getelementptr [11 x i8], ptr @s10, i32 0, i32 1
+  %pc = call ptr @strrchr(ptr %psp1, i32 %c)
+  ret ptr %pc
 }
index 3b66f33f307618ec976f069fa2a310eed75180b5..aaa72ddf7d1901d9e1694ddbca7993f58873728d 100644 (file)
@@ -6,26 +6,24 @@
 @abc = constant [4 x i8] c"abc\00"
 @null = constant [1 x i8] zeroinitializer
 
-declare i64 @strspn(i8*, i8*)
+declare i64 @strspn(ptr, ptr)
 
 ; Check strspn(s, "") -> 0.
 
-define i64 @test_simplify1(i8* %str) {
+define i64 @test_simplify1(ptr %str) {
 ; CHECK-LABEL: @test_simplify1(
-  %pat = getelementptr [1 x i8], [1 x i8]* @null, i32 0, i32 0
 
-  %ret = call i64 @strspn(i8* %str, i8* %pat)
+  %ret = call i64 @strspn(ptr %str, ptr @null)
   ret i64 %ret
 ; CHECK-NEXT: ret i64 0
 }
 
 ; Check strspn("", s) -> 0.
 
-define i64 @test_simplify2(i8* %pat) {
+define i64 @test_simplify2(ptr %pat) {
 ; CHECK-LABEL: @test_simplify2(
-  %str = getelementptr [1 x i8], [1 x i8]* @null, i32 0, i32 0
 
-  %ret = call i64 @strspn(i8* %str, i8* %pat)
+  %ret = call i64 @strspn(ptr @null, ptr %pat)
   ret i64 %ret
 ; CHECK-NEXT: ret i64 0
 }
@@ -34,21 +32,19 @@ define i64 @test_simplify2(i8* %pat) {
 
 define i64 @test_simplify3() {
 ; CHECK-LABEL: @test_simplify3(
-  %str = getelementptr [6 x i8], [6 x i8]* @abcba, i32 0, i32 0
-  %pat = getelementptr [4 x i8], [4 x i8]* @abc, i32 0, i32 0
 
-  %ret = call i64 @strspn(i8* %str, i8* %pat)
+  %ret = call i64 @strspn(ptr @abcba, ptr @abc)
   ret i64 %ret
 ; CHECK-NEXT: ret i64 5
 }
 
 ; Check cases that shouldn't be simplified.
 
-define i64 @test_no_simplify1(i8* %str, i8* %pat) {
+define i64 @test_no_simplify1(ptr %str, ptr %pat) {
 ; CHECK-LABEL: @test_no_simplify1(
 
-  %ret = call i64 @strspn(i8* %str, i8* %pat)
-; CHECK-NEXT: %ret = call i64 @strspn(i8* %str, i8* %pat)
+  %ret = call i64 @strspn(ptr %str, ptr %pat)
+; CHECK-NEXT: %ret = call i64 @strspn(ptr %str, ptr %pat)
   ret i64 %ret
 ; CHECK-NEXT: ret i64 %ret
 }
index a3b26fa0bf6fda2ff5b9f9d6b80bebd3340ddc4b..50edbfffb9f8d4e5de6bd42f6fa49ef13798de6a 100644 (file)
@@ -10,81 +10,77 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 @.str2 = private constant [6 x i8] c"abcde\00"
 @.str3 = private constant [4 x i8] c"bcd\00"
 
-declare i8* @strstr(i8*, i8*)
+declare ptr @strstr(ptr, ptr)
 
 ; Check strstr(str, "") -> str.
 
-define i8* @test_simplify1(i8* %str) {
+define ptr @test_simplify1(ptr %str) {
 ; CHECK-LABEL: @test_simplify1(
-; CHECK-NEXT:    ret i8* [[STR:%.*]]
+; CHECK-NEXT:    ret ptr [[STR:%.*]]
 ;
-  %pat = getelementptr inbounds [1 x i8], [1 x i8]* @.str, i32 0, i32 0
-  %ret = call i8* @strstr(i8* %str, i8* %pat)
-  ret i8* %ret
+  %ret = call ptr @strstr(ptr %str, ptr @.str)
+  ret ptr %ret
 }
 
 ; Check strstr(str, "a") -> strchr(str, 'a').
 
-define i8* @test_simplify2(i8* %str) {
+define ptr @test_simplify2(ptr %str) {
 ; CHECK-LABEL: @test_simplify2(
-; CHECK-NEXT:    [[STRCHR:%.*]] = call i8* @strchr(i8* noundef nonnull dereferenceable(1) [[STR:%.*]], i32 97)
-; CHECK-NEXT:    ret i8* [[STRCHR]]
+; CHECK-NEXT:    [[STRCHR:%.*]] = call ptr @strchr(ptr noundef nonnull dereferenceable(1) [[STR:%.*]], i32 97)
+; CHECK-NEXT:    ret ptr [[STRCHR]]
 ;
-  %pat = getelementptr inbounds [2 x i8], [2 x i8]* @.str1, i32 0, i32 0
-  %ret = call i8* @strstr(i8* %str, i8* %pat)
-  ret i8* %ret
+  %ret = call ptr @strstr(ptr %str, ptr @.str1)
+  ret ptr %ret
 }
 
 ; Check strstr("abcde", "bcd") -> "abcde" + 1.
 
-define i8* @test_simplify3() {
+define ptr @test_simplify3() {
 ; CHECK-LABEL: @test_simplify3(
-; CHECK-NEXT:    ret i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str2, i64 0, i64 1)
+; CHECK-NEXT:    ret ptr getelementptr inbounds ([6 x i8], ptr @.str2, i64 0, i64 1)
 ;
-  %str = getelementptr inbounds [6 x i8], [6 x i8]* @.str2, i32 0, i32 0
-  %pat = getelementptr inbounds [4 x i8], [4 x i8]* @.str3, i32 0, i32 0
-  %ret = call i8* @strstr(i8* %str, i8* %pat)
-  ret i8* %ret
+  %ret = call ptr @strstr(ptr @.str2, ptr @.str3)
+  ret ptr %ret
 }
 
 ; Check strstr(str, str) -> str.
 
-define i8* @test_simplify4(i8* %str) {
+define ptr @test_simplify4(ptr %str) {
 ; CHECK-LABEL: @test_simplify4(
-; CHECK-NEXT:    ret i8* [[STR:%.*]]
+; CHECK-NEXT:    ret ptr [[STR:%.*]]
 ;
-  %ret = call i8* @strstr(i8* %str, i8* %str)
-  ret i8* %ret
+  %ret = call ptr @strstr(ptr %str, ptr %str)
+  ret ptr %ret
 }
 
 ; Check strstr(str, pat) == str -> strncmp(str, pat, strlen(str)) == 0.
 
-define i1 @test_simplify5(i8* %str, i8* %pat) {
+define i1 @test_simplify5(ptr %str, ptr %pat) {
 ; CHECK-LABEL: @test_simplify5(
-; CHECK-NEXT:    [[STRLEN:%.*]] = call i64 @strlen(i8* noundef nonnull dereferenceable(1) [[PAT:%.*]])
-; CHECK-NEXT:    [[STRNCMP:%.*]] = call i32 @strncmp(i8* [[STR:%.*]], i8* [[PAT]], i64 [[STRLEN]])
+; CHECK-NEXT:    [[STRLEN:%.*]] = call i64 @strlen(ptr noundef nonnull dereferenceable(1) [[PAT:%.*]])
+; CHECK-NEXT:    [[STRNCMP:%.*]] = call i32 @strncmp(ptr [[STR:%.*]], ptr [[PAT]], i64 [[STRLEN]])
 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 [[STRNCMP]], 0
 ; CHECK-NEXT:    ret i1 [[CMP1]]
 ;
-  %ret = call i8* @strstr(i8* %str, i8* %pat)
-  %cmp = icmp eq i8* %ret, %str
+  %ret = call ptr @strstr(ptr %str, ptr %pat)
+  %cmp = icmp eq ptr %ret, %str
   ret i1 %cmp
 }
 
-define i8* @test1(i8* %str1, i8* %str2) {
+define ptr @test1(ptr %str1, ptr %str2) {
 ; CHECK-LABEL: @test1(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @strstr(i8* noundef nonnull dereferenceable(1) [[STR1:%.*]], i8* noundef nonnull dereferenceable(1) [[STR2:%.*]])
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @strstr(ptr noundef nonnull dereferenceable(1) [[STR1:%.*]], ptr noundef nonnull dereferenceable(1) [[STR2:%.*]])
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
-  %ret = call i8* @strstr(i8* %str1, i8* %str2)
-  ret i8* %ret
+  %ret = call ptr @strstr(ptr %str1, ptr %str2)
+  ret ptr %ret
 }
 
-define i8* @test2(i8* %str1, i8* %str2) null_pointer_is_valid {
+define ptr @test2(ptr %str1, ptr %str2) null_pointer_is_valid {
 ; CHECK-LABEL: @test2(
-; CHECK-NEXT:    [[RET:%.*]] = call i8* @strstr(i8* noundef [[STR1:%.*]], i8* noundef [[STR2:%.*]])
-; CHECK-NEXT:    ret i8* [[RET]]
+; CHECK-NEXT:    [[RET:%.*]] = call ptr @strstr(ptr noundef [[STR1:%.*]], ptr noundef [[STR2:%.*]])
+; CHECK-NEXT:    ret ptr [[RET]]
 ;
-  %ret = call i8* @strstr(i8* %str1, i8* %str2)
-  ret i8* %ret
+  %ret = call ptr @strstr(ptr %str1, ptr %str2)
+  ret ptr %ret
 }
index 1d527f29e57dac2092ca73e82900d448e87f0e6e..d93aba744fe6d93de8dad2b147c23b2d5a5434ac 100644 (file)
@@ -6,12 +6,11 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
 
 @null = private constant [1 x i8] zeroinitializer
 
-declare i8 @strstr(i8*, i8*)
+declare i8 @strstr(ptr, ptr)
 
-define i8 @test_no_simplify1(i8* %str) {
+define i8 @test_no_simplify1(ptr %str) {
 ; CHECK-LABEL: @test_no_simplify1(
-  %pat = getelementptr inbounds [1 x i8], [1 x i8]* @null, i32 0, i32 0
-  %ret = call i8 @strstr(i8* %str, i8* %pat)
+  %ret = call i8 @strstr(ptr %str, ptr @null)
 ; CHECK-NEXT: call i8 @strstr
   ret i8 %ret
 ; CHECK-NEXT: ret i8 %ret
index 44db69329d4e910ecc29b877150621d39c6878a8..1c5f724f3fd1aa7f99802c40351aba08ca9363a3 100644 (file)
@@ -4,79 +4,79 @@
 
 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:128:128"
 
-declare i32 @strtol(i8* %s, i8** %endptr, i32 %base)
-; CHECK: declare i32 @strtol(i8* readonly, i8** nocapture, i32)
+declare i32 @strtol(ptr %s, ptr %endptr, i32 %base)
+; CHECK: declare i32 @strtol(ptr readonly, ptr nocapture, i32)
 
-declare double @strtod(i8* %s, i8** %endptr)
-; CHECK: declare double @strtod(i8* readonly, i8** nocapture)
+declare double @strtod(ptr %s, ptr %endptr)
+; CHECK: declare double @strtod(ptr readonly, ptr nocapture)
 
-declare float @strtof(i8* %s, i8** %endptr)
-; CHECK: declare float @strtof(i8* readonly, i8** nocapture)
+declare float @strtof(ptr %s, ptr %endptr)
+; CHECK: declare float @strtof(ptr readonly, ptr nocapture)
 
-declare i64 @strtoul(i8* %s, i8** %endptr, i32 %base)
-; CHECK: declare i64 @strtoul(i8* readonly, i8** nocapture, i32)
+declare i64 @strtoul(ptr %s, ptr %endptr, i32 %base)
+; CHECK: declare i64 @strtoul(ptr readonly, ptr nocapture, i32)
 
-declare i64 @strtoll(i8* %s, i8** %endptr, i32 %base)
-; CHECK: declare i64 @strtoll(i8* readonly, i8** nocapture, i32)
+declare i64 @strtoll(ptr %s, ptr %endptr, i32 %base)
+; CHECK: declare i64 @strtoll(ptr readonly, ptr nocapture, i32)
 
-declare double @strtold(i8* %s, i8** %endptr)
-; CHECK: declare double @strtold(i8* readonly, i8** nocapture)
+declare double @strtold(ptr %s, ptr %endptr)
+; CHECK: declare double @strtold(ptr readonly, ptr nocapture)
 
-declare i64 @strtoull(i8* %s, i8** %endptr, i32 %base)
-; CHECK: declare i64 @strtoull(i8* readonly, i8** nocapture, i32)
+declare i64 @strtoull(ptr %s, ptr %endptr, i32 %base)
+; CHECK: declare i64 @strtoull(ptr readonly, ptr nocapture, i32)
 
-define void @test_simplify1(i8* %x, i8** %endptr) {
+define void @test_simplify1(ptr %x, ptr %endptr) {
 ; CHECK-LABEL: @test_simplify1(
-  call i32 @strtol(i8* %x, i8** null, i32 10)
-; CHECK-NEXT: call i32 @strtol(i8* nocapture %x, i8** null, i32 10)
+  call i32 @strtol(ptr %x, ptr null, i32 10)
+; CHECK-NEXT: call i32 @strtol(ptr nocapture %x, ptr null, i32 10)
   ret void
 }
 
-define void @test_simplify2(i8* %x, i8** %endptr) {
+define void @test_simplify2(ptr %x, ptr %endptr) {
 ; CHECK-LABEL: @test_simplify2(
-  call double @strtod(i8* %x, i8** null)
-; CHECK-NEXT: call double @strtod(i8* nocapture %x, i8** null)
+  call double @strtod(ptr %x, ptr null)
+; CHECK-NEXT: call double @strtod(ptr nocapture %x, ptr null)
   ret void
 }
 
-define void @test_simplify3(i8* %x, i8** %endptr) {
+define void @test_simplify3(ptr %x, ptr %endptr) {
 ; CHECK-LABEL: @test_simplify3(
-  call float @strtof(i8* %x, i8** null)
-; CHECK-NEXT: call float @strtof(i8* nocapture %x, i8** null)
+  call float @strtof(ptr %x, ptr null)
+; CHECK-NEXT: call float @strtof(ptr nocapture %x, ptr null)
   ret void
 }
 
-define void @test_simplify4(i8* %x, i8** %endptr) {
+define void @test_simplify4(ptr %x, ptr %endptr) {
 ; CHECK-LABEL: @test_simplify4(
-  call i64 @strtoul(i8* %x, i8** null, i32 10)
-; CHECK-NEXT: call i64 @strtoul(i8* nocapture %x, i8** null, i32 10)
+  call i64 @strtoul(ptr %x, ptr null, i32 10)
+; CHECK-NEXT: call i64 @strtoul(ptr nocapture %x, ptr null, i32 10)
   ret void
 }
 
-define void @test_simplify5(i8* %x, i8** %endptr) {
+define void @test_simplify5(ptr %x, ptr %endptr) {
 ; CHECK-LABEL: @test_simplify5(
-  call i64 @strtoll(i8* %x, i8** null, i32 10)
-; CHECK-NEXT: call i64 @strtoll(i8* nocapture %x, i8** null, i32 10)
+  call i64 @strtoll(ptr %x, ptr null, i32 10)
+; CHECK-NEXT: call i64 @strtoll(ptr nocapture %x, ptr null, i32 10)
   ret void
 }
 
-define void @test_simplify6(i8* %x, i8** %endptr) {
+define void @test_simplify6(ptr %x, ptr %endptr) {
 ; CHECK-LABEL: @test_simplify6(
-  call double @strtold(i8* %x, i8** null)
-; CHECK-NEXT: call double @strtold(i8* nocapture %x, i8** null)
+  call double @strtold(ptr %x, ptr null)
+; CHECK-NEXT: call double @strtold(ptr nocapture %x, ptr null)
   ret void
 }
 
-define void @test_simplify7(i8* %x, i8** %endptr) {
+define void @test_simplify7(ptr %x, ptr %endptr) {
 ; CHECK-LABEL: @test_simplify7(
-  call i64 @strtoull(i8* %x, i8** null, i32 10)
-; CHECK-NEXT: call i64 @strtoull(i8* nocapture %x, i8** null, i32 10)
+  call i64 @strtoull(ptr %x, ptr null, i32 10)
+; CHECK-NEXT: call i64 @strtoull(ptr nocapture %x, ptr null, i32 10)
   ret void
 }
 
-define void @test_no_simplify1(i8* %x, i8** %endptr) {
+define void @test_no_simplify1(ptr %x, ptr %endptr) {
 ; CHECK-LABEL: @test_no_simplify1(
-  call i32 @strtol(i8* %x, i8** %endptr, i32 10)
-; CHECK-NEXT: call i32 @strtol(i8* %x, i8** %endptr, i32 10)
+  call i32 @strtol(ptr %x, ptr %endptr, i32 10)
+; CHECK-NEXT: call i32 @strtol(ptr %x, ptr %endptr, i32 10)
   ret void
 }
index 1f0532c9f0ab0b9988e252ba6b9b69fc056f2e9b..f95529a3c1c2b11aecf9d3a9c7d59e5128a34816 100644 (file)
@@ -5,34 +5,30 @@
 
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
 
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i1) nounwind
+declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture, i64, i1) nounwind
 
 %A = type { float }
 
-define void @test1(%A* %a1, %A* %a2) {
+define void @test1(ptr %a1, ptr %a2) {
 entry:
 ; CHECK-LABEL: @test1
 ; CHECK: %[[LOAD:.*]] = load i32, {{.*}}, !tbaa [[TAG_A:!.*]]
 ; CHECK: store i32 %[[LOAD]], {{.*}}, !tbaa [[TAG_A]]
 ; CHECK: ret
-  %0 = bitcast %A* %a1 to i8*
-  %1 = bitcast %A* %a2 to i8*
-  tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %0, i8* align 4 %1, i64 4, i1 false), !tbaa !4  ; TAG_A
+  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %a1, ptr align 4 %a2, i64 4, i1 false), !tbaa !4  ; TAG_A
   ret void
 }
 
-%B = type { i32 (i8*, i32*, double*)** }
+%B = type { ptr }
 
-define i32 (i8*, i32*, double*)*** @test2() {
+define ptr @test2() {
 ; CHECK-LABEL: @test2
 ; CHECK-NOT: memcpy
 ; CHECK: ret
   %tmp = alloca %B, align 8
-  %tmp1 = bitcast %B* %tmp to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %tmp1, i8* align 8 undef, i64 8, i1 false), !tbaa !7  ; TAG_B
-  %tmp2 = getelementptr %B, %B* %tmp, i32 0, i32 0
-  %tmp3 = load i32 (i8*, i32*, double*)**, i32 (i8*, i32*, double*)*** %tmp2
-  ret i32 (i8*, i32*, double*)*** %tmp2
+  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %tmp, ptr align 8 undef, i64 8, i1 false), !tbaa !7  ; TAG_B
+  %tmp3 = load ptr, ptr %tmp
+  ret ptr %tmp
 }
 
 !0 = !{!"root"}
index 76deb82c516a8d95cc4c93a7e3b3749558ab9b74..741e3746e46e3913f7f2aa4f4c0873dc6dff0175 100644 (file)
@@ -2,7 +2,7 @@
 
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
 
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i1) nounwind
+declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture, i64, i1) nounwind
 
 ; Verify that instcombine preserves TBAA tags when converting a memcpy into
 ; a scalar load and store.
@@ -10,29 +10,25 @@ declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i1) n
 %struct.test1 = type { float }
 
 ; CHECK: @test
-; CHECK: %[[LOAD:.*]] = load i32, i32* %{{.*}}, align 4, !tbaa !0
-; CHECK: store i32 %[[LOAD:.*]], i32* %{{.*}}, align 4, !tbaa !0
+; CHECK: %[[LOAD:.*]] = load i32, ptr %{{.*}}, align 4, !tbaa !0
+; CHECK: store i32 %[[LOAD:.*]], ptr %{{.*}}, align 4, !tbaa !0
 ; CHECK: ret
-define void @test1(%struct.test1* nocapture %a, %struct.test1* nocapture %b) {
+define void @test1(ptr nocapture %a, ptr nocapture %b) {
 entry:
-  %0 = bitcast %struct.test1* %a to i8*
-  %1 = bitcast %struct.test1* %b to i8*
-  tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %0, i8* align 4 %1, i64 4, i1 false), !tbaa.struct !3
+  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %a, ptr align 4 %b, i64 4, i1 false), !tbaa.struct !3
   ret void
 }
 
-%struct.test2 = type { i32 (i8*, i32*, double*)** }
+%struct.test2 = type { ptr }
 
-define i32 (i8*, i32*, double*)*** @test2() {
+define ptr @test2() {
 ; CHECK-LABEL: @test2(
 ; CHECK-NOT: memcpy
 ; CHECK: ret
   %tmp = alloca %struct.test2, align 8
-  %tmp1 = bitcast %struct.test2* %tmp to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %tmp1, i8* align 8 undef, i64 8, i1 false), !tbaa.struct !4
-  %tmp2 = getelementptr %struct.test2, %struct.test2* %tmp, i32 0, i32 0
-  %tmp3 = load i32 (i8*, i32*, double*)**, i32 (i8*, i32*, double*)*** %tmp2
-  ret i32 (i8*, i32*, double*)*** %tmp2
+  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %tmp, ptr align 8 undef, i64 8, i1 false), !tbaa.struct !4
+  %tmp3 = load ptr, ptr %tmp
+  ret ptr %tmp
 }
 
 ; CHECK: !0 = !{!1, !1, i64 0}
index 38aff4bc5357eb7a46d157397ad4913aefdb4f23..94ab50422c4a11e54bd2ba3f3b2530345a0296bb 100644 (file)
@@ -127,48 +127,48 @@ define <4 x i32> @sub_ashr_and_i32_vec_commute(<4 x i32> %x, <4 x i32> %y) {
 
 ; Extra uses
 
-define i32 @sub_ashr_and_i32_extra_use_sub(i32 %x, i32 %y, i32* %p) {
+define i32 @sub_ashr_and_i32_extra_use_sub(i32 %x, i32 %y, ptr %p) {
 ; CHECK-LABEL: @sub_ashr_and_i32_extra_use_sub(
 ; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[Y:%.*]], [[X:%.*]]
-; CHECK-NEXT:    store i32 [[SUB]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[SUB]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[ISNEG:%.*]] = icmp slt i32 [[SUB]], 0
 ; CHECK-NEXT:    [[AND:%.*]] = select i1 [[ISNEG]], i32 [[X]], i32 0
 ; CHECK-NEXT:    ret i32 [[AND]]
 ;
   %sub = sub nsw i32 %y, %x
-  store i32 %sub, i32* %p
+  store i32 %sub, ptr %p
   %shr = ashr i32 %sub, 31
   %and = and i32 %shr, %x
   ret i32 %and
 }
 
-define i32 @sub_ashr_and_i32_extra_use_and(i32 %x, i32 %y, i32* %p) {
+define i32 @sub_ashr_and_i32_extra_use_and(i32 %x, i32 %y, ptr %p) {
 ; CHECK-LABEL: @sub_ashr_and_i32_extra_use_and(
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt i32 [[Y:%.*]], [[X:%.*]]
 ; CHECK-NEXT:    [[AND:%.*]] = select i1 [[TMP1]], i32 [[X]], i32 0
-; CHECK-NEXT:    store i32 [[AND]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[AND]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i32 [[AND]]
 ;
   %sub = sub nsw i32 %y, %x
   %shr = ashr i32 %sub, 31
   %and = and i32 %shr, %x
-  store i32 %and, i32* %p
+  store i32 %and, ptr %p
   ret i32 %and
 }
 
 ; Negative Tests
 
-define i32 @sub_ashr_and_i32_extra_use_ashr(i32 %x, i32 %y, i32* %p) {
+define i32 @sub_ashr_and_i32_extra_use_ashr(i32 %x, i32 %y, ptr %p) {
 ; CHECK-LABEL: @sub_ashr_and_i32_extra_use_ashr(
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt i32 [[Y:%.*]], [[X:%.*]]
 ; CHECK-NEXT:    [[SHR:%.*]] = sext i1 [[TMP1]] to i32
-; CHECK-NEXT:    store i32 [[SHR]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[SHR]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[AND:%.*]] = and i32 [[SHR]], [[X]]
 ; CHECK-NEXT:    ret i32 [[AND]]
 ;
   %sub = sub nsw i32 %y, %x
   %shr = ashr i32 %sub, 31
-  store i32 %shr, i32* %p
+  store i32 %shr, ptr %p
   %and = and i32 %shr, %x
   ret i32 %and
 }
index 36fcb7979e4610d49c3e2d5f79b068f43e00cec5..5a3408dfdacfc0eb0acec7c36cf2fc0e167d742d 100644 (file)
@@ -191,63 +191,63 @@ define <4 x i32> @neg_or_ashr_i32_vec_commute(<4 x i32> %x0) {
 
 ; Extra uses
 
-define i32 @sub_ashr_or_i32_extra_use_sub(i32 %x, i32 %y, i32* %p) {
+define i32 @sub_ashr_or_i32_extra_use_sub(i32 %x, i32 %y, ptr %p) {
 ; CHECK-LABEL: @sub_ashr_or_i32_extra_use_sub(
 ; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[Y:%.*]], [[X:%.*]]
-; CHECK-NEXT:    store i32 [[SUB]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[SUB]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt i32 [[Y]], [[X]]
 ; CHECK-NEXT:    [[OR:%.*]] = select i1 [[TMP1]], i32 -1, i32 [[X]]
 ; CHECK-NEXT:    ret i32 [[OR]]
 ;
   %sub = sub nsw i32 %y, %x
-  store i32 %sub, i32* %p
+  store i32 %sub, ptr %p
   %shr = ashr i32 %sub, 31
   %or = or i32 %shr, %x
   ret i32 %or
 }
 
-define i32 @sub_ashr_or_i32_extra_use_or(i32 %x, i32 %y, i32* %p) {
+define i32 @sub_ashr_or_i32_extra_use_or(i32 %x, i32 %y, ptr %p) {
 ; CHECK-LABEL: @sub_ashr_or_i32_extra_use_or(
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt i32 [[Y:%.*]], [[X:%.*]]
 ; CHECK-NEXT:    [[OR:%.*]] = select i1 [[TMP1]], i32 -1, i32 [[X]]
-; CHECK-NEXT:    store i32 [[OR]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[OR]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i32 [[OR]]
 ;
   %sub = sub nsw i32 %y, %x
   %shr = ashr i32 %sub, 31
   %or = or i32 %shr, %x
-  store i32 %or, i32* %p
+  store i32 %or, ptr %p
   ret i32 %or
 }
 
-define i32 @neg_extra_use_or_ashr_i32(i32 %x, i32* %p) {
+define i32 @neg_extra_use_or_ashr_i32(i32 %x, ptr %p) {
 ; CHECK-LABEL: @neg_extra_use_or_ashr_i32(
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i32 0, [[X:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne i32 [[X]], 0
 ; CHECK-NEXT:    [[SHR:%.*]] = sext i1 [[TMP1]] to i32
-; CHECK-NEXT:    store i32 [[NEG]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[NEG]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i32 [[SHR]]
 ;
   %neg = sub i32 0, %x
   %or = or i32 %neg, %x
   %shr = ashr i32 %or, 31
-  store i32 %neg, i32* %p
+  store i32 %neg, ptr %p
   ret i32 %shr
 }
 
 ; Negative Tests
 
-define i32 @sub_ashr_or_i32_extra_use_ashr(i32 %x, i32 %y, i32* %p) {
+define i32 @sub_ashr_or_i32_extra_use_ashr(i32 %x, i32 %y, ptr %p) {
 ; CHECK-LABEL: @sub_ashr_or_i32_extra_use_ashr(
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp slt i32 [[Y:%.*]], [[X:%.*]]
 ; CHECK-NEXT:    [[SHR:%.*]] = sext i1 [[TMP1]] to i32
-; CHECK-NEXT:    store i32 [[SHR]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[SHR]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[OR:%.*]] = or i32 [[SHR]], [[X]]
 ; CHECK-NEXT:    ret i32 [[OR]]
 ;
   %sub = sub nsw i32 %y, %x
   %shr = ashr i32 %sub, 31
-  store i32 %shr, i32* %p
+  store i32 %shr, ptr %p
   %or = or i32 %shr, %x
   ret i32 %or
 }
@@ -265,18 +265,18 @@ define i32 @sub_ashr_or_i32_no_nsw_nuw(i32 %x, i32 %y) {
   ret i32 %or
 }
 
-define i32 @neg_or_extra_use_ashr_i32(i32 %x, i32* %p) {
+define i32 @neg_or_extra_use_ashr_i32(i32 %x, ptr %p) {
 ; CHECK-LABEL: @neg_or_extra_use_ashr_i32(
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i32 0, [[X:%.*]]
 ; CHECK-NEXT:    [[OR:%.*]] = or i32 [[NEG]], [[X]]
 ; CHECK-NEXT:    [[SHR:%.*]] = ashr i32 [[OR]], 31
-; CHECK-NEXT:    store i32 [[OR]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[OR]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i32 [[SHR]]
 ;
   %neg = sub i32 0, %x
   %or = or i32 %neg, %x
   %shr = ashr i32 %or, 31
-  store i32 %or, i32* %p
+  store i32 %or, ptr %p
   ret i32 %shr
 }
 
index 382236feb74ce79bfedd5b3e9d213d096d189c51..7976cdc970b9c5bd4b3a1a17dcc52c131e7925a7 100644 (file)
@@ -172,44 +172,44 @@ define i8 @t12_c1_c2_exrause(i8 %x, i8 %z) {
 ; PR49870
 @g0 = external global i8, align 1
 @g1 = external global i8, align 1
-define i32 @constantexpr0(i32 %x, i8* %y) unnamed_addr {
+define i32 @constantexpr0(i32 %x, ptr %y) unnamed_addr {
 ; CHECK-LABEL: @constantexpr0(
-; CHECK-NEXT:    [[I0:%.*]] = add i32 [[X:%.*]], ptrtoint (i8* @g0 to i32)
+; CHECK-NEXT:    [[I0:%.*]] = add i32 [[X:%.*]], ptrtoint (ptr @g0 to i32)
 ; CHECK-NEXT:    [[R:%.*]] = sub i32 0, [[I0]]
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
-  %i0 = add i32 %x, ptrtoint (i8* @g0 to i32)
+  %i0 = add i32 %x, ptrtoint (ptr @g0 to i32)
   %r = sub i32 0, %i0
   ret i32 %r
 }
-define i32 @constantexpr1(i32 %x, i8* %y) unnamed_addr {
+define i32 @constantexpr1(i32 %x, ptr %y) unnamed_addr {
 ; CHECK-LABEL: @constantexpr1(
 ; CHECK-NEXT:    [[I0:%.*]] = add i32 [[X:%.*]], 42
-; CHECK-NEXT:    [[R:%.*]] = sub i32 ptrtoint (i8* @g1 to i32), [[I0]]
+; CHECK-NEXT:    [[R:%.*]] = sub i32 ptrtoint (ptr @g1 to i32), [[I0]]
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %i0 = add i32 %x, 42
-  %r = sub i32 ptrtoint (i8* @g1 to i32), %i0
+  %r = sub i32 ptrtoint (ptr @g1 to i32), %i0
   ret i32 %r
 }
-define i32 @constantexpr2(i32 %x, i8* %y) unnamed_addr {
+define i32 @constantexpr2(i32 %x, ptr %y) unnamed_addr {
 ; CHECK-LABEL: @constantexpr2(
-; CHECK-NEXT:    [[I0:%.*]] = add i32 [[X:%.*]], ptrtoint (i8* @g0 to i32)
-; CHECK-NEXT:    [[R:%.*]] = sub i32 ptrtoint (i8* @g1 to i32), [[I0]]
+; CHECK-NEXT:    [[I0:%.*]] = add i32 [[X:%.*]], ptrtoint (ptr @g0 to i32)
+; CHECK-NEXT:    [[R:%.*]] = sub i32 ptrtoint (ptr @g1 to i32), [[I0]]
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
-  %i0 = add i32 %x, ptrtoint (i8* @g0 to i32)
-  %r = sub i32 ptrtoint (i8* @g1 to i32), %i0
+  %i0 = add i32 %x, ptrtoint (ptr @g0 to i32)
+  %r = sub i32 ptrtoint (ptr @g1 to i32), %i0
   ret i32 %r
 }
 
 define i64 @pr49870(i64 %x) {
 ; CHECK-LABEL: @pr49870(
 ; CHECK-NEXT:    [[I0:%.*]] = xor i64 [[X:%.*]], -1
-; CHECK-NEXT:    [[R:%.*]] = add i64 [[I0]], ptrtoint (i8* @g0 to i64)
+; CHECK-NEXT:    [[R:%.*]] = add i64 [[I0]], ptrtoint (ptr @g0 to i64)
 ; CHECK-NEXT:    ret i64 [[R]]
 ;
   %i0 = xor i64 %x, -1
-  %r = add i64 %i0, ptrtoint (i8* @g0 to i64)
+  %r = add i64 %i0, ptrtoint (ptr @g0 to i64)
   ret i64 %r
 }
index 5cf5941e897464441f2fd1ded748eb49ea9d7183..fed081c96d44dbb720660da88b3777d4097eceef 100644 (file)
 
 target datalayout = "e-p:64:64:64-p1:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
 
-define i64 @test_inbounds([0 x i32]* %base, i64 %idx) {
+define i64 @test_inbounds(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @test_inbounds(
 ; CHECK-NEXT:    [[P2_IDX:%.*]] = shl nsw i64 [[IDX:%.*]], 2
 ; CHECK-NEXT:    ret i64 [[P2_IDX]]
 ;
-  %p1 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 0
-  %p2 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 %idx
-  %i1 = ptrtoint i32* %p1 to i64
-  %i2 = ptrtoint i32* %p2 to i64
+  %p2 = getelementptr inbounds [0 x i32], ptr %base, i64 0, i64 %idx
+  %i1 = ptrtoint ptr %base to i64
+  %i2 = ptrtoint ptr %p2 to i64
   %d = sub i64 %i2, %i1
   ret i64 %d
 }
 
-define i64 @test_partial_inbounds1([0 x i32]* %base, i64 %idx) {
+define i64 @test_partial_inbounds1(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @test_partial_inbounds1(
 ; CHECK-NEXT:    [[P2_IDX:%.*]] = shl i64 [[IDX:%.*]], 2
 ; CHECK-NEXT:    ret i64 [[P2_IDX]]
 ;
-  %p1 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 0
-  %p2 = getelementptr [0 x i32], [0 x i32]* %base, i64 0, i64 %idx
-  %i1 = ptrtoint i32* %p1 to i64
-  %i2 = ptrtoint i32* %p2 to i64
+  %p2 = getelementptr [0 x i32], ptr %base, i64 0, i64 %idx
+  %i1 = ptrtoint ptr %base to i64
+  %i2 = ptrtoint ptr %p2 to i64
   %d = sub i64 %i2, %i1
   ret i64 %d
 }
 
-define i64 @test_partial_inbounds2([0 x i32]* %base, i64 %idx) {
+define i64 @test_partial_inbounds2(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @test_partial_inbounds2(
 ; CHECK-NEXT:    [[P2_IDX:%.*]] = shl nsw i64 [[IDX:%.*]], 2
 ; CHECK-NEXT:    ret i64 [[P2_IDX]]
 ;
-  %p1 = getelementptr [0 x i32], [0 x i32]* %base, i64 0, i64 0
-  %p2 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 %idx
-  %i1 = ptrtoint i32* %p1 to i64
-  %i2 = ptrtoint i32* %p2 to i64
+  %p2 = getelementptr inbounds [0 x i32], ptr %base, i64 0, i64 %idx
+  %i1 = ptrtoint ptr %base to i64
+  %i2 = ptrtoint ptr %p2 to i64
   %d = sub i64 %i2, %i1
   ret i64 %d
 }
 
-define i64 @test_inbounds_nuw([0 x i32]* %base, i64 %idx) {
+define i64 @test_inbounds_nuw(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @test_inbounds_nuw(
 ; CHECK-NEXT:    [[P2_IDX:%.*]] = shl nuw nsw i64 [[IDX:%.*]], 2
 ; CHECK-NEXT:    ret i64 [[P2_IDX]]
 ;
-  %p1 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 0
-  %p2 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 %idx
-  %i1 = ptrtoint i32* %p1 to i64
-  %i2 = ptrtoint i32* %p2 to i64
+  %p2 = getelementptr inbounds [0 x i32], ptr %base, i64 0, i64 %idx
+  %i1 = ptrtoint ptr %base to i64
+  %i2 = ptrtoint ptr %p2 to i64
   %d = sub nuw i64 %i2, %i1
   ret i64 %d
 }
 
-define i64 @test_nuw([0 x i32]* %base, i64 %idx) {
+define i64 @test_nuw(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @test_nuw(
 ; CHECK-NEXT:    [[P2_IDX:%.*]] = shl i64 [[IDX:%.*]], 2
 ; CHECK-NEXT:    ret i64 [[P2_IDX]]
 ;
-  %p1 = getelementptr [0 x i32], [0 x i32]* %base, i64 0, i64 0
-  %p2 = getelementptr [0 x i32], [0 x i32]* %base, i64 0, i64 %idx
-  %i1 = ptrtoint i32* %p1 to i64
-  %i2 = ptrtoint i32* %p2 to i64
+  %p2 = getelementptr [0 x i32], ptr %base, i64 0, i64 %idx
+  %i1 = ptrtoint ptr %base to i64
+  %i2 = ptrtoint ptr %p2 to i64
   %d = sub nuw i64 %i2, %i1
   ret i64 %d
 }
 
-define i32 @test_inbounds_nuw_trunc([0 x i32]* %base, i64 %idx) {
+define i32 @test_inbounds_nuw_trunc(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @test_inbounds_nuw_trunc(
 ; CHECK-NEXT:    [[IDX_TR:%.*]] = trunc i64 [[IDX:%.*]] to i32
 ; CHECK-NEXT:    [[TMP1:%.*]] = shl i32 [[IDX_TR]], 2
 ; CHECK-NEXT:    ret i32 [[TMP1]]
 ;
-  %p1 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 0
-  %p2 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 %idx
-  %i1 = ptrtoint i32* %p1 to i64
-  %i2 = ptrtoint i32* %p2 to i64
+  %p2 = getelementptr inbounds [0 x i32], ptr %base, i64 0, i64 %idx
+  %i1 = ptrtoint ptr %base to i64
+  %i2 = ptrtoint ptr %p2 to i64
   %t1 = trunc i64 %i1 to i32
   %t2 = trunc i64 %i2 to i32
   %d = sub nuw i32 %t2, %t1
   ret i32 %d
 }
 
-define i64 @test_inbounds_nuw_swapped([0 x i32]* %base, i64 %idx) {
+define i64 @test_inbounds_nuw_swapped(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @test_inbounds_nuw_swapped(
 ; CHECK-NEXT:    [[P2_IDX_NEG:%.*]] = mul i64 [[IDX:%.*]], -4
 ; CHECK-NEXT:    ret i64 [[P2_IDX_NEG]]
 ;
-  %p1 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 0
-  %p2 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 %idx
-  %i1 = ptrtoint i32* %p2 to i64
-  %i2 = ptrtoint i32* %p1 to i64
+  %p2 = getelementptr inbounds [0 x i32], ptr %base, i64 0, i64 %idx
+  %i1 = ptrtoint ptr %p2 to i64
+  %i2 = ptrtoint ptr %base to i64
   %d = sub nuw i64 %i2, %i1
   ret i64 %d
 }
 
-define i64 @test_inbounds1_nuw_swapped([0 x i32]* %base, i64 %idx) {
+define i64 @test_inbounds1_nuw_swapped(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @test_inbounds1_nuw_swapped(
 ; CHECK-NEXT:    [[P2_IDX_NEG:%.*]] = mul i64 [[IDX:%.*]], -4
 ; CHECK-NEXT:    ret i64 [[P2_IDX_NEG]]
 ;
-  %p1 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 0
-  %p2 = getelementptr [0 x i32], [0 x i32]* %base, i64 0, i64 %idx
-  %i1 = ptrtoint i32* %p2 to i64
-  %i2 = ptrtoint i32* %p1 to i64
+  %p2 = getelementptr [0 x i32], ptr %base, i64 0, i64 %idx
+  %i1 = ptrtoint ptr %p2 to i64
+  %i2 = ptrtoint ptr %base to i64
   %d = sub nuw i64 %i2, %i1
   ret i64 %d
 }
 
-define i64 @test_inbounds2_nuw_swapped([0 x i32]* %base, i64 %idx) {
+define i64 @test_inbounds2_nuw_swapped(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @test_inbounds2_nuw_swapped(
 ; CHECK-NEXT:    [[P2_IDX_NEG:%.*]] = mul i64 [[IDX:%.*]], -4
 ; CHECK-NEXT:    ret i64 [[P2_IDX_NEG]]
 ;
-  %p1 = getelementptr [0 x i32], [0 x i32]* %base, i64 0, i64 0
-  %p2 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 %idx
-  %i1 = ptrtoint i32* %p2 to i64
-  %i2 = ptrtoint i32* %p1 to i64
+  %p2 = getelementptr inbounds [0 x i32], ptr %base, i64 0, i64 %idx
+  %i1 = ptrtoint ptr %p2 to i64
+  %i2 = ptrtoint ptr %base to i64
   %d = sub nuw i64 %i2, %i1
   ret i64 %d
 }
 
-define i64 @test_inbounds_two_gep([0 x i32]* %base, i64 %idx, i64 %idx2) {
+define i64 @test_inbounds_two_gep(ptr %base, i64 %idx, i64 %idx2) {
 ; CHECK-LABEL: @test_inbounds_two_gep(
 ; CHECK-NEXT:    [[TMP1:%.*]] = sub nsw i64 [[IDX2:%.*]], [[IDX:%.*]]
 ; CHECK-NEXT:    [[GEPDIFF:%.*]] = shl nsw i64 [[TMP1]], 2
 ; CHECK-NEXT:    ret i64 [[GEPDIFF]]
 ;
-  %p1 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 %idx
-  %p2 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 %idx2
-  %i1 = ptrtoint i32* %p1 to i64
-  %i2 = ptrtoint i32* %p2 to i64
+  %p1 = getelementptr inbounds [0 x i32], ptr %base, i64 0, i64 %idx
+  %p2 = getelementptr inbounds [0 x i32], ptr %base, i64 0, i64 %idx2
+  %i1 = ptrtoint ptr %p1 to i64
+  %i2 = ptrtoint ptr %p2 to i64
   %d = sub i64 %i2, %i1
   ret i64 %d
 }
 
-define i64 @test_inbounds_nsw_two_gep([0 x i32]* %base, i64 %idx, i64 %idx2) {
+define i64 @test_inbounds_nsw_two_gep(ptr %base, i64 %idx, i64 %idx2) {
 ; CHECK-LABEL: @test_inbounds_nsw_two_gep(
 ; CHECK-NEXT:    [[TMP1:%.*]] = sub nsw i64 [[IDX2:%.*]], [[IDX:%.*]]
 ; CHECK-NEXT:    [[GEPDIFF:%.*]] = shl nsw i64 [[TMP1]], 2
 ; CHECK-NEXT:    ret i64 [[GEPDIFF]]
 ;
-  %p1 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 %idx
-  %p2 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 %idx2
-  %i1 = ptrtoint i32* %p1 to i64
-  %i2 = ptrtoint i32* %p2 to i64
+  %p1 = getelementptr inbounds [0 x i32], ptr %base, i64 0, i64 %idx
+  %p2 = getelementptr inbounds [0 x i32], ptr %base, i64 0, i64 %idx2
+  %i1 = ptrtoint ptr %p1 to i64
+  %i2 = ptrtoint ptr %p2 to i64
   %d = sub nsw i64 %i2, %i1
   ret i64 %d
 }
 
-define i64 @test_inbounds_nuw_two_gep([0 x i32]* %base, i64 %idx, i64 %idx2) {
+define i64 @test_inbounds_nuw_two_gep(ptr %base, i64 %idx, i64 %idx2) {
 ; CHECK-LABEL: @test_inbounds_nuw_two_gep(
 ; CHECK-NEXT:    [[TMP1:%.*]] = sub nsw i64 [[IDX2:%.*]], [[IDX:%.*]]
 ; CHECK-NEXT:    [[GEPDIFF:%.*]] = shl nsw i64 [[TMP1]], 2
 ; CHECK-NEXT:    ret i64 [[GEPDIFF]]
 ;
-  %p1 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 %idx
-  %p2 = getelementptr inbounds [0 x i32], [0 x i32]* %base, i64 0, i64 %idx2
-  %i1 = ptrtoint i32* %p1 to i64
-  %i2 = ptrtoint i32* %p2 to i64
+  %p1 = getelementptr inbounds [0 x i32], ptr %base, i64 0, i64 %idx
+  %p2 = getelementptr inbounds [0 x i32], ptr %base, i64 0, i64 %idx2
+  %i1 = ptrtoint ptr %p1 to i64
+  %i2 = ptrtoint ptr %p2 to i64
   %d = sub nuw i64 %i2, %i1
   ret i64 %d
 }
 
-define i64 @test_inbounds_nuw_multi_index([0 x [2 x i32]]* %base, i64 %idx, i64 %idx2) {
+define i64 @test_inbounds_nuw_multi_index(ptr %base, i64 %idx, i64 %idx2) {
 ; CHECK-LABEL: @test_inbounds_nuw_multi_index(
 ; CHECK-NEXT:    [[P2_IDX:%.*]] = shl nsw i64 [[IDX:%.*]], 3
 ; CHECK-NEXT:    [[P2_IDX1:%.*]] = shl nsw i64 [[IDX2:%.*]], 2
 ; CHECK-NEXT:    [[P2_OFFS:%.*]] = add nsw i64 [[P2_IDX]], [[P2_IDX1]]
 ; CHECK-NEXT:    ret i64 [[P2_OFFS]]
 ;
-  %p1 = getelementptr inbounds [0 x [2 x i32]], [0 x [2 x i32]]* %base, i64 0, i64 0, i64 0
-  %p2 = getelementptr inbounds [0 x [2 x i32]], [0 x [2 x i32]]* %base, i64 0, i64 %idx, i64 %idx2
-  %i1 = ptrtoint i32* %p1 to i64
-  %i2 = ptrtoint i32* %p2 to i64
+  %p2 = getelementptr inbounds [0 x [2 x i32]], ptr %base, i64 0, i64 %idx, i64 %idx2
+  %i1 = ptrtoint ptr %base to i64
+  %i2 = ptrtoint ptr %p2 to i64
   %d = sub nuw i64 %i2, %i1
   ret i64 %d
 }
 
 ; rdar://7362831
-define i32 @test23(i8* %P, i64 %A){
+define i32 @test23(ptr %P, i64 %A){
 ; CHECK-LABEL: @test23(
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i64 [[A:%.*]] to i32
 ; CHECK-NEXT:    ret i32 [[TMP1]]
 ;
-  %B = getelementptr inbounds i8, i8* %P, i64 %A
-  %C = ptrtoint i8* %B to i64
+  %B = getelementptr inbounds i8, ptr %P, i64 %A
+  %C = ptrtoint ptr %B to i64
   %D = trunc i64 %C to i32
-  %E = ptrtoint i8* %P to i64
+  %E = ptrtoint ptr %P to i64
   %F = trunc i64 %E to i32
   %G = sub i32 %D, %F
   ret i32 %G
 }
 
-define i8 @test23_as1(i8 addrspace(1)* %P, i16 %A) {
+define i8 @test23_as1(ptr addrspace(1) %P, i16 %A) {
 ; CHECK-LABEL: @test23_as1(
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i16 [[A:%.*]] to i8
 ; CHECK-NEXT:    ret i8 [[TMP1]]
 ;
-  %B = getelementptr inbounds i8, i8 addrspace(1)* %P, i16 %A
-  %C = ptrtoint i8 addrspace(1)* %B to i16
+  %B = getelementptr inbounds i8, ptr addrspace(1) %P, i16 %A
+  %C = ptrtoint ptr addrspace(1) %B to i16
   %D = trunc i16 %C to i8
-  %E = ptrtoint i8 addrspace(1)* %P to i16
+  %E = ptrtoint ptr addrspace(1) %P to i16
   %F = trunc i16 %E to i8
   %G = sub i8 %D, %F
   ret i8 %G
 }
 
-define i64 @test24(i8* %P, i64 %A){
+define i64 @test24(ptr %P, i64 %A){
 ; CHECK-LABEL: @test24(
 ; CHECK-NEXT:    ret i64 [[A:%.*]]
 ;
-  %B = getelementptr inbounds i8, i8* %P, i64 %A
-  %C = ptrtoint i8* %B to i64
-  %E = ptrtoint i8* %P to i64
+  %B = getelementptr inbounds i8, ptr %P, i64 %A
+  %C = ptrtoint ptr %B to i64
+  %E = ptrtoint ptr %P to i64
   %G = sub i64 %C, %E
   ret i64 %G
 }
 
-define i16 @test24_as1(i8 addrspace(1)* %P, i16 %A) {
+define i16 @test24_as1(ptr addrspace(1) %P, i16 %A) {
 ; CHECK-LABEL: @test24_as1(
 ; CHECK-NEXT:    ret i16 [[A:%.*]]
 ;
-  %B = getelementptr inbounds i8, i8 addrspace(1)* %P, i16 %A
-  %C = ptrtoint i8 addrspace(1)* %B to i16
-  %E = ptrtoint i8 addrspace(1)* %P to i16
+  %B = getelementptr inbounds i8, ptr addrspace(1) %P, i16 %A
+  %C = ptrtoint ptr addrspace(1) %B to i16
+  %E = ptrtoint ptr addrspace(1) %P to i16
   %G = sub i16 %C, %E
   ret i16 %G
 }
 
-define i64 @test24a(i8* %P, i64 %A){
+define i64 @test24a(ptr %P, i64 %A){
 ; CHECK-LABEL: @test24a(
 ; CHECK-NEXT:    [[DIFF_NEG:%.*]] = sub i64 0, [[A:%.*]]
 ; CHECK-NEXT:    ret i64 [[DIFF_NEG]]
 ;
-  %B = getelementptr inbounds i8, i8* %P, i64 %A
-  %C = ptrtoint i8* %B to i64
-  %E = ptrtoint i8* %P to i64
+  %B = getelementptr inbounds i8, ptr %P, i64 %A
+  %C = ptrtoint ptr %B to i64
+  %E = ptrtoint ptr %P to i64
   %G = sub i64 %E, %C
   ret i64 %G
 }
 
-define i16 @test24a_as1(i8 addrspace(1)* %P, i16 %A) {
+define i16 @test24a_as1(ptr addrspace(1) %P, i16 %A) {
 ; CHECK-LABEL: @test24a_as1(
 ; CHECK-NEXT:    [[DIFF_NEG:%.*]] = sub i16 0, [[A:%.*]]
 ; CHECK-NEXT:    ret i16 [[DIFF_NEG]]
 ;
-  %B = getelementptr inbounds i8, i8 addrspace(1)* %P, i16 %A
-  %C = ptrtoint i8 addrspace(1)* %B to i16
-  %E = ptrtoint i8 addrspace(1)* %P to i16
+  %B = getelementptr inbounds i8, ptr addrspace(1) %P, i16 %A
+  %C = ptrtoint ptr addrspace(1) %B to i16
+  %E = ptrtoint ptr addrspace(1) %P to i16
   %G = sub i16 %E, %C
   ret i16 %G
 }
 
 @Arr = external global [42 x i16]
 
-define i64 @test24b(i8* %P, i64 %A){
+define i64 @test24b(ptr %P, i64 %A){
 ; CHECK-LABEL: @test24b(
 ; CHECK-NEXT:    [[B_IDX:%.*]] = shl nsw i64 [[A:%.*]], 1
 ; CHECK-NEXT:    ret i64 [[B_IDX]]
 ;
-  %B = getelementptr inbounds [42 x i16], [42 x i16]* @Arr, i64 0, i64 %A
-  %C = ptrtoint i16* %B to i64
-  %G = sub i64 %C, ptrtoint ([42 x i16]* @Arr to i64)
+  %B = getelementptr inbounds [42 x i16], ptr @Arr, i64 0, i64 %A
+  %C = ptrtoint ptr %B to i64
+  %G = sub i64 %C, ptrtoint (ptr @Arr to i64)
   ret i64 %G
 }
 
-define i64 @test25(i8* %P, i64 %A){
+define i64 @test25(ptr %P, i64 %A){
 ; CHECK-LABEL: @test25(
 ; CHECK-NEXT:    [[B_IDX:%.*]] = shl nsw i64 [[A:%.*]], 1
 ; CHECK-NEXT:    [[GEPDIFF:%.*]] = add nsw i64 [[B_IDX]], -84
 ; CHECK-NEXT:    ret i64 [[GEPDIFF]]
 ;
-  %B = getelementptr inbounds [42 x i16], [42 x i16]* @Arr, i64 0, i64 %A
-  %C = ptrtoint i16* %B to i64
-  %G = sub i64 %C, ptrtoint (i16* getelementptr ([42 x i16], [42 x i16]* @Arr, i64 1, i64 0) to i64)
+  %B = getelementptr inbounds [42 x i16], ptr @Arr, i64 0, i64 %A
+  %C = ptrtoint ptr %B to i64
+  %G = sub i64 %C, ptrtoint (ptr getelementptr ([42 x i16], ptr @Arr, i64 1, i64 0) to i64)
   ret i64 %G
 }
 
 @Arr_as1 = external addrspace(1) global [42 x i16]
 
-define i16 @test25_as1(i8 addrspace(1)* %P, i64 %A) {
+define i16 @test25_as1(ptr addrspace(1) %P, i64 %A) {
 ; CHECK-LABEL: @test25_as1(
 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i64 [[A:%.*]] to i16
 ; CHECK-NEXT:    [[B_IDX:%.*]] = shl nsw i16 [[TMP1]], 1
 ; CHECK-NEXT:    [[GEPDIFF:%.*]] = add nsw i16 [[B_IDX]], -84
 ; CHECK-NEXT:    ret i16 [[GEPDIFF]]
 ;
-  %B = getelementptr inbounds [42 x i16], [42 x i16] addrspace(1)* @Arr_as1, i64 0, i64 %A
-  %C = ptrtoint i16 addrspace(1)* %B to i16
-  %G = sub i16 %C, ptrtoint (i16 addrspace(1)* getelementptr ([42 x i16], [42 x i16] addrspace(1)* @Arr_as1, i64 1, i64 0) to i16)
+  %B = getelementptr inbounds [42 x i16], ptr addrspace(1) @Arr_as1, i64 0, i64 %A
+  %C = ptrtoint ptr addrspace(1) %B to i16
+  %G = sub i16 %C, ptrtoint (ptr addrspace(1) getelementptr ([42 x i16], ptr addrspace(1) @Arr_as1, i64 1, i64 0) to i16)
   ret i16 %G
 }
 
-define i64 @test30(i8* %foo, i64 %i, i64 %j) {
+define i64 @test30(ptr %foo, i64 %i, i64 %j) {
 ; CHECK-LABEL: @test30(
 ; CHECK-NEXT:    [[GEP1_IDX:%.*]] = shl nsw i64 [[I:%.*]], 2
 ; CHECK-NEXT:    [[GEPDIFF:%.*]] = sub nsw i64 [[GEP1_IDX]], [[J:%.*]]
 ; CHECK-NEXT:    ret i64 [[GEPDIFF]]
 ;
-  %bit = bitcast i8* %foo to i32*
-  %gep1 = getelementptr inbounds i32, i32* %bit, i64 %i
-  %gep2 = getelementptr inbounds i8, i8* %foo, i64 %j
-  %cast1 = ptrtoint i32* %gep1 to i64
-  %cast2 = ptrtoint i8* %gep2 to i64
+  %gep1 = getelementptr inbounds i32, ptr %foo, i64 %i
+  %gep2 = getelementptr inbounds i8, ptr %foo, i64 %j
+  %cast1 = ptrtoint ptr %gep1 to i64
+  %cast2 = ptrtoint ptr %gep2 to i64
   %sub = sub i64 %cast1, %cast2
   ret i64 %sub
 }
 
-define i16 @test30_as1(i8 addrspace(1)* %foo, i16 %i, i16 %j) {
+define i16 @test30_as1(ptr addrspace(1) %foo, i16 %i, i16 %j) {
 ; CHECK-LABEL: @test30_as1(
 ; CHECK-NEXT:    [[GEP1_IDX:%.*]] = shl nsw i16 [[I:%.*]], 2
 ; CHECK-NEXT:    [[GEPDIFF:%.*]] = sub nsw i16 [[GEP1_IDX]], [[J:%.*]]
 ; CHECK-NEXT:    ret i16 [[GEPDIFF]]
 ;
-  %bit = bitcast i8 addrspace(1)* %foo to i32 addrspace(1)*
-  %gep1 = getelementptr inbounds i32, i32 addrspace(1)* %bit, i16 %i
-  %gep2 = getelementptr inbounds i8, i8 addrspace(1)* %foo, i16 %j
-  %cast1 = ptrtoint i32 addrspace(1)* %gep1 to i16
-  %cast2 = ptrtoint i8 addrspace(1)* %gep2 to i16
+  %gep1 = getelementptr inbounds i32, ptr addrspace(1) %foo, i16 %i
+  %gep2 = getelementptr inbounds i8, ptr addrspace(1) %foo, i16 %j
+  %cast1 = ptrtoint ptr addrspace(1) %gep1 to i16
+  %cast2 = ptrtoint ptr addrspace(1) %gep2 to i16
   %sub = sub i16 %cast1, %cast2
   ret i16 %sub
 }
 
 ; Inbounds translates to 'nsw' on sub
 
-define i64 @gep_diff_both_inbounds(i8* %foo, i64 %i, i64 %j) {
+define i64 @gep_diff_both_inbounds(ptr %foo, i64 %i, i64 %j) {
 ; CHECK-LABEL: @gep_diff_both_inbounds(
 ; CHECK-NEXT:    [[GEPDIFF:%.*]] = sub nsw i64 [[I:%.*]], [[J:%.*]]
 ; CHECK-NEXT:    ret i64 [[GEPDIFF]]
 ;
-  %gep1 = getelementptr inbounds i8, i8* %foo, i64 %i
-  %gep2 = getelementptr inbounds i8, i8* %foo, i64 %j
-  %cast1 = ptrtoint i8* %gep1 to i64
-  %cast2 = ptrtoint i8* %gep2 to i64
+  %gep1 = getelementptr inbounds i8, ptr %foo, i64 %i
+  %gep2 = getelementptr inbounds i8, ptr %foo, i64 %j
+  %cast1 = ptrtoint ptr %gep1 to i64
+  %cast2 = ptrtoint ptr %gep2 to i64
   %sub = sub i64 %cast1, %cast2
   ret i64 %sub
 }
 
 ; Negative test for 'nsw' - both geps must be inbounds
 
-define i64 @gep_diff_first_inbounds(i8* %foo, i64 %i, i64 %j) {
+define i64 @gep_diff_first_inbounds(ptr %foo, i64 %i, i64 %j) {
 ; CHECK-LABEL: @gep_diff_first_inbounds(
 ; CHECK-NEXT:    [[GEPDIFF:%.*]] = sub i64 [[I:%.*]], [[J:%.*]]
 ; CHECK-NEXT:    ret i64 [[GEPDIFF]]
 ;
-  %gep1 = getelementptr inbounds i8, i8* %foo, i64 %i
-  %gep2 = getelementptr i8, i8* %foo, i64 %j
-  %cast1 = ptrtoint i8* %gep1 to i64
-  %cast2 = ptrtoint i8* %gep2 to i64
+  %gep1 = getelementptr inbounds i8, ptr %foo, i64 %i
+  %gep2 = getelementptr i8, ptr %foo, i64 %j
+  %cast1 = ptrtoint ptr %gep1 to i64
+  %cast2 = ptrtoint ptr %gep2 to i64
   %sub = sub i64 %cast1, %cast2
   ret i64 %sub
 }
 
 ; Negative test for 'nsw' - both geps must be inbounds
 
-define i64 @gep_diff_second_inbounds(i8* %foo, i64 %i, i64 %j) {
+define i64 @gep_diff_second_inbounds(ptr %foo, i64 %i, i64 %j) {
 ; CHECK-LABEL: @gep_diff_second_inbounds(
 ; CHECK-NEXT:    [[GEPDIFF:%.*]] = sub i64 [[I:%.*]], [[J:%.*]]
 ; CHECK-NEXT:    ret i64 [[GEPDIFF]]
 ;
-  %gep1 = getelementptr i8, i8* %foo, i64 %i
-  %gep2 = getelementptr inbounds i8, i8* %foo, i64 %j
-  %cast1 = ptrtoint i8* %gep1 to i64
-  %cast2 = ptrtoint i8* %gep2 to i64
+  %gep1 = getelementptr i8, ptr %foo, i64 %i
+  %gep2 = getelementptr inbounds i8, ptr %foo, i64 %j
+  %cast1 = ptrtoint ptr %gep1 to i64
+  %cast2 = ptrtoint ptr %gep2 to i64
   %sub = sub i64 %cast1, %cast2
   ret i64 %sub
 }
 
-define i64 @gep_diff_with_bitcast(i64* %p, i64 %idx) {
+define i64 @gep_diff_with_bitcast(ptr %p, i64 %idx) {
 ; CHECK-LABEL: @gep_diff_with_bitcast(
 ; CHECK-NEXT:    ret i64 [[IDX:%.*]]
 ;
-  %i0 = bitcast i64* %p to [4 x i64]*
-  %i1 = getelementptr inbounds [4 x i64], [4 x i64]* %i0, i64 %idx
-  %i3 = ptrtoint [4 x i64]* %i1 to i64
-  %i4 = ptrtoint i64* %p to i64
+  %i1 = getelementptr inbounds [4 x i64], ptr %p, i64 %idx
+  %i3 = ptrtoint ptr %i1 to i64
+  %i4 = ptrtoint ptr %p to i64
   %i5 = sub nuw i64 %i3, %i4
   %i6 = lshr i64 %i5, 5
   ret i64 %i6
index fb460bb0ec1c6fe2d90fb5a48004d40b8a58e952..5ecf4b8da0c490784d8371ab2c791a80976c2cde 100644 (file)
@@ -61,34 +61,34 @@ define <4 x i32> @neg_or_lshr_i32_vec_commute(<4 x i32> %x0) {
 
 ; Extra uses
 
-define i32 @neg_extra_use_or_lshr_i32(i32 %x, i32* %p) {
+define i32 @neg_extra_use_or_lshr_i32(i32 %x, ptr %p) {
 ; CHECK-LABEL: @neg_extra_use_or_lshr_i32(
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i32 0, [[X:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne i32 [[X]], 0
 ; CHECK-NEXT:    [[SHR:%.*]] = zext i1 [[TMP1]] to i32
-; CHECK-NEXT:    store i32 [[NEG]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[NEG]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i32 [[SHR]]
 ;
   %neg = sub i32 0, %x
   %or = or i32 %neg, %x
   %shr = lshr i32 %or, 31
-  store i32 %neg, i32* %p
+  store i32 %neg, ptr %p
   ret i32 %shr
 }
 
 ; Negative Tests
 
-define i32 @neg_or_extra_use_lshr_i32(i32 %x, i32* %p) {
+define i32 @neg_or_extra_use_lshr_i32(i32 %x, ptr %p) {
 ; CHECK-LABEL: @neg_or_extra_use_lshr_i32(
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i32 0, [[X:%.*]]
 ; CHECK-NEXT:    [[OR:%.*]] = or i32 [[NEG]], [[X]]
 ; CHECK-NEXT:    [[SHR:%.*]] = lshr i32 [[OR]], 31
-; CHECK-NEXT:    store i32 [[OR]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[OR]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    ret i32 [[SHR]]
 ;
   %neg = sub i32 0, %x
   %or = or i32 %neg, %x
   %shr = lshr i32 %or, 31
-  store i32 %or, i32* %p
+  store i32 %or, ptr %p
   ret i32 %shr
 }
index e2c407ff3c8e3748a89ddbf33d84637751ee62a4..79396ca099831d62890ab4f9ab8ad07a9190ab95 100644 (file)
@@ -63,16 +63,16 @@ define <2 x i8> @sub_umin_commute_vec(<2 x i8> %a, <2 x i8> %b) {
   ret <2 x i8> %r
 }
 
-define i5 @sub_umin_uses(i5 %a, i5 %b, i5* %p) {
+define i5 @sub_umin_uses(i5 %a, i5 %b, ptr %p) {
 ; CHECK-LABEL: define {{[^@]+}}@sub_umin_uses
-; CHECK-SAME: (i5 [[A:%.*]], i5 [[B:%.*]], i5* [[P:%.*]]) {
+; CHECK-SAME: (i5 [[A:%.*]], i5 [[B:%.*]], ptr [[P:%.*]]) {
 ; CHECK-NEXT:    [[UMIN:%.*]] = call i5 @llvm.umin.i5(i5 [[A]], i5 [[B]])
-; CHECK-NEXT:    store i5 [[UMIN]], i5* [[P]], align 1
+; CHECK-NEXT:    store i5 [[UMIN]], ptr [[P]], align 1
 ; CHECK-NEXT:    [[R:%.*]] = sub i5 [[A]], [[UMIN]]
 ; CHECK-NEXT:    ret i5 [[R]]
 ;
   %umin = call i5 @llvm.umin.i5(i5 %a, i5 %b)
-  store i5 %umin, i5* %p
+  store i5 %umin, ptr %p
   %r = sub i5 %a, %umin
   ret i5 %r
 }
index cad15fd994c9da419ccb3efd97663d52b5030e28..80c043d72f1185298e4ab0ce5153cb1f9d0b5a65 100644 (file)
@@ -16,10 +16,10 @@ define i32 @sub_constant(i32 %x) {
 
 define i32 @sub_constant_expression(i32 %x) {
 ; CHECK-LABEL: @sub_constant_expression(
-; CHECK-NEXT:    [[R:%.*]] = sub i32 [[X:%.*]], ptrtoint (i32* @g to i32)
+; CHECK-NEXT:    [[R:%.*]] = sub i32 [[X:%.*]], ptrtoint (ptr @g to i32)
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
-  %r = sub i32 %x, ptrtoint (i32* @g to i32)
+  %r = sub i32 %x, ptrtoint (ptr @g to i32)
   ret i32 %r
 }
 
@@ -43,10 +43,10 @@ define <3 x i33> @sub_constant_vec_weird_type(<3 x i33> %x) {
 
 define <4 x i32> @sub_constant_expression_vec(<4 x i32> %x) {
 ; CHECK-LABEL: @sub_constant_expression_vec(
-; CHECK-NEXT:    [[R:%.*]] = sub <4 x i32> [[X:%.*]], bitcast (i128 ptrtoint (i32* @g to i128) to <4 x i32>)
+; CHECK-NEXT:    [[R:%.*]] = sub <4 x i32> [[X:%.*]], bitcast (i128 ptrtoint (ptr @g to i128) to <4 x i32>)
 ; CHECK-NEXT:    ret <4 x i32> [[R]]
 ;
-  %r = sub <4 x i32> %x, bitcast (i128 ptrtoint (i32* @g to i128) to <4 x i32>)
+  %r = sub <4 x i32> %x, bitcast (i128 ptrtoint (ptr @g to i128) to <4 x i32>)
   ret <4 x i32> %r
 }
 
@@ -436,31 +436,31 @@ define i64 @test_neg_shl_sub(i64 %a, i64 %b) {
   ret i64 %neg
 }
 
-define i64 @test_neg_shl_sub_extra_use1(i64 %a, i64 %b, i64* %p) {
+define i64 @test_neg_shl_sub_extra_use1(i64 %a, i64 %b, ptr %p) {
 ; CHECK-LABEL: @test_neg_shl_sub_extra_use1(
 ; CHECK-NEXT:    [[SUB:%.*]] = sub i64 [[A:%.*]], [[B:%.*]]
-; CHECK-NEXT:    store i64 [[SUB]], i64* [[P:%.*]], align 8
+; CHECK-NEXT:    store i64 [[SUB]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[MUL_NEG:%.*]] = mul i64 [[SUB]], -4
 ; CHECK-NEXT:    ret i64 [[MUL_NEG]]
 ;
   %sub = sub i64 %a, %b
-  store i64 %sub, i64* %p
+  store i64 %sub, ptr %p
   %mul = shl i64 %sub, 2
   %neg = sub i64 0, %mul
   ret i64 %neg
 }
 
-define i64 @test_neg_shl_sub_extra_use2(i64 %a, i64 %b, i64* %p) {
+define i64 @test_neg_shl_sub_extra_use2(i64 %a, i64 %b, ptr %p) {
 ; CHECK-LABEL: @test_neg_shl_sub_extra_use2(
 ; CHECK-NEXT:    [[SUB:%.*]] = sub i64 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[MUL:%.*]] = shl i64 [[SUB]], 2
-; CHECK-NEXT:    store i64 [[MUL]], i64* [[P:%.*]], align 8
+; CHECK-NEXT:    store i64 [[MUL]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i64 0, [[MUL]]
 ; CHECK-NEXT:    ret i64 [[NEG]]
 ;
   %sub = sub i64 %a, %b
   %mul = shl i64 %sub, 2
-  store i64 %mul, i64* %p
+  store i64 %mul, ptr %p
   %neg = sub i64 0, %mul
   ret i64 %neg
 }
@@ -501,29 +501,29 @@ define i64 @test_neg_shl_sext_i1(i1 %a, i64 %b) {
   ret i64 %neg
 }
 
-define i64 @test_neg_zext_i1_extra_use(i1 %a, i64 %b, i64* %p) {
+define i64 @test_neg_zext_i1_extra_use(i1 %a, i64 %b, ptr %p) {
 ; CHECK-LABEL: @test_neg_zext_i1_extra_use(
 ; CHECK-NEXT:    [[EXT_NEG:%.*]] = sext i1 [[A:%.*]] to i64
 ; CHECK-NEXT:    [[EXT:%.*]] = zext i1 [[A]] to i64
-; CHECK-NEXT:    store i64 [[EXT]], i64* [[P:%.*]], align 8
+; CHECK-NEXT:    store i64 [[EXT]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    ret i64 [[EXT_NEG]]
 ;
   %ext = zext i1 %a to i64
   %neg = sub i64 0, %ext
-  store i64 %ext, i64* %p
+  store i64 %ext, ptr %p
   ret i64 %neg
 }
 
-define i64 @test_neg_sext_i1_extra_use(i1 %a, i64 %b, i64* %p) {
+define i64 @test_neg_sext_i1_extra_use(i1 %a, i64 %b, ptr %p) {
 ; CHECK-LABEL: @test_neg_sext_i1_extra_use(
 ; CHECK-NEXT:    [[EXT_NEG:%.*]] = zext i1 [[A:%.*]] to i64
 ; CHECK-NEXT:    [[EXT:%.*]] = sext i1 [[A]] to i64
-; CHECK-NEXT:    store i64 [[EXT]], i64* [[P:%.*]], align 8
+; CHECK-NEXT:    store i64 [[EXT]], ptr [[P:%.*]], align 8
 ; CHECK-NEXT:    ret i64 [[EXT_NEG]]
 ;
   %ext = sext i1 %a to i64
   %neg = sub i64 0, %ext
-  store i64 %ext, i64* %p
+  store i64 %ext, ptr %p
   ret i64 %neg
 }
 
@@ -1105,78 +1105,78 @@ define i32 @test57(i32 %A, i32 %B) {
   ret i32 %Y
 }
 
-@dummy_global1 = external global i8*
-@dummy_global2 = external global i8*
+@dummy_global1 = external global ptr
+@dummy_global2 = external global ptr
 
-define i64 @test58([100 x [100 x i8]]* %foo, i64 %i, i64 %j) {
+define i64 @test58(ptr %foo, i64 %i, i64 %j) {
 ; CHECK-LABEL: @test58(
 ; CHECK-NEXT:    [[TMP1:%.*]] = sub i64 [[I:%.*]], [[J:%.*]]
 ; CHECK-NEXT:    ret i64 [[TMP1]]
 ;
-  %gep1 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 %i
-  %gep2 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 %j
-  %cast1 = ptrtoint i8* %gep1 to i64
-  %cast2 = ptrtoint i8* %gep2 to i64
+  %gep1 = getelementptr inbounds [100 x [100 x i8]], ptr %foo, i64 0, i64 42, i64 %i
+  %gep2 = getelementptr inbounds [100 x [100 x i8]], ptr %foo, i64 0, i64 42, i64 %j
+  %cast1 = ptrtoint ptr %gep1 to i64
+  %cast2 = ptrtoint ptr %gep2 to i64
   %sub = sub i64 %cast1, %cast2
   ret i64 %sub
 }
 
-define i64 @test59([100 x [100 x i8]]* %foo, i64 %i) {
+define i64 @test59(ptr %foo, i64 %i) {
 ; CHECK-LABEL: @test59(
-; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* [[FOO:%.*]], i64 0, i64 42, i64 [[I:%.*]]
-; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* [[FOO]], i64 0, i64 42, i64 0
-; CHECK-NEXT:    store i8* [[GEP1]], i8** @dummy_global1, align 8
-; CHECK-NEXT:    store i8* [[GEP2]], i8** @dummy_global2, align 8
+; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [100 x [100 x i8]], ptr [[FOO:%.*]], i64 0, i64 42, i64 [[I:%.*]]
+; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [100 x [100 x i8]], ptr [[FOO]], i64 0, i64 42, i64 0
+; CHECK-NEXT:    store ptr [[GEP1]], ptr @dummy_global1, align 8
+; CHECK-NEXT:    store ptr [[GEP2]], ptr @dummy_global2, align 8
 ; CHECK-NEXT:    ret i64 [[I]]
 ;
 ; gep1 and gep2 have more than one uses
-  %gep1 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 %i
-  %gep2 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 0
-  %cast1 = ptrtoint i8* %gep1 to i64
-  %cast2 = ptrtoint i8* %gep2 to i64
+  %gep1 = getelementptr inbounds [100 x [100 x i8]], ptr %foo, i64 0, i64 42, i64 %i
+  %gep2 = getelementptr inbounds [100 x [100 x i8]], ptr %foo, i64 0, i64 42, i64 0
+  %cast1 = ptrtoint ptr %gep1 to i64
+  %cast2 = ptrtoint ptr %gep2 to i64
   %sub = sub i64 %cast1, %cast2
-  store i8* %gep1, i8** @dummy_global1
-  store i8* %gep2, i8** @dummy_global2
+  store ptr %gep1, ptr @dummy_global1
+  store ptr %gep2, ptr @dummy_global2
   ret i64 %sub
 }
 
-define i64 @test60([100 x [100 x i8]]* %foo, i64 %i, i64 %j) {
+define i64 @test60(ptr %foo, i64 %i, i64 %j) {
 ; CHECK-LABEL: @test60(
-; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* [[FOO:%.*]], i64 0, i64 [[J:%.*]], i64 [[I:%.*]]
-; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* [[FOO]], i64 0, i64 42, i64 0
-; CHECK-NEXT:    [[CAST1:%.*]] = ptrtoint i8* [[GEP1]] to i64
-; CHECK-NEXT:    [[CAST2:%.*]] = ptrtoint i8* [[GEP2]] to i64
+; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [100 x [100 x i8]], ptr [[FOO:%.*]], i64 0, i64 [[J:%.*]], i64 [[I:%.*]]
+; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [100 x [100 x i8]], ptr [[FOO]], i64 0, i64 42, i64 0
+; CHECK-NEXT:    [[CAST1:%.*]] = ptrtoint ptr [[GEP1]] to i64
+; CHECK-NEXT:    [[CAST2:%.*]] = ptrtoint ptr [[GEP2]] to i64
 ; CHECK-NEXT:    [[SUB:%.*]] = sub i64 [[CAST1]], [[CAST2]]
-; CHECK-NEXT:    store i8* [[GEP1]], i8** @dummy_global1, align 8
+; CHECK-NEXT:    store ptr [[GEP1]], ptr @dummy_global1, align 8
 ; CHECK-NEXT:    ret i64 [[SUB]]
 ;
 ; gep1 has a non-constant index and more than one uses. Shouldn't duplicate the arithmetic.
-  %gep1 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 %j, i64 %i
-  %gep2 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 0
-  %cast1 = ptrtoint i8* %gep1 to i64
-  %cast2 = ptrtoint i8* %gep2 to i64
+  %gep1 = getelementptr inbounds [100 x [100 x i8]], ptr %foo, i64 0, i64 %j, i64 %i
+  %gep2 = getelementptr inbounds [100 x [100 x i8]], ptr %foo, i64 0, i64 42, i64 0
+  %cast1 = ptrtoint ptr %gep1 to i64
+  %cast2 = ptrtoint ptr %gep2 to i64
   %sub = sub i64 %cast1, %cast2
-  store i8* %gep1, i8** @dummy_global1
+  store ptr %gep1, ptr @dummy_global1
   ret i64 %sub
 }
 
-define i64 @test61([100 x [100 x i8]]* %foo, i64 %i, i64 %j) {
+define i64 @test61(ptr %foo, i64 %i, i64 %j) {
 ; CHECK-LABEL: @test61(
-; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* [[FOO:%.*]], i64 0, i64 42, i64 0
-; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* [[FOO]], i64 0, i64 [[J:%.*]], i64 [[I:%.*]]
-; CHECK-NEXT:    [[CAST1:%.*]] = ptrtoint i8* [[GEP1]] to i64
-; CHECK-NEXT:    [[CAST2:%.*]] = ptrtoint i8* [[GEP2]] to i64
+; CHECK-NEXT:    [[GEP1:%.*]] = getelementptr inbounds [100 x [100 x i8]], ptr [[FOO:%.*]], i64 0, i64 42, i64 0
+; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr inbounds [100 x [100 x i8]], ptr [[FOO]], i64 0, i64 [[J:%.*]], i64 [[I:%.*]]
+; CHECK-NEXT:    [[CAST1:%.*]] = ptrtoint ptr [[GEP1]] to i64
+; CHECK-NEXT:    [[CAST2:%.*]] = ptrtoint ptr [[GEP2]] to i64
 ; CHECK-NEXT:    [[SUB:%.*]] = sub i64 [[CAST1]], [[CAST2]]
-; CHECK-NEXT:    store i8* [[GEP2]], i8** @dummy_global2, align 8
+; CHECK-NEXT:    store ptr [[GEP2]], ptr @dummy_global2, align 8
 ; CHECK-NEXT:    ret i64 [[SUB]]
 ;
 ; gep2 has a non-constant index and more than one uses. Shouldn't duplicate the arithmetic.
-  %gep1 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 42, i64 0
-  %gep2 = getelementptr inbounds [100 x [100 x i8]], [100 x [100 x i8]]* %foo, i64 0, i64 %j, i64 %i
-  %cast1 = ptrtoint i8* %gep1 to i64
-  %cast2 = ptrtoint i8* %gep2 to i64
+  %gep1 = getelementptr inbounds [100 x [100 x i8]], ptr %foo, i64 0, i64 42, i64 0
+  %gep2 = getelementptr inbounds [100 x [100 x i8]], ptr %foo, i64 0, i64 %j, i64 %i
+  %cast1 = ptrtoint ptr %gep1 to i64
+  %cast2 = ptrtoint ptr %gep2 to i64
   %sub = sub i64 %cast1, %cast2
-  store i8* %gep2, i8** @dummy_global2
+  store ptr %gep2, ptr @dummy_global2
   ret i64 %sub
 }
 
@@ -1515,17 +1515,17 @@ define i8 @sub_not_mask_lowbits(i8 %x) {
   ret i8 %r
 }
 
-define <2 x i8> @sub_mask_lowbits_splat_extra_use(<2 x i8> %x, <2 x i8>* %p) {
+define <2 x i8> @sub_mask_lowbits_splat_extra_use(<2 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @sub_mask_lowbits_splat_extra_use(
 ; CHECK-NEXT:    [[A2:%.*]] = and <2 x i8> [[X:%.*]], <i8 10, i8 10>
-; CHECK-NEXT:    store <2 x i8> [[A2]], <2 x i8>* [[P:%.*]], align 2
+; CHECK-NEXT:    store <2 x i8> [[A2]], ptr [[P:%.*]], align 2
 ; CHECK-NEXT:    [[TMP1:%.*]] = and <2 x i8> [[X]], <i8 -11, i8 -11>
 ; CHECK-NEXT:    [[R:%.*]] = add <2 x i8> [[TMP1]], <i8 -64, i8 -64>
 ; CHECK-NEXT:    ret <2 x i8> [[R]]
 ;
   %a1 = add <2 x i8> %x, <i8 192, i8 192> ; 0xc0
   %a2 = and <2 x i8> %x, <i8 10, i8 10>   ; 0x0a
-  store <2 x i8> %a2, <2 x i8>* %p
+  store <2 x i8> %a2, ptr %p
   %r = sub <2 x i8> %a1, %a2
   ret <2 x i8> %r
 }
index 3e7e9f2e12874e7a7d476e35b142b79e008e5d4a..33162b5658ede5b1f9be1aaa9db42fd6e36dca00 100644 (file)
@@ -4,15 +4,15 @@
 ; The swifterror value can only be loaded, stored or used as swifterror
 ; argument. Make sure we do not try to turn the function bitcast into an
 ; argument bitcast.
-define swiftcc void @spam(i32** swifterror %arg) {
+define swiftcc void @spam(ptr swifterror %arg) {
 ; CHECK-LABEL: @spam(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    call swiftcc void bitcast (void (i64**)* @widget to void (i32**)*)(i32** swifterror [[ARG:%.*]])
+; CHECK-NEXT:    call swiftcc void @widget(ptr swifterror [[ARG:%.*]])
 ; CHECK-NEXT:    ret void
 ;
 bb:
-  call swiftcc void bitcast (void (i64**)* @widget to void (i32**)*)(i32** swifterror %arg)
+  call swiftcc void @widget(ptr swifterror %arg)
   ret void
 }
 
-declare swiftcc void @widget(i64**)
+declare swiftcc void @widget(ptr)
index a4f1869262cdb5bf146f02ae12423233c1debf90..9e7b5ea55003a0f5da44ecaa8f34055deb53580a 100644 (file)
@@ -6,19 +6,19 @@
 ; PR30486
 define i32 @single_case() {
 ; CHECK-LABEL: @single_case(
-; CHECK-NEXT:    switch i32 ptrtoint (i32* @g to i32), label %x [
+; CHECK-NEXT:    switch i32 ptrtoint (ptr @g to i32), label %x [
 ; CHECK-NEXT:    ]
 ; CHECK:       x:
 ; CHECK-NEXT:    ret i32 0
 ;
-  switch i32 add (i32 ptrtoint (i32* @g to i32), i32 -1), label %x []
+  switch i32 add (i32 ptrtoint (ptr @g to i32), i32 -1), label %x []
 x:
   ret i32 0
 }
 
 define i32 @multiple_cases() {
 ; CHECK-LABEL: @multiple_cases(
-; CHECK-NEXT:    switch i32 ptrtoint (i32* @g to i32), label %x [
+; CHECK-NEXT:    switch i32 ptrtoint (ptr @g to i32), label %x [
 ; CHECK-NEXT:    i32 2, label %one
 ; CHECK-NEXT:    i32 3, label %two
 ; CHECK-NEXT:    ]
@@ -29,7 +29,7 @@ define i32 @multiple_cases() {
 ; CHECK:       two:
 ; CHECK-NEXT:    ret i32 2
 ;
-  switch i32 add (i32 ptrtoint (i32* @g to i32), i32 -1), label %x [
+  switch i32 add (i32 ptrtoint (ptr @g to i32), i32 -1), label %x [
   i32 1, label %one
   i32 2, label %two
   ]
index d695ed8d0a2f262474704bc0eb65866e98c8b097..49f6e00e6d9ba9873701c5d4a16858811b3383cd 100644 (file)
@@ -9,7 +9,7 @@ define float @mytan(float %x) {
 ; CHECK-LABEL: define float @mytan(
 ; CHECK:   ret float %x
 
-define float @test2(float ()* %fptr) {
+define float @test2(ptr %fptr) {
   %call1 = call fast float %fptr()
   %tan = call fast float @tanf(float %call1)
   ret float %tan
index 922243e66ec2537d8876f1c2e7075b7e34d77b47..632c42bf602523def767cad81ef96c82fe808228 100644 (file)
@@ -1,15 +1,15 @@
 ; RUN: opt -S -passes=instcombine < %s 2>&1 | FileCheck %s
 
-define i64 @f(i64* %p1, i64* %p2) {
+define i64 @f(ptr %p1, ptr %p2) {
 top:
   ; check that the tbaa is preserved
   ; CHECK-LABEL: @f(
-  ; CHECK: %v1 = load i64, i64* %p1, align 8, !tbaa !0
-  ; CHECK: store i64 %v1, i64* %p2, align 8
+  ; CHECK: %v1 = load i64, ptr %p1, align 8, !tbaa !0
+  ; CHECK: store i64 %v1, ptr %p2, align 8
   ; CHECK: ret i64 %v1
-  %v1 = load i64, i64* %p1, align 8, !tbaa !0
-  store i64 %v1, i64* %p2, align 8
-  %v2 = load i64, i64* %p2, align 8
+  %v1 = load i64, ptr %p1, align 8, !tbaa !0
+  store i64 %v1, ptr %p2, align 8
+  %v2 = load i64, ptr %p2, align 8
   ret i64 %v2
 }
 
index 2d06ea0b492bc4604bd207d92c793e39c7c6ff7d..08b44ab3c0f5378027bc1f672e8a830905b1fc6c 100644 (file)
@@ -8,26 +8,24 @@
 ; with said constant. This matters because it could be e.g. a select between
 ; two constants, that happens after the first use of an alloca.
 
-%t0 = type { i8*, i64 }
+%t0 = type { ptr, i64 }
 
 @g0 = external constant %t0
 @g1 = external constant %t0
-define void @test(i8*%out) {
+define void @test(ptr %out) {
 ; CHECK-LABEL: @test(
 ; CHECK-NEXT:    [[I0:%.*]] = alloca [[T0:%.*]], align 8
-; CHECK-NEXT:    [[I1:%.*]] = bitcast %t0* [[I0]] to i8*
 ; CHECK-NEXT:    [[I2:%.*]] = call i1 @get_cond()
-; CHECK-NEXT:    [[I3:%.*]] = select i1 [[I2]], i8* bitcast (%t0* @g0 to i8*), i8* bitcast (%t0* @g1 to i8*)
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) [[I1]], i8* noundef nonnull align 8 dereferenceable(16) [[I3]], i64 16, i1 false)
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 1 dereferenceable(16) [[OUT:%.*]], i8* noundef nonnull align 8 dereferenceable(16) [[I1]], i64 16, i1 false)
+; CHECK-NEXT:    [[I3:%.*]] = select i1 [[I2]], ptr @g0, ptr @g1
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[I0]], ptr noundef nonnull align 8 dereferenceable(16) [[I3]], i64 16, i1 false)
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(16) [[OUT:%.*]], ptr noundef nonnull align 8 dereferenceable(16) [[I0]], i64 16, i1 false)
 ; CHECK-NEXT:    ret void
 ;
   %i0 = alloca %t0
-  %i1 = bitcast %t0* %i0 to i8*
   %i2 = call i1 @get_cond()
-  %i3 = select i1 %i2, i8* bitcast (%t0* @g0 to i8*), i8* bitcast (%t0* @g1 to i8*)
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %i1, i8* %i3, i64 16, i1 false)
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %out, i8* %i1, i64 16, i1 false)
+  %i3 = select i1 %i2, ptr @g0, ptr @g1
+  call void @llvm.memcpy.p0.p0.i64(ptr %i0, ptr %i3, i64 16, i1 false)
+  call void @llvm.memcpy.p0.p0.i64(ptr %out, ptr %i0, i64 16, i1 false)
   ret void
 }
 
@@ -35,25 +33,23 @@ define void @test2() {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:  bb:
 ; CHECK-NEXT:    [[I:%.*]] = alloca [[T0:%.*]], align 8
-; CHECK-NEXT:    [[I1:%.*]] = call i32 @func(%t0* undef)
+; CHECK-NEXT:    [[I1:%.*]] = call i32 @func(ptr undef)
 ; CHECK-NEXT:    [[I2:%.*]] = icmp eq i32 [[I1]], 2503
-; CHECK-NEXT:    [[I3:%.*]] = select i1 [[I2]], i8* bitcast (%t0* @g0 to i8*), i8* bitcast (%t0* @g1 to i8*)
-; CHECK-NEXT:    [[I4:%.*]] = bitcast %t0* [[I]] to i8*
-; CHECK-NEXT:    call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) [[I4]], i8* noundef nonnull align 8 dereferenceable(16) [[I3]], i64 16, i1 false)
-; CHECK-NEXT:    [[I5:%.*]] = call i32 @func(%t0* nonnull byval([[T0]]) [[I]])
+; CHECK-NEXT:    [[I3:%.*]] = select i1 [[I2]], ptr @g0, ptr @g1
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) [[I]], ptr noundef nonnull align 8 dereferenceable(16) [[I3]], i64 16, i1 false)
+; CHECK-NEXT:    [[I5:%.*]] = call i32 @func(ptr nonnull byval([[T0]]) [[I]])
 ; CHECK-NEXT:    unreachable
 ;
 bb:
   %i = alloca %t0, align 8
-  %i1 = call i32 @func(%t0* undef)
+  %i1 = call i32 @func(ptr undef)
   %i2 = icmp eq i32 %i1, 2503
-  %i3 = select i1 %i2, i8* bitcast (%t0* @g0 to i8*), i8* bitcast (%t0* @g1 to i8*)
-  %i4 = bitcast %t0* %i to i8*
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* noundef nonnull align 8 dereferenceable(16) %i4, i8* noundef nonnull align 8 dereferenceable(16) %i3, i64 16, i1 false)
-  %i5 = call i32 @func(%t0* nonnull byval(%t0) %i)
+  %i3 = select i1 %i2, ptr @g0, ptr @g1
+  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %i, ptr noundef nonnull align 8 dereferenceable(16) %i3, i64 16, i1 false)
+  %i5 = call i32 @func(ptr nonnull byval(%t0) %i)
   unreachable
 }
 
-declare i32 @func(%t0*)
+declare i32 @func(ptr)
 declare i1 @get_cond()
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8*, i8*, i64, i1)
+declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)
index dda712e3850a9347a404fb0093bbbda178010722..3d99bf167be1e72e54505bb51570945f74b3de74 100644 (file)
@@ -4,7 +4,7 @@ target triple = "x86_64-pc-windows-msvc18.0.0"
 
 declare i32 @__CxxFrameHandler3(...)
 
-define void @test1() personality i32 (...)* @__CxxFrameHandler3 {
+define void @test1() personality ptr @__CxxFrameHandler3 {
 bb:
   unreachable
 
@@ -18,7 +18,7 @@ unreachable:
 ; CHECK:   %cl = cleanuppad within none []
 ; CHECK:   cleanupret from %cl unwind to caller
 
-define void @test2(i8 %A, i8 %B) personality i32 (...)* @__CxxFrameHandler3 {
+define void @test2(i8 %A, i8 %B) personality ptr @__CxxFrameHandler3 {
 bb:
   %X = zext i8 %A to i32
   invoke void @g(i32 0)
@@ -49,7 +49,7 @@ unreachable:
 ; CHECK:  %Y = zext i8 %B to i32
 ; CHECK:  %phi = phi i32 [ %X, %bb ], [ %Y, %cont ]
 
-define void @test3(i8 %A, i8 %B) personality i32 (...)* @__CxxFrameHandler3 {
+define void @test3(i8 %A, i8 %B) personality ptr @__CxxFrameHandler3 {
 bb:
   %X = zext i8 %A to i32
   invoke void @g(i32 0)
@@ -86,20 +86,20 @@ unreachable:
 ; CHECK:  %phi = phi i32 [ %X, %bb ], [ %Y, %cont ], [ %Y, %cont2 ]
 
 declare void @foo()
-declare token @llvm.experimental.gc.statepoint.p0f_isVoidf(i64, i32, void ()*, i32, i32, ...)
+declare token @llvm.experimental.gc.statepoint.p0(i64, i32, ptr, i32, i32, ...)
 
-define void @test4(i8 addrspace(1)* %obj) gc "statepoint-example" {
+define void @test4(ptr addrspace(1) %obj) gc "statepoint-example" {
 bb:
   unreachable
 
 unreachable:
-  call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @foo, i32 0, i32 0, i32 0, i32 0) ["deopt" (i32 0, i32 -1, i32 0, i32 0, i32 0)]
+  call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @foo, i32 0, i32 0, i32 0, i32 0) ["deopt" (i32 0, i32 -1, i32 0, i32 0, i32 0)]
   ret void
 }
 
 ; CHECK-LABEL: define void @test4(
 ; CHECK: unreachable:
-; CHECK:   call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* elementtype(void ()) @foo, i32 0, i32 0, i32 0, i32 0) [ "deopt"(i32 0, i32 -1, i32 0, i32 0, i32 0) ]
+; CHECK:   call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void ()) @foo, i32 0, i32 0, i32 0, i32 0) [ "deopt"(i32 0, i32 -1, i32 0, i32 0, i32 0) ]
 ; CHECK:   ret void
 
 
index 2c57ea07923abffe7c25a283457cda1b70399d0d..731961e0ab2d3f1b8c4984eb7b35fc1e418f79b6 100644 (file)
@@ -1,13 +1,13 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture)
-declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture)
+declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)
+declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)
 
 declare void @unknown()
-declare void @f(i8*)
-declare void @f2(i8*, i8*)
-declare i8* @f3(i8*, i8*)
+declare void @f(ptr)
+declare void @f2(ptr, ptr)
+declare ptr @f3(ptr, ptr)
 
 ; Basic case for DSEing a trivially dead writing call
 define void @test_dead() {
@@ -15,8 +15,7 @@ define void @test_dead() {
 ; CHECK-NEXT:    ret void
 ;
   %a = alloca i32, align 4
-  %bitcast = bitcast i32* %a to i8*
-  call void @f(i8* writeonly nocapture %bitcast) argmemonly nounwind willreturn
+  call void @f(ptr writeonly nocapture %a) argmemonly nounwind willreturn
   ret void
 }
 
@@ -26,10 +25,9 @@ define void @test_lifetime() {
 ; CHECK-NEXT:    ret void
 ;
   %a = alloca i32, align 4
-  %bitcast = bitcast i32* %a to i8*
-  call void @llvm.lifetime.start.p0i8(i64 4, i8* %bitcast)
-  call void @f(i8* writeonly nocapture %bitcast) argmemonly nounwind willreturn
-  call void @llvm.lifetime.end.p0i8(i64 4, i8* %bitcast)
+  call void @llvm.lifetime.start.p0(i64 4, ptr %a)
+  call void @f(ptr writeonly nocapture %a) argmemonly nounwind willreturn
+  call void @llvm.lifetime.end.p0(i64 4, ptr %a)
   ret void
 }
 
@@ -42,12 +40,11 @@ define void @test_lifetime2() {
 ; CHECK-NEXT:    ret void
 ;
   %a = alloca i32, align 4
-  %bitcast = bitcast i32* %a to i8*
-  call void @llvm.lifetime.start.p0i8(i64 4, i8* %bitcast)
+  call void @llvm.lifetime.start.p0(i64 4, ptr %a)
   call void @unknown()
-  call void @f(i8* writeonly nocapture %bitcast) argmemonly nounwind willreturn
+  call void @f(ptr writeonly nocapture %a) argmemonly nounwind willreturn
   call void @unknown()
-  call void @llvm.lifetime.end.p0i8(i64 4, i8* %bitcast)
+  call void @llvm.lifetime.end.p0(i64 4, ptr %a)
   ret void
 }
 
@@ -58,23 +55,20 @@ define void @test_dead_readwrite() {
 ; CHECK-NEXT:    ret void
 ;
   %a = alloca i32, align 4
-  %bitcast = bitcast i32* %a to i8*
-  call void @f(i8* nocapture %bitcast) argmemonly nounwind willreturn
+  call void @f(ptr nocapture %a) argmemonly nounwind willreturn
   ret void
 }
 
 define i32 @test_neg_read_after() {
 ; CHECK-LABEL: @test_neg_read_after(
 ; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    [[BITCAST:%.*]] = bitcast i32* [[A]] to i8*
-; CHECK-NEXT:    call void @f(i8* nocapture nonnull writeonly [[BITCAST]]) #[[ATTR3:[0-9]+]]
-; CHECK-NEXT:    [[RES:%.*]] = load i32, i32* [[A]], align 4
+; CHECK-NEXT:    call void @f(ptr nocapture nonnull writeonly [[A]]) #[[ATTR3:[0-9]+]]
+; CHECK-NEXT:    [[RES:%.*]] = load i32, ptr [[A]], align 4
 ; CHECK-NEXT:    ret i32 [[RES]]
 ;
   %a = alloca i32, align 4
-  %bitcast = bitcast i32* %a to i8*
-  call void @f(i8* writeonly nocapture %bitcast) argmemonly nounwind willreturn
-  %res = load i32, i32* %a
+  call void @f(ptr writeonly nocapture %a) argmemonly nounwind willreturn
+  %res = load i32, ptr %a
   ret i32 %res
 }
 
@@ -82,39 +76,33 @@ define i32 @test_neg_read_after() {
 define void @test_neg_infinite_loop() {
 ; CHECK-LABEL: @test_neg_infinite_loop(
 ; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    [[BITCAST:%.*]] = bitcast i32* [[A]] to i8*
-; CHECK-NEXT:    call void @f(i8* nocapture nonnull writeonly [[BITCAST]]) #[[ATTR4:[0-9]+]]
+; CHECK-NEXT:    call void @f(ptr nocapture nonnull writeonly [[A]]) #[[ATTR4:[0-9]+]]
 ; CHECK-NEXT:    ret void
 ;
   %a = alloca i32, align 4
-  %bitcast = bitcast i32* %a to i8*
-  call void @f(i8* writeonly nocapture %bitcast) argmemonly nounwind
+  call void @f(ptr writeonly nocapture %a) argmemonly nounwind
   ret void
 }
 
 define void @test_neg_throw() {
 ; CHECK-LABEL: @test_neg_throw(
 ; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    [[BITCAST:%.*]] = bitcast i32* [[A]] to i8*
-; CHECK-NEXT:    call void @f(i8* nocapture nonnull writeonly [[BITCAST]]) #[[ATTR5:[0-9]+]]
+; CHECK-NEXT:    call void @f(ptr nocapture nonnull writeonly [[A]]) #[[ATTR5:[0-9]+]]
 ; CHECK-NEXT:    ret void
 ;
   %a = alloca i32, align 4
-  %bitcast = bitcast i32* %a to i8*
-  call void @f(i8* writeonly nocapture %bitcast) argmemonly willreturn
+  call void @f(ptr writeonly nocapture %a) argmemonly willreturn
   ret void
 }
 
 define void @test_neg_extra_write() {
 ; CHECK-LABEL: @test_neg_extra_write(
 ; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    [[BITCAST:%.*]] = bitcast i32* [[A]] to i8*
-; CHECK-NEXT:    call void @f(i8* nocapture nonnull writeonly [[BITCAST]]) #[[ATTR6:[0-9]+]]
+; CHECK-NEXT:    call void @f(ptr nocapture nonnull writeonly [[A]]) #[[ATTR6:[0-9]+]]
 ; CHECK-NEXT:    ret void
 ;
   %a = alloca i32, align 4
-  %bitcast = bitcast i32* %a to i8*
-  call void @f(i8* writeonly nocapture %bitcast) nounwind willreturn
+  call void @f(ptr writeonly nocapture %a) nounwind willreturn
   ret void
 }
 
@@ -124,59 +112,45 @@ define void @test_neg_unmodeled_write() {
 ; CHECK-LABEL: @test_neg_unmodeled_write(
 ; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 4
 ; CHECK-NEXT:    [[A2:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    [[BITCAST:%.*]] = bitcast i32* [[A]] to i8*
-; CHECK-NEXT:    [[BITCAST2:%.*]] = bitcast i32* [[A2]] to i8*
-; CHECK-NEXT:    call void @f2(i8* nocapture nonnull writeonly [[BITCAST]], i8* nonnull [[BITCAST2]]) #[[ATTR3]]
+; CHECK-NEXT:    call void @f2(ptr nocapture nonnull writeonly [[A]], ptr nonnull [[A2]]) #[[ATTR3]]
 ; CHECK-NEXT:    ret void
 ;
   %a = alloca i32, align 4
   %a2 = alloca i32, align 4
-  %bitcast = bitcast i32* %a to i8*
-  %bitcast2 = bitcast i32* %a2 to i8*
-  call void @f2(i8* nocapture writeonly %bitcast, i8* %bitcast2) argmemonly nounwind willreturn
+  call void @f2(ptr nocapture writeonly %a, ptr %a2) argmemonly nounwind willreturn
   ret void
 }
 
 define i32 @test_neg_captured_by_call() {
 ; CHECK-LABEL: @test_neg_captured_by_call(
 ; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    [[A2:%.*]] = alloca i8*, align 8
-; CHECK-NEXT:    [[BITCAST:%.*]] = bitcast i32* [[A]] to i8*
-; CHECK-NEXT:    [[BITCAST2:%.*]] = bitcast i8** [[A2]] to i8*
-; CHECK-NEXT:    call void @f2(i8* nonnull writeonly [[BITCAST]], i8* nonnull [[BITCAST2]]) #[[ATTR3]]
-; CHECK-NEXT:    [[TMP1:%.*]] = bitcast i8** [[A2]] to i32**
-; CHECK-NEXT:    [[A_COPY_CAST1:%.*]] = load i32*, i32** [[TMP1]], align 8
-; CHECK-NEXT:    [[RES:%.*]] = load i32, i32* [[A_COPY_CAST1]], align 4
+; CHECK-NEXT:    [[A2:%.*]] = alloca ptr, align 8
+; CHECK-NEXT:    call void @f2(ptr nonnull writeonly [[A]], ptr nonnull [[A2]]) #[[ATTR3]]
+; CHECK-NEXT:    [[A_COPY_CAST1:%.*]] = load ptr, ptr [[A2]], align 8
+; CHECK-NEXT:    [[RES:%.*]] = load i32, ptr [[A_COPY_CAST1]], align 4
 ; CHECK-NEXT:    ret i32 [[RES]]
 ;
   %a = alloca i32, align 4
-  %a2 = alloca i8*, align 4
-  %bitcast = bitcast i32* %a to i8*
-  %bitcast2 = bitcast i8** %a2 to i8*
-  call void @f2(i8* writeonly %bitcast, i8* %bitcast2) argmemonly nounwind willreturn
-  %a_copy_cast = load i8*, i8** %a2
-  %a_copy = bitcast i8* %a_copy_cast to i32*
-  %res = load i32, i32* %a_copy
+  %a2 = alloca ptr, align 4
+  call void @f2(ptr writeonly %a, ptr %a2) argmemonly nounwind willreturn
+  %a_copy_cast = load ptr, ptr %a2
+  %res = load i32, ptr %a_copy_cast
   ret i32 %res
 }
 
 define i32 @test_neg_captured_before() {
 ; CHECK-LABEL: @test_neg_captured_before(
 ; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    [[BITCAST:%.*]] = bitcast i32* [[A]] to i8*
-; CHECK-NEXT:    call void @f(i8* nocapture nonnull writeonly [[BITCAST]]) #[[ATTR3]]
-; CHECK-NEXT:    [[RES:%.*]] = load i32, i32* [[A]], align 4
+; CHECK-NEXT:    call void @f(ptr nocapture nonnull writeonly [[A]]) #[[ATTR3]]
+; CHECK-NEXT:    [[RES:%.*]] = load i32, ptr [[A]], align 4
 ; CHECK-NEXT:    ret i32 [[RES]]
 ;
   %a = alloca i32, align 4
-  %a2 = alloca i8*, align 4
-  %bitcast = bitcast i32* %a to i8*
-  %bitcast2 = bitcast i8** %a2 to i8*
-  store i8* %bitcast, i8** %a2
-  call void @f(i8* writeonly nocapture %bitcast) argmemonly nounwind willreturn
-  %a_copy_cast = load i8*, i8** %a2
-  %a_copy = bitcast i8* %a_copy_cast to i32*
-  %res = load i32, i32* %a_copy
+  %a2 = alloca ptr, align 4
+  store ptr %a, ptr %a2
+  call void @f(ptr writeonly nocapture %a) argmemonly nounwind willreturn
+  %a_copy_cast = load ptr, ptr %a2
+  %res = load i32, ptr %a_copy_cast
   ret i32 %res
 }
 
@@ -187,9 +161,7 @@ define void @test_unreleated_read() {
 ;
   %a = alloca i32, align 4
   %a2 = alloca i32, align 4
-  %bitcast = bitcast i32* %a to i8*
-  %bitcast2 = bitcast i32* %a2 to i8*
-  call void @f2(i8* nocapture writeonly %bitcast, i8* nocapture readonly %bitcast2) argmemonly nounwind willreturn
+  call void @f2(ptr nocapture writeonly %a, ptr nocapture readonly %a2) argmemonly nounwind willreturn
   ret void
 }
 
@@ -201,29 +173,23 @@ define void @test_unrelated_capture() {
 ;
   %a = alloca i32, align 4
   %a2 = alloca i32, align 4
-  %bitcast = bitcast i32* %a to i8*
-  %bitcast2 = bitcast i32* %a2 to i8*
-  call i8* @f3(i8* nocapture writeonly %bitcast, i8* readonly %bitcast2) argmemonly nounwind willreturn
+  call ptr @f3(ptr nocapture writeonly %a, ptr readonly %a2) argmemonly nounwind willreturn
   ret void
 }
 
-; Cannot remove call, as %bitcast2 is captured via the return value.
+; Cannot remove call, as %a2 is captured via the return value.
 define i8 @test_neg_unrelated_capture_used_via_return() {
 ; CHECK-LABEL: @test_neg_unrelated_capture_used_via_return(
 ; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 4
 ; CHECK-NEXT:    [[A2:%.*]] = alloca i32, align 4
-; CHECK-NEXT:    [[BITCAST:%.*]] = bitcast i32* [[A]] to i8*
-; CHECK-NEXT:    [[BITCAST2:%.*]] = bitcast i32* [[A2]] to i8*
-; CHECK-NEXT:    [[CAPTURE:%.*]] = call i8* @f3(i8* nocapture nonnull writeonly [[BITCAST]], i8* nonnull readonly [[BITCAST2]]) #[[ATTR3]]
-; CHECK-NEXT:    [[V:%.*]] = load i8, i8* [[CAPTURE]], align 1
+; CHECK-NEXT:    [[CAPTURE:%.*]] = call ptr @f3(ptr nocapture nonnull writeonly [[A]], ptr nonnull readonly [[A2]]) #[[ATTR3]]
+; CHECK-NEXT:    [[V:%.*]] = load i8, ptr [[CAPTURE]], align 1
 ; CHECK-NEXT:    ret i8 [[V]]
 ;
   %a = alloca i32, align 4
   %a2 = alloca i32, align 4
-  %bitcast = bitcast i32* %a to i8*
-  %bitcast2 = bitcast i32* %a2 to i8*
-  %capture = call i8* @f3(i8* nocapture writeonly %bitcast, i8* readonly %bitcast2) argmemonly nounwind willreturn
-  %v = load i8, i8* %capture
+  %capture = call ptr @f3(ptr nocapture writeonly %a, ptr readonly %a2) argmemonly nounwind willreturn
+  %v = load i8, ptr %capture
   ret i8 %v
 }
 
@@ -234,8 +200,7 @@ define void @test_self_read() {
 ; CHECK-NEXT:    ret void
 ;
   %a = alloca i32, align 4
-  %bitcast = bitcast i32* %a to i8*
-  call void @f2(i8* nocapture writeonly %bitcast, i8* nocapture readonly %bitcast) argmemonly nounwind willreturn
+  call void @f2(ptr nocapture writeonly %a, ptr nocapture readonly %a) argmemonly nounwind willreturn
   ret void
 }
 
index 647f63c55b31467a1b7f5788c998e549caabbef4..121e58664e9f69fa2186adc137da31505dff8f1d 100644 (file)
@@ -727,18 +727,18 @@ define <2 x i32> @trunc_shl_nosplat_v2i32_v2i64(<2 x i64> %val) {
   ret <2 x i32> %trunc
 }
 
-define void @trunc_shl_31_i32_i64_multi_use(i64 %val, i32 addrspace(1)* %ptr0, i64 addrspace(1)* %ptr1) {
+define void @trunc_shl_31_i32_i64_multi_use(i64 %val, ptr addrspace(1) %ptr0, ptr addrspace(1) %ptr1) {
 ; CHECK-LABEL: @trunc_shl_31_i32_i64_multi_use(
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i64 [[VAL:%.*]], 31
 ; CHECK-NEXT:    [[TRUNC:%.*]] = trunc i64 [[SHL]] to i32
-; CHECK-NEXT:    store volatile i32 [[TRUNC]], i32 addrspace(1)* [[PTR0:%.*]], align 4
-; CHECK-NEXT:    store volatile i64 [[SHL]], i64 addrspace(1)* [[PTR1:%.*]], align 8
+; CHECK-NEXT:    store volatile i32 [[TRUNC]], ptr addrspace(1) [[PTR0:%.*]], align 4
+; CHECK-NEXT:    store volatile i64 [[SHL]], ptr addrspace(1) [[PTR1:%.*]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %shl = shl i64 %val, 31
   %trunc = trunc i64 %shl to i32
-  store volatile i32 %trunc, i32 addrspace(1)* %ptr0
-  store volatile i64 %shl, i64 addrspace(1)* %ptr1
+  store volatile i32 %trunc, ptr addrspace(1) %ptr0
+  store volatile i64 %shl, ptr addrspace(1) %ptr1
   ret void
 }
 
index 954c63bace5a4f447f726c7abf12bc84d7b3312e..cb89dfcecb3cbc9fe96e499e8c85b90c38d872f7 100644 (file)
@@ -4,50 +4,50 @@
 
 ; Don't narrow if it would lose information about the dereferenceable range of the pointer.
 
-define i32 @truncload_no_deref(i64* %ptr) {
+define i32 @truncload_no_deref(ptr %ptr) {
 ; CHECK-LABEL: @truncload_no_deref(
-; CHECK-NEXT:    [[X:%.*]] = load i64, i64* [[PTR:%.*]], align 4
+; CHECK-NEXT:    [[X:%.*]] = load i64, ptr [[PTR:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = trunc i64 [[X]] to i32
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
-  %x = load i64, i64* %ptr
+  %x = load i64, ptr %ptr
   %r = trunc i64 %x to i32
   ret i32 %r
 }
 
-define i32 @truncload_small_deref(i64* dereferenceable(7) %ptr) {
+define i32 @truncload_small_deref(ptr dereferenceable(7) %ptr) {
 ; CHECK-LABEL: @truncload_small_deref(
-; CHECK-NEXT:    [[X:%.*]] = load i64, i64* [[PTR:%.*]], align 4
+; CHECK-NEXT:    [[X:%.*]] = load i64, ptr [[PTR:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = trunc i64 [[X]] to i32
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
-  %x = load i64, i64* %ptr
+  %x = load i64, ptr %ptr
   %r = trunc i64 %x to i32
   ret i32 %r
 }
 
 ; On little-endian, we can narrow the load without an offset.
 
-define i32 @truncload_deref(i64* dereferenceable(8) %ptr) {
+define i32 @truncload_deref(ptr dereferenceable(8) %ptr) {
 ; CHECK-LABEL: @truncload_deref(
-; CHECK-NEXT:    [[X:%.*]] = load i64, i64* [[PTR:%.*]], align 4
+; CHECK-NEXT:    [[X:%.*]] = load i64, ptr [[PTR:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = trunc i64 [[X]] to i32
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
-  %x = load i64, i64* %ptr
+  %x = load i64, ptr %ptr
   %r = trunc i64 %x to i32
   ret i32 %r
 }
 
 ; Preserve alignment.
 
-define i16 @truncload_align(i32* dereferenceable(14) %ptr) {
+define i16 @truncload_align(ptr dereferenceable(14) %ptr) {
 ; CHECK-LABEL: @truncload_align(
-; CHECK-NEXT:    [[X:%.*]] = load i32, i32* [[PTR:%.*]], align 16
+; CHECK-NEXT:    [[X:%.*]] = load i32, ptr [[PTR:%.*]], align 16
 ; CHECK-NEXT:    [[R:%.*]] = trunc i32 [[X]] to i16
 ; CHECK-NEXT:    ret i16 [[R]]
 ;
-  %x = load i32, i32* %ptr, align 16
+  %x = load i32, ptr %ptr, align 16
   %r = trunc i32 %x to i16
   ret i16 %r
 }
@@ -56,14 +56,14 @@ define i16 @truncload_align(i32* dereferenceable(14) %ptr) {
 
 declare void @use(i64)
 
-define i32 @truncload_extra_use(i64* dereferenceable(100) %ptr) {
+define i32 @truncload_extra_use(ptr dereferenceable(100) %ptr) {
 ; CHECK-LABEL: @truncload_extra_use(
-; CHECK-NEXT:    [[X:%.*]] = load i64, i64* [[PTR:%.*]], align 2
+; CHECK-NEXT:    [[X:%.*]] = load i64, ptr [[PTR:%.*]], align 2
 ; CHECK-NEXT:    call void @use(i64 [[X]])
 ; CHECK-NEXT:    [[R:%.*]] = trunc i64 [[X]] to i32
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
-  %x = load i64, i64* %ptr, align 2
+  %x = load i64, ptr %ptr, align 2
   call void @use(i64 %x)
   %r = trunc i64 %x to i32
   ret i32 %r
@@ -71,39 +71,39 @@ define i32 @truncload_extra_use(i64* dereferenceable(100) %ptr) {
 
 ; Negative test - don't create a load if the type is not allowed by the data-layout.
 
-define i8 @truncload_type(i64* dereferenceable(9) %ptr) {
+define i8 @truncload_type(ptr dereferenceable(9) %ptr) {
 ; CHECK-LABEL: @truncload_type(
-; CHECK-NEXT:    [[X:%.*]] = load i64, i64* [[PTR:%.*]], align 2
+; CHECK-NEXT:    [[X:%.*]] = load i64, ptr [[PTR:%.*]], align 2
 ; CHECK-NEXT:    [[R:%.*]] = trunc i64 [[X]] to i8
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
-  %x = load i64, i64* %ptr, align 2
+  %x = load i64, ptr %ptr, align 2
   %r = trunc i64 %x to i8
   ret i8 %r
 }
 
 ; Negative test - don't transform volatiles.
 
-define i32 @truncload_volatile(i64* dereferenceable(8) %ptr) {
+define i32 @truncload_volatile(ptr dereferenceable(8) %ptr) {
 ; CHECK-LABEL: @truncload_volatile(
-; CHECK-NEXT:    [[X:%.*]] = load volatile i64, i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    [[X:%.*]] = load volatile i64, ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    [[R:%.*]] = trunc i64 [[X]] to i32
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
-  %x = load volatile i64, i64* %ptr, align 8
+  %x = load volatile i64, ptr %ptr, align 8
   %r = trunc i64 %x to i32
   ret i32 %r
 }
 
 ; Preserve address space.
 
-define i32 @truncload_address_space(i64 addrspace(1)* dereferenceable(8) %ptr) {
+define i32 @truncload_address_space(ptr addrspace(1) dereferenceable(8) %ptr) {
 ; CHECK-LABEL: @truncload_address_space(
-; CHECK-NEXT:    [[X:%.*]] = load i64, i64 addrspace(1)* [[PTR:%.*]], align 4
+; CHECK-NEXT:    [[X:%.*]] = load i64, ptr addrspace(1) [[PTR:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = trunc i64 [[X]] to i32
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
-  %x = load i64, i64 addrspace(1)* %ptr, align 4
+  %x = load i64, ptr addrspace(1) %ptr, align 4
   %r = trunc i64 %x to i32
   ret i32 %r
 }
index 313265adc4b7c64d66da401c429ad0373558e0ee..a45bbe46480019adce7d8706ab598e54c04a5f51 100644 (file)
@@ -727,18 +727,18 @@ define <2 x i32> @trunc_shl_nosplat_v2i32_v2i64(<2 x i64> %val) {
   ret <2 x i32> %trunc
 }
 
-define void @trunc_shl_31_i32_i64_multi_use(i64 %val, i32 addrspace(1)* %ptr0, i64 addrspace(1)* %ptr1) {
+define void @trunc_shl_31_i32_i64_multi_use(i64 %val, ptr addrspace(1) %ptr0, ptr addrspace(1) %ptr1) {
 ; CHECK-LABEL: @trunc_shl_31_i32_i64_multi_use(
 ; CHECK-NEXT:    [[SHL:%.*]] = shl i64 [[VAL:%.*]], 31
 ; CHECK-NEXT:    [[TRUNC:%.*]] = trunc i64 [[SHL]] to i32
-; CHECK-NEXT:    store volatile i32 [[TRUNC]], i32 addrspace(1)* [[PTR0:%.*]], align 4
-; CHECK-NEXT:    store volatile i64 [[SHL]], i64 addrspace(1)* [[PTR1:%.*]], align 8
+; CHECK-NEXT:    store volatile i32 [[TRUNC]], ptr addrspace(1) [[PTR0:%.*]], align 4
+; CHECK-NEXT:    store volatile i64 [[SHL]], ptr addrspace(1) [[PTR1:%.*]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %shl = shl i64 %val, 31
   %trunc = trunc i64 %shl to i32
-  store volatile i32 %trunc, i32 addrspace(1)* %ptr0
-  store volatile i64 %shl, i64 addrspace(1)* %ptr1
+  store volatile i32 %trunc, ptr addrspace(1) %ptr0
+  store volatile i64 %shl, ptr addrspace(1) %ptr1
   ret void
 }
 
index 49b6f3be0a994faab92092faceed7288ee18e5d7..43fdeb4749982094e8222e4e9be882e1e228f8f7 100644 (file)
@@ -53,17 +53,17 @@ define i32 @type_pun_misaligned(<16 x i8> %in) {
 }
 
 ; Type punning to an array of pointers.
-define i32* @type_pun_pointer(<16 x i8> %in) {
+define ptr @type_pun_pointer(<16 x i8> %in) {
 ; CHECK-LABEL: @type_pun_pointer(
 ; CHECK-NEXT:    [[SROA_BC:%.*]] = bitcast <16 x i8> [[IN:%.*]] to <4 x i32>
 ; CHECK-NEXT:    [[SROA_EXTRACT:%.*]] = extractelement <4 x i32> [[SROA_BC]], i64 0
-; CHECK-NEXT:    [[TMP1:%.*]] = inttoptr i32 [[SROA_EXTRACT]] to i32*
-; CHECK-NEXT:    ret i32* [[TMP1]]
+; CHECK-NEXT:    [[TMP1:%.*]] = inttoptr i32 [[SROA_EXTRACT]] to ptr
+; CHECK-NEXT:    ret ptr [[TMP1]]
 ;
   %sroa = shufflevector <16 x i8> %in, <16 x i8> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
   %1 = bitcast <4 x i8> %sroa to i32
-  %2 = inttoptr i32 %1 to i32*
-  ret i32* %2
+  %2 = inttoptr i32 %1 to ptr
+  ret ptr %2
 }
 
 ; Type punning to an array of 32-bit floating-point values.
index 5ca18842af62e20162ef46883e6a568d9b49f67d..15315f4677cef11655cc99dfc9cd2604b8d233c0 100644 (file)
@@ -53,17 +53,17 @@ define i32 @type_pun_misaligned(<16 x i8> %in) {
 }
 
 ; Type punning to an array of pointers.
-define i32* @type_pun_pointer(<16 x i8> %in) {
+define ptr @type_pun_pointer(<16 x i8> %in) {
 ; CHECK-LABEL: @type_pun_pointer(
 ; CHECK-NEXT:    [[SROA_BC:%.*]] = bitcast <16 x i8> [[IN:%.*]] to <4 x i32>
 ; CHECK-NEXT:    [[SROA_EXTRACT:%.*]] = extractelement <4 x i32> [[SROA_BC]], i64 0
-; CHECK-NEXT:    [[TMP1:%.*]] = inttoptr i32 [[SROA_EXTRACT]] to i32*
-; CHECK-NEXT:    ret i32* [[TMP1]]
+; CHECK-NEXT:    [[TMP1:%.*]] = inttoptr i32 [[SROA_EXTRACT]] to ptr
+; CHECK-NEXT:    ret ptr [[TMP1]]
 ;
   %sroa = shufflevector <16 x i8> %in, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
   %1 = bitcast <4 x i8> %sroa to i32
-  %2 = inttoptr i32 %1 to i32*
-  ret i32* %2
+  %2 = inttoptr i32 %1 to ptr
+  ret ptr %2
 }
 
 ; Type punning to an array of 32-bit floating-point values.
index a564aca9b5d78945a4a93de19894c97795a4781d..01a6cc7bb9c2d4ada87de71817cbfb05ebf55fab 100644 (file)
@@ -154,28 +154,28 @@ define i32 @uaddo_wrong_pred2(i32 %x, i32 %y, i32 %z) {
 ; icmp canonicalization should be consistent for these cases.
 ; Either the compare depends on the sum or not.
 
-define i1 @uaddo_1(i8 %x, i8* %p) {
+define i1 @uaddo_1(i8 %x, ptr %p) {
 ; CHECK-LABEL: @uaddo_1(
 ; CHECK-NEXT:    [[A:%.*]] = add i8 [[X:%.*]], 1
-; CHECK-NEXT:    store i8 [[A]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[A]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[C:%.*]] = icmp eq i8 [[A]], 0
 ; CHECK-NEXT:    ret i1 [[C]]
 ;
   %a = add i8 %x, 1
-  store i8 %a, i8* %p
+  store i8 %a, ptr %p
   %c = icmp ult i8 %a, 1
   ret i1 %c
 }
 
-define i1 @uaddo_neg1(i8 %x, i8* %p) {
+define i1 @uaddo_neg1(i8 %x, ptr %p) {
 ; CHECK-LABEL: @uaddo_neg1(
 ; CHECK-NEXT:    [[A:%.*]] = add i8 [[X:%.*]], -1
-; CHECK-NEXT:    store i8 [[A]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[A]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[C:%.*]] = icmp ne i8 [[X]], 0
 ; CHECK-NEXT:    ret i1 [[C]]
 ;
   %a = add i8 %x, -1
-  store i8 %a, i8* %p
+  store i8 %a, ptr %p
   %c = icmp ne i8 %a, -1
   ret i1 %c
 }
index 673fe2fd89d83d369e47295459a68f471926ee92..a01b4a2ecbc86e98818e29bc18c06e1c9bad25a8 100644 (file)
@@ -55,11 +55,11 @@ define i64 @test2_PR2274(i32 %x, i32 %v) nounwind {
 define i32 @PR30366(i1 %a) {
 ; CHECK-LABEL: @PR30366(
 ; CHECK-NEXT:    [[Z:%.*]] = zext i1 [[A:%.*]] to i32
-; CHECK-NEXT:    [[D:%.*]] = lshr i32 [[Z]], zext (i16 ptrtoint ([1 x i16]* @b to i16) to i32)
+; CHECK-NEXT:    [[D:%.*]] = lshr i32 [[Z]], zext (i16 ptrtoint (ptr @b to i16) to i32)
 ; CHECK-NEXT:    ret i32 [[D]]
 ;
   %z = zext i1 %a to i32
-  %d = udiv i32 %z, zext (i16 shl (i16 1, i16 ptrtoint ([1 x i16]* @b to i16)) to i32)
+  %d = udiv i32 %z, zext (i16 shl (i16 1, i16 ptrtoint (ptr @b to i16)) to i32)
   ret i32 %d
 }
 
@@ -79,7 +79,7 @@ define i177 @ossfuzz_4857(i177 %X, i177 %Y) {
   %B22 = add i177 %B9, %B13
   %B1 = udiv i177 %B5, %B6
   %C9 = icmp ult i177 %Y, %B22
-  store i1 %C9, i1* undef
+  store i1 %C9, ptr undef
   ret i177 %B1
 }
 
index 1131e1393c48171ac8841380adacf165c8939b17..97ec9aa4b0c35bb66e180ebef91911f35b43d959 100644 (file)
@@ -278,12 +278,12 @@ define i32 @urem_c_i32(i8 %a) {
 
 define i32 @udiv_constexpr(i8 %a) {
 ; CHECK-LABEL: @udiv_constexpr(
-; CHECK-NEXT:    [[TMP1:%.*]] = udiv i8 [[A:%.*]], ptrtoint ([1 x i8]* @b to i8)
+; CHECK-NEXT:    [[TMP1:%.*]] = udiv i8 [[A:%.*]], ptrtoint (ptr @b to i8)
 ; CHECK-NEXT:    [[D:%.*]] = zext i8 [[TMP1]] to i32
 ; CHECK-NEXT:    ret i32 [[D]]
 ;
   %za = zext i8 %a to i32
-  %d = udiv i32 %za, zext (i8 ptrtoint ([1 x i8]* @b to i8) to i32)
+  %d = udiv i32 %za, zext (i8 ptrtoint (ptr @b to i8) to i32)
   ret i32 %d
 }
 
@@ -293,10 +293,10 @@ define i32 @udiv_constexpr(i8 %a) {
 
 define i32 @udiv_const_constexpr(i8 %a) {
 ; CHECK-LABEL: @udiv_const_constexpr(
-; CHECK-NEXT:    [[D:%.*]] = udiv i32 42, zext (i8 ptrtoint ([1 x i8]* @g1 to i8) to i32)
+; CHECK-NEXT:    [[D:%.*]] = udiv i32 42, zext (i8 ptrtoint (ptr @g1 to i8) to i32)
 ; CHECK-NEXT:    ret i32 [[D]]
 ;
-  %d = udiv i32 42, zext (i8 ptrtoint ([1 x i8]* @g1 to i8) to i32)
+  %d = udiv i32 42, zext (i8 ptrtoint (ptr @g1 to i8) to i32)
   ret i32 %d
 }
 
@@ -306,10 +306,10 @@ define i32 @udiv_const_constexpr(i8 %a) {
 
 define i32 @urem_const_constexpr(i8 %a) {
 ; CHECK-LABEL: @urem_const_constexpr(
-; CHECK-NEXT:    [[D:%.*]] = urem i32 42, zext (i8 ptrtoint ([1 x i8]* @g2 to i8) to i32)
+; CHECK-NEXT:    [[D:%.*]] = urem i32 42, zext (i8 ptrtoint (ptr @g2 to i8) to i32)
 ; CHECK-NEXT:    ret i32 [[D]]
 ;
-  %d = urem i32 42, zext (i8 ptrtoint ([1 x i8]* @g2 to i8) to i32)
+  %d = urem i32 42, zext (i8 ptrtoint (ptr @g2 to i8) to i32)
   ret i32 %d
 }
 
@@ -317,10 +317,10 @@ define i32 @urem_const_constexpr(i8 %a) {
 
 define i32 @udiv_constexpr_const(i8 %a) {
 ; CHECK-LABEL: @udiv_constexpr_const(
-; CHECK-NEXT:    [[D:%.*]] = udiv i32 zext (i8 ptrtoint ([1 x i8]* @g3 to i8) to i32), 42
+; CHECK-NEXT:    [[D:%.*]] = udiv i32 zext (i8 ptrtoint (ptr @g3 to i8) to i32), 42
 ; CHECK-NEXT:    ret i32 [[D]]
 ;
-  %d = udiv i32 zext (i8 ptrtoint ([1 x i8]* @g3 to i8) to i32), 42
+  %d = udiv i32 zext (i8 ptrtoint (ptr @g3 to i8) to i32), 42
   ret i32 %d
 }
 
@@ -328,9 +328,9 @@ define i32 @udiv_constexpr_const(i8 %a) {
 
 define i32 @urem_constexpr_const(i8 %a) {
 ; CHECK-LABEL: @urem_constexpr_const(
-; CHECK-NEXT:    [[D:%.*]] = urem i32 zext (i8 ptrtoint ([1 x i8]* @g4 to i8) to i32), 42
+; CHECK-NEXT:    [[D:%.*]] = urem i32 zext (i8 ptrtoint (ptr @g4 to i8) to i32), 42
 ; CHECK-NEXT:    ret i32 [[D]]
 ;
-  %d = urem i32 zext (i8 ptrtoint ([1 x i8]* @g4 to i8) to i32), 42
+  %d = urem i32 zext (i8 ptrtoint (ptr @g4 to i8) to i32), 42
   ret i32 %d
 }
index e1eafa0b1612419f4956e85c9b8e8362c889cd3a..c7a2386c57c1e7891551a2edc6fee705667c4687 100644 (file)
 
 declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #0
 
-define i1 @test1(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test1(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test1(
 ; CHECK-NEXT:    [[MUL:%.*]] = mul i64 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne i64 [[A]], 0
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i64 [[B]], 0
 ; CHECK-NEXT:    [[OVERFLOW_1:%.*]] = and i1 [[TMP1]], [[TMP2]]
-; CHECK-NEXT:    store i64 [[MUL]], i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 [[MUL]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    ret i1 [[OVERFLOW_1]]
 ;
 
@@ -26,17 +26,17 @@ define i1 @test1(i64 %a, i64 %b, i64* %ptr) {
   %mul = extractvalue { i64, i1 } %res, 0
   %cmp  = icmp ne i64 %mul, 0
   %overflow.1 = or i1 %overflow, %cmp
-  store i64 %mul, i64* %ptr, align 8
+  store i64 %mul, ptr %ptr, align 8
   ret i1 %overflow.1
 }
 
-define i1 @test1_logical(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test1_logical(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test1_logical(
 ; CHECK-NEXT:    [[MUL:%.*]] = mul i64 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne i64 [[A]], 0
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i64 [[B]], 0
 ; CHECK-NEXT:    [[OVERFLOW_1:%.*]] = and i1 [[TMP1]], [[TMP2]]
-; CHECK-NEXT:    store i64 [[MUL]], i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 [[MUL]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    ret i1 [[OVERFLOW_1]]
 ;
 
@@ -45,17 +45,17 @@ define i1 @test1_logical(i64 %a, i64 %b, i64* %ptr) {
   %mul = extractvalue { i64, i1 } %res, 0
   %cmp  = icmp ne i64 %mul, 0
   %overflow.1 = select i1 %overflow, i1 true, i1 %cmp
-  store i64 %mul, i64* %ptr, align 8
+  store i64 %mul, ptr %ptr, align 8
   ret i1 %overflow.1
 }
 
-define i1 @test1_or_ops_swapped(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test1_or_ops_swapped(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test1_or_ops_swapped(
 ; CHECK-NEXT:    [[MUL:%.*]] = mul i64 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne i64 [[A]], 0
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i64 [[B]], 0
 ; CHECK-NEXT:    [[OVERFLOW_1:%.*]] = and i1 [[TMP1]], [[TMP2]]
-; CHECK-NEXT:    store i64 [[MUL]], i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 [[MUL]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    ret i1 [[OVERFLOW_1]]
 ;
 
@@ -65,17 +65,17 @@ define i1 @test1_or_ops_swapped(i64 %a, i64 %b, i64* %ptr) {
   %mul = extractvalue { i64, i1 } %res, 0
   %cmp  = icmp ne i64 %mul, 0
   %overflow.1 = or i1 %cmp, %overflow
-  store i64 %mul, i64* %ptr, align 8
+  store i64 %mul, ptr %ptr, align 8
   ret i1 %overflow.1
 }
 
-define i1 @test1_or_ops_swapped_logical(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test1_or_ops_swapped_logical(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test1_or_ops_swapped_logical(
 ; CHECK-NEXT:    [[MUL:%.*]] = mul i64 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne i64 [[A]], 0
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i64 [[B]], 0
 ; CHECK-NEXT:    [[OVERFLOW_1:%.*]] = and i1 [[TMP1]], [[TMP2]]
-; CHECK-NEXT:    store i64 [[MUL]], i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 [[MUL]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    ret i1 [[OVERFLOW_1]]
 ;
 
@@ -85,18 +85,18 @@ define i1 @test1_or_ops_swapped_logical(i64 %a, i64 %b, i64* %ptr) {
   %mul = extractvalue { i64, i1 } %res, 0
   %cmp  = icmp ne i64 %mul, 0
   %overflow.1 = select i1 %cmp, i1 true, i1 %overflow
-  store i64 %mul, i64* %ptr, align 8
+  store i64 %mul, ptr %ptr, align 8
   ret i1 %overflow.1
 }
 
-define i1 @test2(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test2(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:    [[MUL:%.*]] = mul i64 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne i64 [[A]], 0
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i64 [[B]], 0
 ; CHECK-NEXT:    [[OVERFLOW_1:%.*]] = and i1 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i64 0, [[MUL]]
-; CHECK-NEXT:    store i64 [[NEG]], i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 [[NEG]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    ret i1 [[OVERFLOW_1]]
 ;
 
@@ -106,18 +106,18 @@ define i1 @test2(i64 %a, i64 %b, i64* %ptr) {
   %cmp = icmp ne i64 %mul, 0
   %overflow.1 = or i1 %overflow, %cmp
   %neg = sub i64 0, %mul
-  store i64 %neg, i64* %ptr, align 8
+  store i64 %neg, ptr %ptr, align 8
   ret i1 %overflow.1
 }
 
-define i1 @test2_logical(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test2_logical(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test2_logical(
 ; CHECK-NEXT:    [[MUL:%.*]] = mul i64 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne i64 [[A]], 0
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i64 [[B]], 0
 ; CHECK-NEXT:    [[OVERFLOW_1:%.*]] = and i1 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i64 0, [[MUL]]
-; CHECK-NEXT:    store i64 [[NEG]], i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 [[NEG]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    ret i1 [[OVERFLOW_1]]
 ;
 
@@ -127,13 +127,13 @@ define i1 @test2_logical(i64 %a, i64 %b, i64* %ptr) {
   %cmp = icmp ne i64 %mul, 0
   %overflow.1 = select i1 %overflow, i1 true, i1 %cmp
   %neg = sub i64 0, %mul
-  store i64 %neg, i64* %ptr, align 8
+  store i64 %neg, ptr %ptr, align 8
   ret i1 %overflow.1
 }
 
 declare void @use(i1)
 
-define i1 @test3_multiple_overflow_users(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test3_multiple_overflow_users(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test3_multiple_overflow_users(
 ; CHECK-NEXT:    [[RES:%.*]] = tail call { i64, i1 } @llvm.umul.with.overflow.i64(i64 [[A:%.*]], i64 [[B:%.*]])
 ; CHECK-NEXT:    [[OVERFLOW:%.*]] = extractvalue { i64, i1 } [[RES]], 1
@@ -152,7 +152,7 @@ define i1 @test3_multiple_overflow_users(i64 %a, i64 %b, i64* %ptr) {
   ret i1 %overflow.1
 }
 
-define i1 @test3_multiple_overflow_users_logical(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test3_multiple_overflow_users_logical(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test3_multiple_overflow_users_logical(
 ; CHECK-NEXT:    [[RES:%.*]] = tail call { i64, i1 } @llvm.umul.with.overflow.i64(i64 [[A:%.*]], i64 [[B:%.*]])
 ; CHECK-NEXT:    [[OVERFLOW:%.*]] = extractvalue { i64, i1 } [[RES]], 1
@@ -172,7 +172,7 @@ define i1 @test3_multiple_overflow_users_logical(i64 %a, i64 %b, i64* %ptr) {
 }
 
 ; Do not simplify if %overflow and %mul have multiple uses.
-define i1 @test3_multiple_overflow_and_mul_users(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test3_multiple_overflow_and_mul_users(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test3_multiple_overflow_and_mul_users(
 ; CHECK-NEXT:    [[RES:%.*]] = tail call { i64, i1 } @llvm.umul.with.overflow.i64(i64 [[A:%.*]], i64 [[B:%.*]])
 ; CHECK-NEXT:    [[OVERFLOW:%.*]] = extractvalue { i64, i1 } [[RES]], 1
@@ -180,7 +180,7 @@ define i1 @test3_multiple_overflow_and_mul_users(i64 %a, i64 %b, i64* %ptr) {
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i64 [[MUL]], 0
 ; CHECK-NEXT:    [[OVERFLOW_1:%.*]] = or i1 [[OVERFLOW]], [[CMP]]
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i64 0, [[MUL]]
-; CHECK-NEXT:    store i64 [[NEG]], i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 [[NEG]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    call void @use(i1 [[OVERFLOW]])
 ; CHECK-NEXT:    ret i1 [[OVERFLOW_1]]
 ;
@@ -190,12 +190,12 @@ define i1 @test3_multiple_overflow_and_mul_users(i64 %a, i64 %b, i64* %ptr) {
   %cmp = icmp ne i64 %mul, 0
   %overflow.1 = or i1 %overflow, %cmp
   %neg = sub i64 0, %mul
-  store i64 %neg, i64* %ptr, align 8
+  store i64 %neg, ptr %ptr, align 8
   call void @use(i1 %overflow)
   ret i1 %overflow.1
 }
 
-define i1 @test3_multiple_overflow_and_mul_users_logical(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test3_multiple_overflow_and_mul_users_logical(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test3_multiple_overflow_and_mul_users_logical(
 ; CHECK-NEXT:    [[RES:%.*]] = tail call { i64, i1 } @llvm.umul.with.overflow.i64(i64 [[A:%.*]], i64 [[B:%.*]])
 ; CHECK-NEXT:    [[OVERFLOW:%.*]] = extractvalue { i64, i1 } [[RES]], 1
@@ -203,7 +203,7 @@ define i1 @test3_multiple_overflow_and_mul_users_logical(i64 %a, i64 %b, i64* %p
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i64 [[MUL]], 0
 ; CHECK-NEXT:    [[OVERFLOW_1:%.*]] = or i1 [[OVERFLOW]], [[CMP]]
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i64 0, [[MUL]]
-; CHECK-NEXT:    store i64 [[NEG]], i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 [[NEG]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    call void @use(i1 [[OVERFLOW]])
 ; CHECK-NEXT:    ret i1 [[OVERFLOW_1]]
 ;
@@ -213,14 +213,14 @@ define i1 @test3_multiple_overflow_and_mul_users_logical(i64 %a, i64 %b, i64* %p
   %cmp = icmp ne i64 %mul, 0
   %overflow.1 = select i1 %overflow, i1 true, i1 %cmp
   %neg = sub i64 0, %mul
-  store i64 %neg, i64* %ptr, align 8
+  store i64 %neg, ptr %ptr, align 8
   call void @use(i1 %overflow)
   ret i1 %overflow.1
 }
 
 
 declare void @use.2({ i64, i1 })
-define i1 @test3_multiple_res_users(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test3_multiple_res_users(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test3_multiple_res_users(
 ; CHECK-NEXT:    [[RES:%.*]] = tail call { i64, i1 } @llvm.umul.with.overflow.i64(i64 [[A:%.*]], i64 [[B:%.*]])
 ; CHECK-NEXT:    [[MUL:%.*]] = extractvalue { i64, i1 } [[RES]], 0
@@ -228,7 +228,7 @@ define i1 @test3_multiple_res_users(i64 %a, i64 %b, i64* %ptr) {
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i64 [[B]], 0
 ; CHECK-NEXT:    [[OVERFLOW_1:%.*]] = and i1 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i64 0, [[MUL]]
-; CHECK-NEXT:    store i64 [[NEG]], i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 [[NEG]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    call void @use.2({ i64, i1 } [[RES]])
 ; CHECK-NEXT:    ret i1 [[OVERFLOW_1]]
 ;
@@ -238,12 +238,12 @@ define i1 @test3_multiple_res_users(i64 %a, i64 %b, i64* %ptr) {
   %cmp = icmp ne i64 %mul, 0
   %overflow.1 = or i1 %overflow, %cmp
   %neg = sub i64 0, %mul
-  store i64 %neg, i64* %ptr, align 8
+  store i64 %neg, ptr %ptr, align 8
   call void @use.2({ i64, i1 } %res)
   ret i1 %overflow.1
 }
 
-define i1 @test3_multiple_res_users_logical(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test3_multiple_res_users_logical(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test3_multiple_res_users_logical(
 ; CHECK-NEXT:    [[RES:%.*]] = tail call { i64, i1 } @llvm.umul.with.overflow.i64(i64 [[A:%.*]], i64 [[B:%.*]])
 ; CHECK-NEXT:    [[MUL:%.*]] = extractvalue { i64, i1 } [[RES]], 0
@@ -251,7 +251,7 @@ define i1 @test3_multiple_res_users_logical(i64 %a, i64 %b, i64* %ptr) {
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i64 [[B]], 0
 ; CHECK-NEXT:    [[OVERFLOW_1:%.*]] = and i1 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i64 0, [[MUL]]
-; CHECK-NEXT:    store i64 [[NEG]], i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 [[NEG]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    call void @use.2({ i64, i1 } [[RES]])
 ; CHECK-NEXT:    ret i1 [[OVERFLOW_1]]
 ;
@@ -261,7 +261,7 @@ define i1 @test3_multiple_res_users_logical(i64 %a, i64 %b, i64* %ptr) {
   %cmp = icmp ne i64 %mul, 0
   %overflow.1 = select i1 %overflow, i1 true, i1 %cmp
   %neg = sub i64 0, %mul
-  store i64 %neg, i64* %ptr, align 8
+  store i64 %neg, ptr %ptr, align 8
   call void @use.2({ i64, i1 } %res)
   ret i1 %overflow.1
 }
@@ -269,14 +269,14 @@ define i1 @test3_multiple_res_users_logical(i64 %a, i64 %b, i64* %ptr) {
 declare void @use.3(i64)
 
 ; Simplify if %mul has multiple uses.
-define i1 @test3_multiple_mul_users(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test3_multiple_mul_users(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test3_multiple_mul_users(
 ; CHECK-NEXT:    [[MUL:%.*]] = mul i64 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne i64 [[A]], 0
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i64 [[B]], 0
 ; CHECK-NEXT:    [[OVERFLOW_1:%.*]] = and i1 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i64 0, [[MUL]]
-; CHECK-NEXT:    store i64 [[NEG]], i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 [[NEG]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    call void @use.3(i64 [[MUL]])
 ; CHECK-NEXT:    ret i1 [[OVERFLOW_1]]
 ;
@@ -287,19 +287,19 @@ define i1 @test3_multiple_mul_users(i64 %a, i64 %b, i64* %ptr) {
   %cmp = icmp ne i64 %mul, 0
   %overflow.1 = or i1 %overflow, %cmp
   %neg = sub i64 0, %mul
-  store i64 %neg, i64* %ptr, align 8
+  store i64 %neg, ptr %ptr, align 8
   call void @use.3(i64 %mul)
   ret i1 %overflow.1
 }
 
-define i1 @test3_multiple_mul_users_logical(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test3_multiple_mul_users_logical(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test3_multiple_mul_users_logical(
 ; CHECK-NEXT:    [[MUL:%.*]] = mul i64 [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ne i64 [[A]], 0
 ; CHECK-NEXT:    [[TMP2:%.*]] = icmp ne i64 [[B]], 0
 ; CHECK-NEXT:    [[OVERFLOW_1:%.*]] = and i1 [[TMP1]], [[TMP2]]
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i64 0, [[MUL]]
-; CHECK-NEXT:    store i64 [[NEG]], i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 [[NEG]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    call void @use.3(i64 [[MUL]])
 ; CHECK-NEXT:    ret i1 [[OVERFLOW_1]]
 ;
@@ -310,14 +310,14 @@ define i1 @test3_multiple_mul_users_logical(i64 %a, i64 %b, i64* %ptr) {
   %cmp = icmp ne i64 %mul, 0
   %overflow.1 = select i1 %overflow, i1 true, i1 %cmp
   %neg = sub i64 0, %mul
-  store i64 %neg, i64* %ptr, align 8
+  store i64 %neg, ptr %ptr, align 8
   call void @use.3(i64 %mul)
   ret i1 %overflow.1
 }
 
 
 
-define i1 @test4_no_icmp_ne(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test4_no_icmp_ne(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test4_no_icmp_ne(
 ; CHECK-NEXT:    [[RES:%.*]] = tail call { i64, i1 } @llvm.umul.with.overflow.i64(i64 [[A:%.*]], i64 [[B:%.*]])
 ; CHECK-NEXT:    [[OVERFLOW:%.*]] = extractvalue { i64, i1 } [[RES]], 1
@@ -325,7 +325,7 @@ define i1 @test4_no_icmp_ne(i64 %a, i64 %b, i64* %ptr) {
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i64 [[MUL]], 0
 ; CHECK-NEXT:    [[OVERFLOW_1:%.*]] = or i1 [[OVERFLOW]], [[CMP]]
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i64 0, [[MUL]]
-; CHECK-NEXT:    store i64 [[NEG]], i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 [[NEG]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    ret i1 [[OVERFLOW_1]]
 ;
   %res = tail call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %a, i64 %b)
@@ -334,11 +334,11 @@ define i1 @test4_no_icmp_ne(i64 %a, i64 %b, i64* %ptr) {
   %cmp = icmp sgt i64 %mul, 0
   %overflow.1 = or i1 %overflow, %cmp
   %neg = sub i64 0, %mul
-  store i64 %neg, i64* %ptr, align 8
+  store i64 %neg, ptr %ptr, align 8
   ret i1 %overflow.1
 }
 
-define i1 @test4_no_icmp_ne_logical(i64 %a, i64 %b, i64* %ptr) {
+define i1 @test4_no_icmp_ne_logical(i64 %a, i64 %b, ptr %ptr) {
 ; CHECK-LABEL: @test4_no_icmp_ne_logical(
 ; CHECK-NEXT:    [[RES:%.*]] = tail call { i64, i1 } @llvm.umul.with.overflow.i64(i64 [[A:%.*]], i64 [[B:%.*]])
 ; CHECK-NEXT:    [[OVERFLOW:%.*]] = extractvalue { i64, i1 } [[RES]], 1
@@ -346,7 +346,7 @@ define i1 @test4_no_icmp_ne_logical(i64 %a, i64 %b, i64* %ptr) {
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i64 [[MUL]], 0
 ; CHECK-NEXT:    [[OVERFLOW_1:%.*]] = or i1 [[OVERFLOW]], [[CMP]]
 ; CHECK-NEXT:    [[NEG:%.*]] = sub i64 0, [[MUL]]
-; CHECK-NEXT:    store i64 [[NEG]], i64* [[PTR:%.*]], align 8
+; CHECK-NEXT:    store i64 [[NEG]], ptr [[PTR:%.*]], align 8
 ; CHECK-NEXT:    ret i1 [[OVERFLOW_1]]
 ;
   %res = tail call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %a, i64 %b)
@@ -355,7 +355,7 @@ define i1 @test4_no_icmp_ne_logical(i64 %a, i64 %b, i64* %ptr) {
   %cmp = icmp sgt i64 %mul, 0
   %overflow.1 = select i1 %overflow, i1 true, i1 %cmp
   %neg = sub i64 0, %mul
-  store i64 %neg, i64* %ptr, align 8
+  store i64 %neg, ptr %ptr, align 8
   ret i1 %overflow.1
 }
 
index bb615ebd3bc4b57f5b6850d38bc9045ecd07346d..165f558415338722e9339f4c338f2e0ce98bc2e6 100644 (file)
@@ -17,14 +17,14 @@ entry:
 
 define i32 @main() local_unnamed_addr #0 !dbg !26 {
 entry:
-  %0 = load i8, i8* @e, align 1, !dbg !31, !tbaa !32
+  %0 = load i8, ptr @e, align 1, !dbg !31, !tbaa !32
   %conv = sext i8 %0 to i32, !dbg !31
-  store i32 %conv, i32* @c, align 4, !dbg !35, !tbaa !36
+  store i32 %conv, ptr @c, align 4, !dbg !35, !tbaa !36
   call void @llvm.dbg.value(metadata i32 -1372423381, metadata !30, metadata !DIExpression()), !dbg !38
   %call = call signext i8 @b(i32 6), !dbg !39
   %conv1 = sext i8 %call to i32, !dbg !39
   call void @llvm.dbg.value(metadata i32 %conv1, metadata !30, metadata !DIExpression()), !dbg !38
-  %1 = load i32, i32* @d, align 4, !dbg !40, !tbaa !36
+  %1 = load i32, ptr @d, align 4, !dbg !40, !tbaa !36
   %call2 = call i32 (...) @optimize_me_not(), !dbg !41
   ret i32 0, !dbg !42
 }
index da5ebe909d2227797f2e567761d68859170ad080..0c2bf404947a3439b06a9a0bd8dfc2fdd66be975 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
 ; Fold
-;   ((%x * %y) u/ %x) == %y
+;   ((ptr %y) u/ %x) == %y
 ; to
 ;   @llvm.umul.with.overflow(%x, %y) + extractvalue + not
 
index 2b883544f41374ce9dc63e5904c89f96bf31f12e..1d99067737b2056813fb482fafe88ccf2eb977aa 100644 (file)
@@ -2,7 +2,7 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
 ; Fold
-;   ((%x * %y) u/ %x) != %y
+;   ((ptr %y) u/ %x) != %y
 ; to
 ;   @llvm.umul.with.overflow(%x, %y) + extractvalue
 
index 545876a166ed3581d4b44323fa53218dbe607031..4bd148bd24e9dd11ec1e7093b4963b31476d7556 100644 (file)
@@ -7,44 +7,43 @@
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
-define i32 @main(i32 %argc, i8** %argv) #0 {
+define i32 @main(i32 %argc, ptr %argv) #0 {
 ; CHECK-LABEL: define {{[^@]+}}@main
-; CHECK-SAME: (i32 [[ARGC:%.*]], i8** nocapture readonly [[ARGV:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
+; CHECK-SAME: (i32 [[ARGC:%.*]], ptr nocapture readonly [[ARGV:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[TMP0:%.*]] = icmp slt i32 [[ARGC]], 2
 ; CHECK-NEXT:    [[SPEC_SELECT:%.*]] = select i1 [[TMP0]], i32 0, i32 [[ARGC]]
 ; CHECK-NEXT:    ret i32 [[SPEC_SELECT]]
 ;
 entry:
-  %0 = getelementptr inbounds i8*, i8** %argv, i32 0
-  %ptr = load i8*, i8** %0
-  %1 = call i32 @compute(i8* %ptr, i32 %argc)
-  %2 = icmp slt i32 %argc, 2
-  br i1 %2, label %done, label %do_work
+  %ptr = load ptr, ptr %argv
+  %0 = call i32 @compute(ptr %ptr, i32 %argc)
+  %1 = icmp slt i32 %argc, 2
+  br i1 %1, label %done, label %do_work
 
 do_work:
-  %3 = icmp eq i8* %ptr, null
-  br i1 %3, label %null, label %done
+  %2 = icmp eq ptr %ptr, null
+  br i1 %2, label %null, label %done
 
 null:
-  call void @call_if_null(i8* %ptr)
+  call void @call_if_null(ptr %ptr)
   br label %done
 
 done:
-  %retval = phi i32 [0, %entry], [%1, %do_work], [%1, %null]
+  %retval = phi i32 [0, %entry], [%0, %do_work], [%0, %null]
   ret i32 %retval
 }
 
-define i32 @compute(i8* noundef nonnull %ptr, i32 %x) #1 {
+define i32 @compute(ptr noundef nonnull %ptr, i32 %x) #1 {
 ; CHECK-LABEL: define {{[^@]+}}@compute
-; CHECK-SAME: (i8* nocapture noundef nonnull readnone [[PTR:%.*]], i32 returned [[X:%.*]])
+; CHECK-SAME: (ptr nocapture noundef nonnull readnone [[PTR:%.*]], i32 returned [[X:%.*]])
 ; CHECK-SAME:  local_unnamed_addr #[[ATTR1:[0-9]+]] {
 ; CHECK-NEXT:    ret i32 [[X]]
 ;
   ret i32 %x
 }
 
-declare void @call_if_null(i8* %ptr) #0
+declare void @call_if_null(ptr %ptr) #0
 
 attributes #0 = { nounwind }
 attributes #1 = { noinline nounwind readonly }
index 8aa598bfecd2bbedb32cf3364eb6b40937b6929a..c7a477c1bcc99dbc4c8a85bed7a66a836a53b478 100644 (file)
@@ -10,7 +10,7 @@ entry:
   unreachable
 }
 
-define dso_local void @test() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
+define dso_local void @test() personality ptr @__gxx_personality_v0 {
 entry:
 ; CHECK: define dso_local void @test()
 ; CHECK-NEXT: entry:
@@ -23,16 +23,16 @@ invoke.cont:
   ret void
 
 lpad:
-; CHECK: %0 = landingpad { i8*, i32 }
-; CHECK: resume { i8*, i32 } %0
+; CHECK: %0 = landingpad { ptr, i32 }
+; CHECK: resume { ptr, i32 } %0
 
-  %0 = landingpad { i8*, i32 }
+  %0 = landingpad { ptr, i32 }
           cleanup
-  call void (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
-  resume { i8*, i32 } %0
+  call void (ptr, ...) @printf(ptr @.str.2)
+  resume { ptr, i32 } %0
 
 }
 
 declare dso_local i32 @__gxx_personality_v0(...)
 
-declare dso_local void @printf(i8*, ...)
+declare dso_local void @printf(ptr, ...)
index b824c7d009400ef424d1ca4ecd290174c1a77d0d..4c58763b110dab1e847d1267867dffe4916fe3d5 100644 (file)
@@ -22,8 +22,8 @@ bb14:
   br label %bb15
 
 bb15:
-  %iftmp.0.0 = phi i8* [ getelementptr ([5 x i8], [5 x i8]* @.str1, i32 0, i32 0), %bb14 ], [ getelementptr ([5 x i8], [5 x i8]* @.str, i32 0, i32 0), %bb ]
-  %tmp17 = call i32 (i8*, ...) @printf(i8* %iftmp.0.0) nounwind
+  %iftmp.0.0 = phi ptr [ @.str1, %bb14 ], [ @.str, %bb ]
+  %tmp17 = call i32 (ptr, ...) @printf(ptr %iftmp.0.0) nounwind
   ret i32 0
 }
 
@@ -33,4 +33,4 @@ bb15:
 
 declare i32 @func_11()
 
-declare i32 @printf(i8*, ...) nounwind
+declare i32 @printf(ptr, ...) nounwind
index f0f6595db71e89ac1e84acc286679a0b2b48e480..92348649232235251b1855c5ad05b6e1ede5c36a 100644 (file)
@@ -1,30 +1,28 @@
 ; RUN: opt < %s -passes=instcombine -instcombine-infinite-loop-threshold=3 -S | FileCheck %s
 
-%struct.__va_list = type { i8*, i8*, i8*, i32, i32 }
+%struct.__va_list = type { ptr, ptr, ptr, i32, i32 }
 
-declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
-declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)
-declare void @llvm.va_start(i8*)
-declare void @llvm.va_end(i8*)
-declare void @llvm.va_copy(i8*, i8*)
+declare void @llvm.lifetime.start.p0(i64, ptr nocapture)
+declare void @llvm.lifetime.end.p0(i64, ptr nocapture)
+declare void @llvm.va_start(ptr)
+declare void @llvm.va_end(ptr)
+declare void @llvm.va_copy(ptr, ptr)
 
-define i32 @func(i8* nocapture readnone %fmt, ...) {
+define i32 @func(ptr nocapture readnone %fmt, ...) {
 ; CHECK-LABEL: @func(
 ; CHECK: entry:
 ; CHECK-NEXT: ret i32 0
 entry:
   %va0 = alloca %struct.__va_list, align 8
   %va1 = alloca %struct.__va_list, align 8
-  %0 = bitcast %struct.__va_list* %va0 to i8*
-  %1 = bitcast %struct.__va_list* %va1 to i8*
-  call void @llvm.lifetime.start.p0i8(i64 32, i8* %0)
-  call void @llvm.va_start(i8* %0)
-  call void @llvm.lifetime.start.p0i8(i64 32, i8* %1)
-  call void @llvm.va_copy(i8* %1, i8* %0)
-  call void @llvm.va_end(i8* %1)
-  call void @llvm.lifetime.end.p0i8(i64 32, i8* %1)
-  call void @llvm.va_end(i8* %0)
-  call void @llvm.lifetime.end.p0i8(i64 32, i8* %0)
+  call void @llvm.lifetime.start.p0(i64 32, ptr %va0)
+  call void @llvm.va_start(ptr %va0)
+  call void @llvm.lifetime.start.p0(i64 32, ptr %va1)
+  call void @llvm.va_copy(ptr %va1, ptr %va0)
+  call void @llvm.va_end(ptr %va1)
+  call void @llvm.lifetime.end.p0(i64 32, ptr %va1)
+  call void @llvm.va_end(ptr %va0)
+  call void @llvm.lifetime.end.p0(i64 32, ptr %va0)
   ret i32 0
 }
 
index 463e46e6782ca096f21c3f55289be43a02bc4369..8ed54fa298dd6352b1c5d560205ec5532f05330e 100644 (file)
@@ -21,7 +21,7 @@ define i32 @test2(float %f) {
 define void @get_image() nounwind {
 ; CHECK-LABEL: @get_image(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = call i32 @fgetc(i8* null) #[[ATTR0:[0-9]+]]
+; CHECK-NEXT:    [[TMP0:%.*]] = call i32 @fgetc(ptr null) #[[ATTR0:[0-9]+]]
 ; CHECK-NEXT:    br i1 false, label [[BB2:%.*]], label [[BB3:%.*]]
 ; CHECK:       bb2:
 ; CHECK-NEXT:    br label [[BB3]]
@@ -29,7 +29,7 @@ define void @get_image() nounwind {
 ; CHECK-NEXT:    unreachable
 ;
 entry:
-  %0 = call i32 @fgetc(i8* null) nounwind
+  %0 = call i32 @fgetc(ptr null) nounwind
   %1 = trunc i32 %0 to i8
   %t2 = insertelement <100 x i8> zeroinitializer, i8 %1, i32 1
   %t1 = extractelement <100 x i8> %t2, i32 0
@@ -44,23 +44,23 @@ bb3:            ; preds = %bb2, %entry
 }
 
 ; PR4340
-define void @vac(<4 x float>* nocapture %a) nounwind {
+define void @vac(ptr nocapture %a) nounwind {
 ; CHECK-LABEL: @vac(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    store <4 x float> zeroinitializer, <4 x float>* [[A:%.*]], align 16
+; CHECK-NEXT:    store <4 x float> zeroinitializer, ptr [[A:%.*]], align 16
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %t1 = load <4 x float>, <4 x float>* %a              ; <<4 x float>> [#uses=1]
+  %t1 = load <4 x float>, ptr %a               ; <<4 x float>> [#uses=1]
   %vecins = insertelement <4 x float> %t1, float 0.000000e+00, i32 0   ; <<4 x float>> [#uses=1]
   %vecins4 = insertelement <4 x float> %vecins, float 0.000000e+00, i32 1; <<4 x float>> [#uses=1]
   %vecins6 = insertelement <4 x float> %vecins4, float 0.000000e+00, i32 2; <<4 x float>> [#uses=1]
   %vecins8 = insertelement <4 x float> %vecins6, float 0.000000e+00, i32 3; <<4 x float>> [#uses=1]
-  store <4 x float> %vecins8, <4 x float>* %a
+  store <4 x float> %vecins8, ptr %a
   ret void
 }
 
-declare i32 @fgetc(i8*)
+declare i32 @fgetc(ptr)
 
 define <4 x float> @dead_shuffle_elt(<4 x float> %x, <2 x float> %y) nounwind {
 ; CHECK-LABEL: @dead_shuffle_elt(
@@ -499,172 +499,172 @@ define <3 x float> @shuf_frem_const_op1(<3 x float> %x) {
   ret <3 x float> %r
 }
 
-define i32* @gep_vbase_w_s_idx(<2 x i32*> %base, i64 %index) {
+define ptr @gep_vbase_w_s_idx(<2 x ptr> %base, i64 %index) {
 ; CHECK-LABEL: @gep_vbase_w_s_idx(
-; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <2 x i32*> [[BASE:%.*]], i64 1
-; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, i32* [[TMP1]], i64 [[INDEX:%.*]]
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <2 x ptr> [[BASE:%.*]], i64 1
+; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, ptr [[TMP1]], i64 [[INDEX:%.*]]
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
-  %gep = getelementptr i32, <2 x i32*> %base, i64 %index
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %gep = getelementptr i32, <2 x ptr> %base, i64 %index
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
-define i32* @gep_splat_base_w_s_idx(i32* %base) {
+define ptr @gep_splat_base_w_s_idx(ptr %base) {
 ; CHECK-LABEL: @gep_splat_base_w_s_idx(
-; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, i32* [[BASE:%.*]], i64 1
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, ptr [[BASE:%.*]], i64 1
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
-  %basevec1 = insertelement <2 x i32*> poison, i32* %base, i32 0
-  %basevec2 = shufflevector <2 x i32*> %basevec1, <2 x i32*> poison, <2 x i32> zeroinitializer
-  %gep = getelementptr i32, <2 x i32*> %basevec2, i64 1
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %basevec1 = insertelement <2 x ptr> poison, ptr %base, i32 0
+  %basevec2 = shufflevector <2 x ptr> %basevec1, <2 x ptr> poison, <2 x i32> zeroinitializer
+  %gep = getelementptr i32, <2 x ptr> %basevec2, i64 1
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
 
-define i32* @gep_splat_base_w_cv_idx(i32* %base) {
+define ptr @gep_splat_base_w_cv_idx(ptr %base) {
 ; CHECK-LABEL: @gep_splat_base_w_cv_idx(
-; CHECK-NEXT:    [[BASEVEC2:%.*]] = insertelement <2 x i32*> poison, i32* [[BASE:%.*]], i64 1
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x i32*> [[BASEVEC2]], <2 x i64> <i64 poison, i64 1>
-; CHECK-NEXT:    [[EE:%.*]] = extractelement <2 x i32*> [[GEP]], i64 1
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[BASEVEC2:%.*]] = insertelement <2 x ptr> poison, ptr [[BASE:%.*]], i64 1
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x ptr> [[BASEVEC2]], <2 x i64> <i64 poison, i64 1>
+; CHECK-NEXT:    [[EE:%.*]] = extractelement <2 x ptr> [[GEP]], i64 1
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
-  %basevec1 = insertelement <2 x i32*> poison, i32* %base, i32 0
-  %basevec2 = shufflevector <2 x i32*> %basevec1, <2 x i32*> poison, <2 x i32> zeroinitializer
-  %gep = getelementptr i32, <2 x i32*> %basevec2, <2 x i64> <i64 0, i64 1>
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %basevec1 = insertelement <2 x ptr> poison, ptr %base, i32 0
+  %basevec2 = shufflevector <2 x ptr> %basevec1, <2 x ptr> poison, <2 x i32> zeroinitializer
+  %gep = getelementptr i32, <2 x ptr> %basevec2, <2 x i64> <i64 0, i64 1>
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
-define i32* @gep_splat_base_w_vidx(i32* %base, <2 x i64> %idxvec) {
+define ptr @gep_splat_base_w_vidx(ptr %base, <2 x i64> %idxvec) {
 ; CHECK-LABEL: @gep_splat_base_w_vidx(
-; CHECK-NEXT:    [[BASEVEC2:%.*]] = insertelement <2 x i32*> poison, i32* [[BASE:%.*]], i64 1
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x i32*> [[BASEVEC2]], <2 x i64> [[IDXVEC:%.*]]
-; CHECK-NEXT:    [[EE:%.*]] = extractelement <2 x i32*> [[GEP]], i64 1
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[BASEVEC2:%.*]] = insertelement <2 x ptr> poison, ptr [[BASE:%.*]], i64 1
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x ptr> [[BASEVEC2]], <2 x i64> [[IDXVEC:%.*]]
+; CHECK-NEXT:    [[EE:%.*]] = extractelement <2 x ptr> [[GEP]], i64 1
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
-  %basevec1 = insertelement <2 x i32*> poison, i32* %base, i32 0
-  %basevec2 = shufflevector <2 x i32*> %basevec1, <2 x i32*> poison, <2 x i32> zeroinitializer
-  %gep = getelementptr i32, <2 x i32*> %basevec2, <2 x i64> %idxvec
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %basevec1 = insertelement <2 x ptr> poison, ptr %base, i32 0
+  %basevec2 = shufflevector <2 x ptr> %basevec1, <2 x ptr> poison, <2 x i32> zeroinitializer
+  %gep = getelementptr i32, <2 x ptr> %basevec2, <2 x i64> %idxvec
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
 
 @GLOBAL = internal global i32 zeroinitializer
 
-define i32* @gep_cvbase_w_s_idx(<2 x i32*> %base, i64 %raw_addr) {
+define ptr @gep_cvbase_w_s_idx(<2 x ptr> %base, i64 %raw_addr) {
 ; CHECK-LABEL: @gep_cvbase_w_s_idx(
-; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, i32* @GLOBAL, i64 [[RAW_ADDR:%.*]]
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, ptr @GLOBAL, i64 [[RAW_ADDR:%.*]]
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
-  %gep = getelementptr i32, <2 x i32*> <i32* @GLOBAL, i32* @GLOBAL>, i64 %raw_addr
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %gep = getelementptr i32, <2 x ptr> <ptr @GLOBAL, ptr @GLOBAL>, i64 %raw_addr
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
-define i32* @gep_cvbase_w_cv_idx(<2 x i32*> %base, i64 %raw_addr) {
+define ptr @gep_cvbase_w_cv_idx(<2 x ptr> %base, i64 %raw_addr) {
 ; CHECK-LABEL: @gep_cvbase_w_cv_idx(
-; CHECK-NEXT:    ret i32* getelementptr inbounds (i32, i32* @GLOBAL, i64 1)
+; CHECK-NEXT:    ret ptr getelementptr inbounds (i32, ptr @GLOBAL, i64 1)
 ;
-  %gep = getelementptr i32, <2 x i32*> <i32* @GLOBAL, i32* @GLOBAL>, <2 x i64> <i64 0, i64 1>
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %gep = getelementptr i32, <2 x ptr> <ptr @GLOBAL, ptr @GLOBAL>, <2 x i64> <i64 0, i64 1>
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
 
-define i32* @gep_sbase_w_cv_idx(i32* %base) {
+define ptr @gep_sbase_w_cv_idx(ptr %base) {
 ; CHECK-LABEL: @gep_sbase_w_cv_idx(
-; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, i32* [[BASE:%.*]], i64 1
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, ptr [[BASE:%.*]], i64 1
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
-  %gep = getelementptr i32, i32* %base, <2 x i64> <i64 0, i64 1>
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %gep = getelementptr i32, ptr %base, <2 x i64> <i64 0, i64 1>
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
-define i32* @gep_sbase_w_splat_idx(i32* %base, i64 %idx) {
+define ptr @gep_sbase_w_splat_idx(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @gep_sbase_w_splat_idx(
-; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, i32* [[BASE:%.*]], i64 [[IDX:%.*]]
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, ptr [[BASE:%.*]], i64 [[IDX:%.*]]
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
   %idxvec1 = insertelement <2 x i64> poison, i64 %idx, i32 0
   %idxvec2 = shufflevector <2 x i64> %idxvec1, <2 x i64> poison, <2 x i32> zeroinitializer
-  %gep = getelementptr i32, i32* %base, <2 x i64> %idxvec2
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %gep = getelementptr i32, ptr %base, <2 x i64> %idxvec2
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
-define i32* @gep_splat_both(i32* %base, i64 %idx) {
+define ptr @gep_splat_both(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @gep_splat_both(
-; CHECK-NEXT:    [[BASEVEC2:%.*]] = insertelement <2 x i32*> poison, i32* [[BASE:%.*]], i64 1
+; CHECK-NEXT:    [[BASEVEC2:%.*]] = insertelement <2 x ptr> poison, ptr [[BASE:%.*]], i64 1
 ; CHECK-NEXT:    [[IDXVEC2:%.*]] = insertelement <2 x i64> poison, i64 [[IDX:%.*]], i64 1
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x i32*> [[BASEVEC2]], <2 x i64> [[IDXVEC2]]
-; CHECK-NEXT:    [[EE:%.*]] = extractelement <2 x i32*> [[GEP]], i64 1
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x ptr> [[BASEVEC2]], <2 x i64> [[IDXVEC2]]
+; CHECK-NEXT:    [[EE:%.*]] = extractelement <2 x ptr> [[GEP]], i64 1
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
-  %basevec1 = insertelement <2 x i32*> poison, i32* %base, i32 0
-  %basevec2 = shufflevector <2 x i32*> %basevec1, <2 x i32*> poison, <2 x i32> zeroinitializer
+  %basevec1 = insertelement <2 x ptr> poison, ptr %base, i32 0
+  %basevec2 = shufflevector <2 x ptr> %basevec1, <2 x ptr> poison, <2 x i32> zeroinitializer
   %idxvec1 = insertelement <2 x i64> poison, i64 %idx, i32 0
   %idxvec2 = shufflevector <2 x i64> %idxvec1, <2 x i64> poison, <2 x i32> zeroinitializer
-  %gep = getelementptr i32, <2 x i32*> %basevec2, <2 x i64> %idxvec2
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %gep = getelementptr i32, <2 x ptr> %basevec2, <2 x i64> %idxvec2
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
-define <2 x i32*> @gep_all_lanes_undef(i32* %base, i64 %idx) {;
+define <2 x ptr> @gep_all_lanes_undef(ptr %base, i64 %idx) {;
 ; CHECK-LABEL: @gep_all_lanes_undef(
-; CHECK-NEXT:    [[BASEVEC:%.*]] = insertelement <2 x i32*> poison, i32* [[BASE:%.*]], i64 0
+; CHECK-NEXT:    [[BASEVEC:%.*]] = insertelement <2 x ptr> poison, ptr [[BASE:%.*]], i64 0
 ; CHECK-NEXT:    [[IDXVEC:%.*]] = insertelement <2 x i64> poison, i64 [[IDX:%.*]], i64 1
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x i32*> [[BASEVEC]], <2 x i64> [[IDXVEC]]
-; CHECK-NEXT:    ret <2 x i32*> [[GEP]]
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x ptr> [[BASEVEC]], <2 x i64> [[IDXVEC]]
+; CHECK-NEXT:    ret <2 x ptr> [[GEP]]
 ;
-  %basevec = insertelement <2 x i32*> poison, i32* %base, i32 0
+  %basevec = insertelement <2 x ptr> poison, ptr %base, i32 0
   %idxvec = insertelement <2 x i64> poison, i64 %idx, i32 1
-  %gep = getelementptr i32, <2 x i32*> %basevec, <2 x i64> %idxvec
-  ret <2 x i32*> %gep
+  %gep = getelementptr i32, <2 x ptr> %basevec, <2 x i64> %idxvec
+  ret <2 x ptr> %gep
 }
 
-define i32* @gep_demanded_lane_undef(i32* %base, i64 %idx) {
+define ptr @gep_demanded_lane_undef(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @gep_demanded_lane_undef(
-; CHECK-NEXT:    ret i32* undef
+; CHECK-NEXT:    ret ptr undef
 ;
-  %basevec = insertelement <2 x i32*> poison, i32* %base, i32 0
+  %basevec = insertelement <2 x ptr> poison, ptr %base, i32 0
   %idxvec = insertelement <2 x i64> poison, i64 %idx, i32 1
-  %gep = getelementptr i32, <2 x i32*> %basevec, <2 x i64> %idxvec
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %gep = getelementptr i32, <2 x ptr> %basevec, <2 x i64> %idxvec
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
 
 ;; LangRef has an odd quirk around FCAs which make it illegal to use undef
 ;; indices.
-define i32* @PR41624(<2 x { i32, i32 }*> %a) {
+define ptr @PR41624(<2 x ptr> %a) {
 ; CHECK-LABEL: @PR41624(
-; CHECK-NEXT:    [[W:%.*]] = getelementptr { i32, i32 }, <2 x { i32, i32 }*> [[A:%.*]], <2 x i64> <i64 5, i64 5>, <2 x i32> zeroinitializer
-; CHECK-NEXT:    [[R:%.*]] = extractelement <2 x i32*> [[W]], i64 0
-; CHECK-NEXT:    ret i32* [[R]]
+; CHECK-NEXT:    [[W:%.*]] = getelementptr { i32, i32 }, <2 x ptr> [[A:%.*]], <2 x i64> <i64 5, i64 5>, <2 x i32> zeroinitializer
+; CHECK-NEXT:    [[R:%.*]] = extractelement <2 x ptr> [[W]], i64 0
+; CHECK-NEXT:    ret ptr [[R]]
 ;
-  %w = getelementptr { i32, i32 }, <2 x { i32, i32 }*> %a, <2 x i64> <i64 5, i64 5>, <2 x i32> zeroinitializer
-  %r = extractelement <2 x i32*> %w, i32 0
-  ret i32* %r
+  %w = getelementptr { i32, i32 }, <2 x ptr> %a, <2 x i64> <i64 5, i64 5>, <2 x i32> zeroinitializer
+  %r = extractelement <2 x ptr> %w, i32 0
+  ret ptr %r
 }
 
 @global = external global [0 x i32], align 4
 
 ; Make sure we don't get stuck in a loop turning the zeroinitializer into
 ; <0, undef, undef, undef> and then changing it back.
-define i32* @zero_sized_type_extract(<4 x i64> %arg, i64 %arg1) {
+define ptr @zero_sized_type_extract(<4 x i64> %arg, i64 %arg1) {
 ; CHECK-LABEL: @zero_sized_type_extract(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[T:%.*]] = getelementptr inbounds [0 x i32], <4 x [0 x i32]*> <[0 x i32]* @global, [0 x i32]* poison, [0 x i32]* poison, [0 x i32]* poison>, <4 x i64> <i64 0, i64 poison, i64 poison, i64 poison>, <4 x i64> [[ARG:%.*]]
-; CHECK-NEXT:    [[T2:%.*]] = extractelement <4 x i32*> [[T]], i64 0
-; CHECK-NEXT:    ret i32* [[T2]]
+; CHECK-NEXT:    [[T:%.*]] = getelementptr inbounds [0 x i32], <4 x ptr> <ptr @global, ptr poison, ptr poison, ptr poison>, <4 x i64> <i64 0, i64 poison, i64 poison, i64 poison>, <4 x i64> [[ARG:%.*]]
+; CHECK-NEXT:    [[T2:%.*]] = extractelement <4 x ptr> [[T]], i64 0
+; CHECK-NEXT:    ret ptr [[T2]]
 ;
 bb:
-  %t = getelementptr inbounds [0 x i32], <4 x [0 x i32]*> <[0 x i32]* @global, [0 x i32]* @global, [0 x i32]* @global, [0 x i32]* @global>, <4 x i64> zeroinitializer, <4 x i64> %arg
-  %t2 = extractelement <4 x i32*> %t, i64 0
-  ret i32* %t2
+  %t = getelementptr inbounds [0 x i32], <4 x ptr> <ptr @global, ptr @global, ptr @global, ptr @global>, <4 x i64> zeroinitializer, <4 x i64> %arg
+  %t2 = extractelement <4 x ptr> %t, i64 0
+  ret ptr %t2
 }
 
 ; The non-zero elements of the result are always 'y', so the splat is unnecessary.
index 0e3645788e4abbe0e0dc6988be8884da18229c9b..e18865f9b95fecde85929d10c1eb3c866a61da1e 100644 (file)
@@ -21,7 +21,7 @@ define i32 @test2(float %f) {
 define void @get_image() nounwind {
 ; CHECK-LABEL: @get_image(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP0:%.*]] = call i32 @fgetc(i8* null) #[[ATTR0:[0-9]+]]
+; CHECK-NEXT:    [[TMP0:%.*]] = call i32 @fgetc(ptr null) #[[ATTR0:[0-9]+]]
 ; CHECK-NEXT:    br i1 false, label [[BB2:%.*]], label [[BB3:%.*]]
 ; CHECK:       bb2:
 ; CHECK-NEXT:    br label [[BB3]]
@@ -29,7 +29,7 @@ define void @get_image() nounwind {
 ; CHECK-NEXT:    unreachable
 ;
 entry:
-  %0 = call i32 @fgetc(i8* null) nounwind
+  %0 = call i32 @fgetc(ptr null) nounwind
   %1 = trunc i32 %0 to i8
   %t2 = insertelement <100 x i8> zeroinitializer, i8 %1, i32 1
   %t1 = extractelement <100 x i8> %t2, i32 0
@@ -44,23 +44,23 @@ bb3:            ; preds = %bb2, %entry
 }
 
 ; PR4340
-define void @vac(<4 x float>* nocapture %a) nounwind {
+define void @vac(ptr nocapture %a) nounwind {
 ; CHECK-LABEL: @vac(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    store <4 x float> zeroinitializer, <4 x float>* [[A:%.*]], align 16
+; CHECK-NEXT:    store <4 x float> zeroinitializer, ptr [[A:%.*]], align 16
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %t1 = load <4 x float>, <4 x float>* %a              ; <<4 x float>> [#uses=1]
+  %t1 = load <4 x float>, ptr %a               ; <<4 x float>> [#uses=1]
   %vecins = insertelement <4 x float> %t1, float 0.000000e+00, i32 0   ; <<4 x float>> [#uses=1]
   %vecins4 = insertelement <4 x float> %vecins, float 0.000000e+00, i32 1; <<4 x float>> [#uses=1]
   %vecins6 = insertelement <4 x float> %vecins4, float 0.000000e+00, i32 2; <<4 x float>> [#uses=1]
   %vecins8 = insertelement <4 x float> %vecins6, float 0.000000e+00, i32 3; <<4 x float>> [#uses=1]
-  store <4 x float> %vecins8, <4 x float>* %a
+  store <4 x float> %vecins8, ptr %a
   ret void
 }
 
-declare i32 @fgetc(i8*)
+declare i32 @fgetc(ptr)
 
 define <4 x float> @dead_shuffle_elt(<4 x float> %x, <2 x float> %y) nounwind {
 ; CHECK-LABEL: @dead_shuffle_elt(
@@ -499,172 +499,172 @@ define <3 x float> @shuf_frem_const_op1(<3 x float> %x) {
   ret <3 x float> %r
 }
 
-define i32* @gep_vbase_w_s_idx(<2 x i32*> %base, i64 %index) {
+define ptr @gep_vbase_w_s_idx(<2 x ptr> %base, i64 %index) {
 ; CHECK-LABEL: @gep_vbase_w_s_idx(
-; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <2 x i32*> [[BASE:%.*]], i64 1
-; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, i32* [[TMP1]], i64 [[INDEX:%.*]]
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <2 x ptr> [[BASE:%.*]], i64 1
+; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, ptr [[TMP1]], i64 [[INDEX:%.*]]
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
-  %gep = getelementptr i32, <2 x i32*> %base, i64 %index
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %gep = getelementptr i32, <2 x ptr> %base, i64 %index
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
-define i32* @gep_splat_base_w_s_idx(i32* %base) {
+define ptr @gep_splat_base_w_s_idx(ptr %base) {
 ; CHECK-LABEL: @gep_splat_base_w_s_idx(
-; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, i32* [[BASE:%.*]], i64 1
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, ptr [[BASE:%.*]], i64 1
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
-  %basevec1 = insertelement <2 x i32*> undef, i32* %base, i32 0
-  %basevec2 = shufflevector <2 x i32*> %basevec1, <2 x i32*> undef, <2 x i32> zeroinitializer
-  %gep = getelementptr i32, <2 x i32*> %basevec2, i64 1
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %basevec1 = insertelement <2 x ptr> undef, ptr %base, i32 0
+  %basevec2 = shufflevector <2 x ptr> %basevec1, <2 x ptr> undef, <2 x i32> zeroinitializer
+  %gep = getelementptr i32, <2 x ptr> %basevec2, i64 1
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
 
-define i32* @gep_splat_base_w_cv_idx(i32* %base) {
+define ptr @gep_splat_base_w_cv_idx(ptr %base) {
 ; CHECK-LABEL: @gep_splat_base_w_cv_idx(
-; CHECK-NEXT:    [[BASEVEC2:%.*]] = insertelement <2 x i32*> undef, i32* [[BASE:%.*]], i64 1
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x i32*> [[BASEVEC2]], <2 x i64> <i64 poison, i64 1>
-; CHECK-NEXT:    [[EE:%.*]] = extractelement <2 x i32*> [[GEP]], i64 1
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[BASEVEC2:%.*]] = insertelement <2 x ptr> undef, ptr [[BASE:%.*]], i64 1
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x ptr> [[BASEVEC2]], <2 x i64> <i64 poison, i64 1>
+; CHECK-NEXT:    [[EE:%.*]] = extractelement <2 x ptr> [[GEP]], i64 1
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
-  %basevec1 = insertelement <2 x i32*> undef, i32* %base, i32 0
-  %basevec2 = shufflevector <2 x i32*> %basevec1, <2 x i32*> undef, <2 x i32> zeroinitializer
-  %gep = getelementptr i32, <2 x i32*> %basevec2, <2 x i64> <i64 0, i64 1>
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %basevec1 = insertelement <2 x ptr> undef, ptr %base, i32 0
+  %basevec2 = shufflevector <2 x ptr> %basevec1, <2 x ptr> undef, <2 x i32> zeroinitializer
+  %gep = getelementptr i32, <2 x ptr> %basevec2, <2 x i64> <i64 0, i64 1>
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
-define i32* @gep_splat_base_w_vidx(i32* %base, <2 x i64> %idxvec) {
+define ptr @gep_splat_base_w_vidx(ptr %base, <2 x i64> %idxvec) {
 ; CHECK-LABEL: @gep_splat_base_w_vidx(
-; CHECK-NEXT:    [[BASEVEC2:%.*]] = insertelement <2 x i32*> undef, i32* [[BASE:%.*]], i64 1
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x i32*> [[BASEVEC2]], <2 x i64> [[IDXVEC:%.*]]
-; CHECK-NEXT:    [[EE:%.*]] = extractelement <2 x i32*> [[GEP]], i64 1
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[BASEVEC2:%.*]] = insertelement <2 x ptr> undef, ptr [[BASE:%.*]], i64 1
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x ptr> [[BASEVEC2]], <2 x i64> [[IDXVEC:%.*]]
+; CHECK-NEXT:    [[EE:%.*]] = extractelement <2 x ptr> [[GEP]], i64 1
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
-  %basevec1 = insertelement <2 x i32*> undef, i32* %base, i32 0
-  %basevec2 = shufflevector <2 x i32*> %basevec1, <2 x i32*> undef, <2 x i32> zeroinitializer
-  %gep = getelementptr i32, <2 x i32*> %basevec2, <2 x i64> %idxvec
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %basevec1 = insertelement <2 x ptr> undef, ptr %base, i32 0
+  %basevec2 = shufflevector <2 x ptr> %basevec1, <2 x ptr> undef, <2 x i32> zeroinitializer
+  %gep = getelementptr i32, <2 x ptr> %basevec2, <2 x i64> %idxvec
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
 
 @GLOBAL = internal global i32 zeroinitializer
 
-define i32* @gep_cvbase_w_s_idx(<2 x i32*> %base, i64 %raw_addr) {
+define ptr @gep_cvbase_w_s_idx(<2 x ptr> %base, i64 %raw_addr) {
 ; CHECK-LABEL: @gep_cvbase_w_s_idx(
-; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, i32* @GLOBAL, i64 [[RAW_ADDR:%.*]]
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, ptr @GLOBAL, i64 [[RAW_ADDR:%.*]]
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
-  %gep = getelementptr i32, <2 x i32*> <i32* @GLOBAL, i32* @GLOBAL>, i64 %raw_addr
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %gep = getelementptr i32, <2 x ptr> <ptr @GLOBAL, ptr @GLOBAL>, i64 %raw_addr
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
-define i32* @gep_cvbase_w_cv_idx(<2 x i32*> %base, i64 %raw_addr) {
+define ptr @gep_cvbase_w_cv_idx(<2 x ptr> %base, i64 %raw_addr) {
 ; CHECK-LABEL: @gep_cvbase_w_cv_idx(
-; CHECK-NEXT:    ret i32* getelementptr inbounds (i32, i32* @GLOBAL, i64 1)
+; CHECK-NEXT:    ret ptr getelementptr inbounds (i32, ptr @GLOBAL, i64 1)
 ;
-  %gep = getelementptr i32, <2 x i32*> <i32* @GLOBAL, i32* @GLOBAL>, <2 x i64> <i64 0, i64 1>
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %gep = getelementptr i32, <2 x ptr> <ptr @GLOBAL, ptr @GLOBAL>, <2 x i64> <i64 0, i64 1>
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
 
-define i32* @gep_sbase_w_cv_idx(i32* %base) {
+define ptr @gep_sbase_w_cv_idx(ptr %base) {
 ; CHECK-LABEL: @gep_sbase_w_cv_idx(
-; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, i32* [[BASE:%.*]], i64 1
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, ptr [[BASE:%.*]], i64 1
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
-  %gep = getelementptr i32, i32* %base, <2 x i64> <i64 0, i64 1>
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %gep = getelementptr i32, ptr %base, <2 x i64> <i64 0, i64 1>
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
-define i32* @gep_sbase_w_splat_idx(i32* %base, i64 %idx) {
+define ptr @gep_sbase_w_splat_idx(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @gep_sbase_w_splat_idx(
-; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, i32* [[BASE:%.*]], i64 [[IDX:%.*]]
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[EE:%.*]] = getelementptr i32, ptr [[BASE:%.*]], i64 [[IDX:%.*]]
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
   %idxvec1 = insertelement <2 x i64> undef, i64 %idx, i32 0
   %idxvec2 = shufflevector <2 x i64> %idxvec1, <2 x i64> undef, <2 x i32> zeroinitializer
-  %gep = getelementptr i32, i32* %base, <2 x i64> %idxvec2
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %gep = getelementptr i32, ptr %base, <2 x i64> %idxvec2
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
-define i32* @gep_splat_both(i32* %base, i64 %idx) {
+define ptr @gep_splat_both(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @gep_splat_both(
-; CHECK-NEXT:    [[BASEVEC2:%.*]] = insertelement <2 x i32*> undef, i32* [[BASE:%.*]], i64 1
+; CHECK-NEXT:    [[BASEVEC2:%.*]] = insertelement <2 x ptr> undef, ptr [[BASE:%.*]], i64 1
 ; CHECK-NEXT:    [[IDXVEC2:%.*]] = insertelement <2 x i64> undef, i64 [[IDX:%.*]], i64 1
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x i32*> [[BASEVEC2]], <2 x i64> [[IDXVEC2]]
-; CHECK-NEXT:    [[EE:%.*]] = extractelement <2 x i32*> [[GEP]], i64 1
-; CHECK-NEXT:    ret i32* [[EE]]
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x ptr> [[BASEVEC2]], <2 x i64> [[IDXVEC2]]
+; CHECK-NEXT:    [[EE:%.*]] = extractelement <2 x ptr> [[GEP]], i64 1
+; CHECK-NEXT:    ret ptr [[EE]]
 ;
-  %basevec1 = insertelement <2 x i32*> undef, i32* %base, i32 0
-  %basevec2 = shufflevector <2 x i32*> %basevec1, <2 x i32*> undef, <2 x i32> zeroinitializer
+  %basevec1 = insertelement <2 x ptr> undef, ptr %base, i32 0
+  %basevec2 = shufflevector <2 x ptr> %basevec1, <2 x ptr> undef, <2 x i32> zeroinitializer
   %idxvec1 = insertelement <2 x i64> undef, i64 %idx, i32 0
   %idxvec2 = shufflevector <2 x i64> %idxvec1, <2 x i64> undef, <2 x i32> zeroinitializer
-  %gep = getelementptr i32, <2 x i32*> %basevec2, <2 x i64> %idxvec2
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %gep = getelementptr i32, <2 x ptr> %basevec2, <2 x i64> %idxvec2
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
-define <2 x i32*> @gep_all_lanes_undef(i32* %base, i64 %idx) {;
+define <2 x ptr> @gep_all_lanes_undef(ptr %base, i64 %idx) {;
 ; CHECK-LABEL: @gep_all_lanes_undef(
-; CHECK-NEXT:    [[BASEVEC:%.*]] = insertelement <2 x i32*> undef, i32* [[BASE:%.*]], i64 0
+; CHECK-NEXT:    [[BASEVEC:%.*]] = insertelement <2 x ptr> undef, ptr [[BASE:%.*]], i64 0
 ; CHECK-NEXT:    [[IDXVEC:%.*]] = insertelement <2 x i64> undef, i64 [[IDX:%.*]], i64 1
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x i32*> [[BASEVEC]], <2 x i64> [[IDXVEC]]
-; CHECK-NEXT:    ret <2 x i32*> [[GEP]]
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, <2 x ptr> [[BASEVEC]], <2 x i64> [[IDXVEC]]
+; CHECK-NEXT:    ret <2 x ptr> [[GEP]]
 ;
-  %basevec = insertelement <2 x i32*> undef, i32* %base, i32 0
+  %basevec = insertelement <2 x ptr> undef, ptr %base, i32 0
   %idxvec = insertelement <2 x i64> undef, i64 %idx, i32 1
-  %gep = getelementptr i32, <2 x i32*> %basevec, <2 x i64> %idxvec
-  ret <2 x i32*> %gep
+  %gep = getelementptr i32, <2 x ptr> %basevec, <2 x i64> %idxvec
+  ret <2 x ptr> %gep
 }
 
-define i32* @gep_demanded_lane_undef(i32* %base, i64 %idx) {
+define ptr @gep_demanded_lane_undef(ptr %base, i64 %idx) {
 ; CHECK-LABEL: @gep_demanded_lane_undef(
-; CHECK-NEXT:    ret i32* undef
+; CHECK-NEXT:    ret ptr undef
 ;
-  %basevec = insertelement <2 x i32*> undef, i32* %base, i32 0
+  %basevec = insertelement <2 x ptr> undef, ptr %base, i32 0
   %idxvec = insertelement <2 x i64> undef, i64 %idx, i32 1
-  %gep = getelementptr i32, <2 x i32*> %basevec, <2 x i64> %idxvec
-  %ee = extractelement <2 x i32*> %gep, i32 1
-  ret i32* %ee
+  %gep = getelementptr i32, <2 x ptr> %basevec, <2 x i64> %idxvec
+  %ee = extractelement <2 x ptr> %gep, i32 1
+  ret ptr %ee
 }
 
 
 ;; LangRef has an odd quirk around FCAs which make it illegal to use undef
 ;; indices.
-define i32* @PR41624(<2 x { i32, i32 }*> %a) {
+define ptr @PR41624(<2 x ptr> %a) {
 ; CHECK-LABEL: @PR41624(
-; CHECK-NEXT:    [[W:%.*]] = getelementptr { i32, i32 }, <2 x { i32, i32 }*> [[A:%.*]], <2 x i64> <i64 5, i64 5>, <2 x i32> zeroinitializer
-; CHECK-NEXT:    [[R:%.*]] = extractelement <2 x i32*> [[W]], i64 0
-; CHECK-NEXT:    ret i32* [[R]]
+; CHECK-NEXT:    [[W:%.*]] = getelementptr { i32, i32 }, <2 x ptr> [[A:%.*]], <2 x i64> <i64 5, i64 5>, <2 x i32> zeroinitializer
+; CHECK-NEXT:    [[R:%.*]] = extractelement <2 x ptr> [[W]], i64 0
+; CHECK-NEXT:    ret ptr [[R]]
 ;
-  %w = getelementptr { i32, i32 }, <2 x { i32, i32 }*> %a, <2 x i64> <i64 5, i64 5>, <2 x i32> zeroinitializer
-  %r = extractelement <2 x i32*> %w, i32 0
-  ret i32* %r
+  %w = getelementptr { i32, i32 }, <2 x ptr> %a, <2 x i64> <i64 5, i64 5>, <2 x i32> zeroinitializer
+  %r = extractelement <2 x ptr> %w, i32 0
+  ret ptr %r
 }
 
 @global = external global [0 x i32], align 4
 
 ; Make sure we don't get stuck in a loop turning the zeroinitializer into
 ; <0, undef, undef, undef> and then changing it back.
-define i32* @zero_sized_type_extract(<4 x i64> %arg, i64 %arg1) {
+define ptr @zero_sized_type_extract(<4 x i64> %arg, i64 %arg1) {
 ; CHECK-LABEL: @zero_sized_type_extract(
 ; CHECK-NEXT:  bb:
-; CHECK-NEXT:    [[T:%.*]] = getelementptr inbounds [0 x i32], <4 x [0 x i32]*> <[0 x i32]* @global, [0 x i32]* poison, [0 x i32]* poison, [0 x i32]* poison>, <4 x i64> <i64 0, i64 poison, i64 poison, i64 poison>, <4 x i64> [[ARG:%.*]]
-; CHECK-NEXT:    [[T2:%.*]] = extractelement <4 x i32*> [[T]], i64 0
-; CHECK-NEXT:    ret i32* [[T2]]
+; CHECK-NEXT:    [[T:%.*]] = getelementptr inbounds [0 x i32], <4 x ptr> <ptr @global, ptr poison, ptr poison, ptr poison>, <4 x i64> <i64 0, i64 poison, i64 poison, i64 poison>, <4 x i64> [[ARG:%.*]]
+; CHECK-NEXT:    [[T2:%.*]] = extractelement <4 x ptr> [[T]], i64 0
+; CHECK-NEXT:    ret ptr [[T2]]
 ;
 bb:
-  %t = getelementptr inbounds [0 x i32], <4 x [0 x i32]*> <[0 x i32]* @global, [0 x i32]* @global, [0 x i32]* @global, [0 x i32]* @global>, <4 x i64> zeroinitializer, <4 x i64> %arg
-  %t2 = extractelement <4 x i32*> %t, i64 0
-  ret i32* %t2
+  %t = getelementptr inbounds [0 x i32], <4 x ptr> <ptr @global, ptr @global, ptr @global, ptr @global>, <4 x i64> zeroinitializer, <4 x i64> %arg
+  %t2 = extractelement <4 x ptr> %t, i64 0
+  ret ptr %t2
 }
 
 ; The non-zero elements of the result are always 'y', so the splat is unnecessary.
index 302d0525cb71160d5e4656a75bfdefdf15f91738..1abfb3b667ce838bfe0cb5e03ca19d405de098f9 100644 (file)
@@ -1,18 +1,18 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-define void @test(<4 x i32> %v, i64 *%r1, i64 *%r2) {
+define void @test(<4 x i32> %v, ptr %r1, ptr %r2) {
 ; CHECK-LABEL: @test(
 ; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x i32> [[V:%.*]], i64 0
 ; CHECK-NEXT:    [[TMP2:%.*]] = zext i32 [[TMP1]] to i64
-; CHECK-NEXT:    store i64 [[TMP2]], i64* [[R1:%.*]], align 4
-; CHECK-NEXT:    store i64 [[TMP2]], i64* [[R2:%.*]], align 4
+; CHECK-NEXT:    store i64 [[TMP2]], ptr [[R1:%.*]], align 4
+; CHECK-NEXT:    store i64 [[TMP2]], ptr [[R2:%.*]], align 4
 ; CHECK-NEXT:    ret void
 ;
   %1 = zext <4 x i32> %v to <4 x i64>
   %2 = extractelement <4 x i64> %1, i32 0
-  store i64 %2, i64 *%r1
-  store i64 %2, i64 *%r2
+  store i64 %2, ptr %r1
+  store i64 %2, ptr %r2
   ret void
 }
 
index 73f43b7d39260c213eab0875d896f510a48e646e..9fcac802378f695e5445a834b9a12a000b56fd0a 100644 (file)
@@ -1,9 +1,9 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-define void @test (float %b, <8 x float> * %p)  {
+define void @test (float %b, ptr %p)  {
 ; CHECK: extractelement
 ; CHECK: fptosi
-  %1 = load <8 x float> , <8 x float> * %p
+  %1 = load <8 x float> , ptr %p
   %2 = bitcast <8 x float> %1 to <8 x i32>
   %3 = bitcast <8 x i32> %2 to <8 x float>
   %a = fptosi <8 x float> %3 to <8 x i32>
@@ -12,7 +12,7 @@ define void @test (float %b, <8 x float> * %p)  {
   %6 = extractelement <8 x i32> %a, i32 %5
   %7 = insertelement <8 x i32> poison, i32 %6, i32 7
   %8 = sitofp <8 x i32> %7 to <8 x float>
-  store <8 x float> %8, <8 x float>* %p
+  store <8 x float> %8, ptr %p
   ret void    
 }
 
index 95cd06b546ce72ac4b6efc632bde1c00dcf12afd..32bf4da12c4977c7120b1cacc4cb2b9d68f67554 100644 (file)
@@ -1,9 +1,9 @@
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-define void @test (float %b, <8 x float> * %p)  {
+define void @test (float %b, ptr %p)  {
 ; CHECK: extractelement
 ; CHECK: fptosi
-  %1 = load <8 x float> , <8 x float> * %p
+  %1 = load <8 x float> , ptr %p
   %2 = bitcast <8 x float> %1 to <8 x i32>
   %3 = bitcast <8 x i32> %2 to <8 x float>
   %a = fptosi <8 x float> %3 to <8 x i32>
@@ -12,7 +12,7 @@ define void @test (float %b, <8 x float> * %p)  {
   %6 = extractelement <8 x i32> %a, i32 %5
   %7 = insertelement <8 x i32> undef, i32 %6, i32 7
   %8 = sitofp <8 x i32> %7 to <8 x float>
-  store <8 x float> %8, <8 x float>* %p
+  store <8 x float> %8, ptr %p
   ret void    
 }
 
index d7a302d0c60a24798f8c83d446c2609ed4e773de..40b76d140b5a1987bfb816648d2a06be42ef2c94 100644 (file)
@@ -1,16 +1,16 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-define <4 x i16*> @PR41270([4 x i16]* %x) {
+define <4 x ptr> @PR41270(ptr %x) {
 ; CHECK-LABEL: @PR41270(
-; CHECK-NEXT:    [[T3:%.*]] = getelementptr inbounds [4 x i16], [4 x i16]* [[X:%.*]], i64 0, i64 3
-; CHECK-NEXT:    [[INS2:%.*]] = insertelement <4 x i16*> poison, i16* [[T3]], i64 0
-; CHECK-NEXT:    ret <4 x i16*> [[INS2]]
+; CHECK-NEXT:    [[T3:%.*]] = getelementptr inbounds [4 x i16], ptr [[X:%.*]], i64 0, i64 3
+; CHECK-NEXT:    [[INS2:%.*]] = insertelement <4 x ptr> poison, ptr [[T3]], i64 0
+; CHECK-NEXT:    ret <4 x ptr> [[INS2]]
 ;
-  %ins = insertelement <4 x [4 x i16]*> poison, [4 x i16]* %x, i32 0
-  %splat = shufflevector <4 x [4 x i16]*> %ins, <4 x [4 x i16]*> poison, <4 x i32> zeroinitializer
-  %t2 = getelementptr inbounds [4 x i16], <4 x [4 x i16]*> %splat, i32 0, i32 3
-  %t3 = extractelement <4 x i16*> %t2, i32 3
-  %ins2 = insertelement <4 x i16*> poison, i16* %t3, i32 0
-  ret <4 x i16*> %ins2
+  %ins = insertelement <4 x ptr> poison, ptr %x, i32 0
+  %splat = shufflevector <4 x ptr> %ins, <4 x ptr> poison, <4 x i32> zeroinitializer
+  %t2 = getelementptr inbounds [4 x i16], <4 x ptr> %splat, i32 0, i32 3
+  %t3 = extractelement <4 x ptr> %t2, i32 3
+  %ins2 = insertelement <4 x ptr> poison, ptr %t3, i32 0
+  ret <4 x ptr> %ins2
 }
index b4b61d3dfe6a36e2dcec22e88c14a90815a3a501..69149720c933580c8f39cfca780d82dd03c5c28b 100644 (file)
@@ -1,16 +1,16 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
-define <4 x i16*> @PR41270([4 x i16]* %x) {
+define <4 x ptr> @PR41270(ptr %x) {
 ; CHECK-LABEL: @PR41270(
-; CHECK-NEXT:    [[T3:%.*]] = getelementptr inbounds [4 x i16], [4 x i16]* [[X:%.*]], i64 0, i64 3
-; CHECK-NEXT:    [[INS2:%.*]] = insertelement <4 x i16*> undef, i16* [[T3]], i64 0
-; CHECK-NEXT:    ret <4 x i16*> [[INS2]]
+; CHECK-NEXT:    [[T3:%.*]] = getelementptr inbounds [4 x i16], ptr [[X:%.*]], i64 0, i64 3
+; CHECK-NEXT:    [[INS2:%.*]] = insertelement <4 x ptr> undef, ptr [[T3]], i64 0
+; CHECK-NEXT:    ret <4 x ptr> [[INS2]]
 ;
-  %ins = insertelement <4 x [4 x i16]*> undef, [4 x i16]* %x, i32 0
-  %splat = shufflevector <4 x [4 x i16]*> %ins, <4 x [4 x i16]*> undef, <4 x i32> zeroinitializer
-  %t2 = getelementptr inbounds [4 x i16], <4 x [4 x i16]*> %splat, i32 0, i32 3
-  %t3 = extractelement <4 x i16*> %t2, i32 3
-  %ins2 = insertelement <4 x i16*> undef, i16* %t3, i32 0
-  ret <4 x i16*> %ins2
+  %ins = insertelement <4 x ptr> undef, ptr %x, i32 0
+  %splat = shufflevector <4 x ptr> %ins, <4 x ptr> undef, <4 x i32> zeroinitializer
+  %t2 = getelementptr inbounds [4 x i16], <4 x ptr> %splat, i32 0, i32 3
+  %t3 = extractelement <4 x ptr> %t2, i32 3
+  %ins2 = insertelement <4 x ptr> undef, ptr %t3, i32 0
+  ret <4 x ptr> %ins2
 }
index 99bff990a2c6c64a90253b8b8f412746220be13f..79c3d37cd53c3783a75d27a42b56896e1267b7b8 100644 (file)
@@ -1,7 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-define void @f(i64 %val, i32  %limit, i32 *%ptr) {
+define void @f(i64 %val, i32  %limit, ptr %ptr) {
 ; CHECK-LABEL: @f(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[TMP0:%.*]] = trunc i64 [[VAL:%.*]] to i32
@@ -11,8 +11,8 @@ define void @f(i64 %val, i32  %limit, i32 *%ptr) {
 ; CHECK-NEXT:    [[END:%.*]] = icmp ult i32 [[TMP1]], [[LIMIT:%.*]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = add i32 [[TMP1]], 10
 ; CHECK-NEXT:    [[TMP3:%.*]] = sext i32 [[TMP1]] to i64
-; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr i32, i32* [[PTR:%.*]], i64 [[TMP3]]
-; CHECK-NEXT:    store i32 [[TMP2]], i32* [[TMP4]], align 4
+; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr i32, ptr [[PTR:%.*]], i64 [[TMP3]]
+; CHECK-NEXT:    store i32 [[TMP2]], ptr [[TMP4]], align 4
 ; CHECK-NEXT:    [[TMP5]] = add i32 [[TMP1]], 16
 ; CHECK-NEXT:    br i1 [[END]], label [[LOOP]], label [[RET:%.*]]
 ; CHECK:       ret:
@@ -31,8 +31,8 @@ loop:
   %end = icmp ult i32 %elt, %limit
   %3 = add i32 10, %elt
   %4 = sext i32 %elt to i64
-  %5 = getelementptr i32, i32* %ptr, i64 %4
-  store i32 %3, i32* %5
+  %5 = getelementptr i32, ptr %ptr, i64 %4
+  store i32 %3, ptr %5
   %inc = add <16 x i32> %2, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
   br i1 %end, label %loop, label %ret
 
@@ -40,7 +40,7 @@ ret:
   ret void
 }
 
-define void @copy(i64 %val, i32  %limit, i32 *%ptr) {
+define void @copy(i64 %val, i32  %limit, ptr %ptr) {
 ; CHECK-LABEL: @copy(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[TMP0:%.*]] = trunc i64 [[VAL:%.*]] to i32
@@ -50,8 +50,8 @@ define void @copy(i64 %val, i32  %limit, i32 *%ptr) {
 ; CHECK-NEXT:    [[END:%.*]] = icmp ult i32 [[TMP1]], [[LIMIT:%.*]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = add i32 [[TMP1]], 10
 ; CHECK-NEXT:    [[TMP3:%.*]] = sext i32 [[TMP1]] to i64
-; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr i32, i32* [[PTR:%.*]], i64 [[TMP3]]
-; CHECK-NEXT:    store i32 [[TMP2]], i32* [[TMP4]], align 4
+; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr i32, ptr [[PTR:%.*]], i64 [[TMP3]]
+; CHECK-NEXT:    store i32 [[TMP2]], ptr [[TMP4]], align 4
 ; CHECK-NEXT:    [[TMP5]] = add i32 [[TMP1]], 16
 ; CHECK-NEXT:    br i1 [[END]], label [[LOOP]], label [[RET:%.*]]
 ; CHECK:       ret:
@@ -71,8 +71,8 @@ loop:
   %end = icmp ult i32 %elt, %limit
   %3 = add i32 10, %eltcopy
   %4 = sext i32 %elt to i64
-  %5 = getelementptr i32, i32* %ptr, i64 %4
-  store i32 %3, i32* %5
+  %5 = getelementptr i32, ptr %ptr, i64 %4
+  store i32 %3, ptr %5
   %inc = add <16 x i32> %2, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
   br i1 %end, label %loop, label %ret
 
@@ -80,7 +80,7 @@ ret:
   ret void
 }
 
-define void @nocopy(i64 %val, i32  %limit, i32 *%ptr) {
+define void @nocopy(i64 %val, i32  %limit, ptr %ptr) {
 ; CHECK-LABEL: @nocopy(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[TMP0:%.*]] = trunc i64 [[VAL:%.*]] to i32
@@ -95,8 +95,8 @@ define void @nocopy(i64 %val, i32  %limit, i32 *%ptr) {
 ; CHECK-NEXT:    [[END:%.*]] = icmp ult i32 [[ELT]], [[LIMIT:%.*]]
 ; CHECK-NEXT:    [[TMP5:%.*]] = add i32 [[ELTCOPY]], 10
 ; CHECK-NEXT:    [[TMP6:%.*]] = sext i32 [[ELT]] to i64
-; CHECK-NEXT:    [[TMP7:%.*]] = getelementptr i32, i32* [[PTR:%.*]], i64 [[TMP6]]
-; CHECK-NEXT:    store i32 [[TMP5]], i32* [[TMP7]], align 4
+; CHECK-NEXT:    [[TMP7:%.*]] = getelementptr i32, ptr [[PTR:%.*]], i64 [[TMP6]]
+; CHECK-NEXT:    store i32 [[TMP5]], ptr [[TMP7]], align 4
 ; CHECK-NEXT:    [[INC]] = add <16 x i32> [[TMP4]], <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
 ; CHECK-NEXT:    br i1 [[END]], label [[LOOP]], label [[RET:%.*]]
 ; CHECK:       ret:
@@ -116,8 +116,8 @@ loop:
   %end = icmp ult i32 %elt, %limit
   %3 = add i32 10, %eltcopy
   %4 = sext i32 %elt to i64
-  %5 = getelementptr i32, i32* %ptr, i64 %4
-  store i32 %3, i32* %5
+  %5 = getelementptr i32, ptr %ptr, i64 %4
+  store i32 %3, ptr %5
   %inc = add <16 x i32> %2, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
   br i1 %end, label %loop, label %ret
 
index 035df5b25bf657119f176fd0644397a051ea97b5..1bdc21724be51763aed93dc60d198ff709405b9c 100644 (file)
@@ -1,7 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
 
-define void @f(i64 %val, i32  %limit, i32 *%ptr) {
+define void @f(i64 %val, i32  %limit, ptr %ptr) {
 ; CHECK-LABEL: @f(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[TMP0:%.*]] = trunc i64 [[VAL:%.*]] to i32
@@ -11,8 +11,8 @@ define void @f(i64 %val, i32  %limit, i32 *%ptr) {
 ; CHECK-NEXT:    [[END:%.*]] = icmp ult i32 [[TMP1]], [[LIMIT:%.*]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = add i32 [[TMP1]], 10
 ; CHECK-NEXT:    [[TMP3:%.*]] = sext i32 [[TMP1]] to i64
-; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr i32, i32* [[PTR:%.*]], i64 [[TMP3]]
-; CHECK-NEXT:    store i32 [[TMP2]], i32* [[TMP4]], align 4
+; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr i32, ptr [[PTR:%.*]], i64 [[TMP3]]
+; CHECK-NEXT:    store i32 [[TMP2]], ptr [[TMP4]], align 4
 ; CHECK-NEXT:    [[TMP5]] = add i32 [[TMP1]], 16
 ; CHECK-NEXT:    br i1 [[END]], label [[LOOP]], label [[RET:%.*]]
 ; CHECK:       ret:
@@ -31,8 +31,8 @@ loop:
   %end = icmp ult i32 %elt, %limit
   %3 = add i32 10, %elt
   %4 = sext i32 %elt to i64
-  %5 = getelementptr i32, i32* %ptr, i64 %4
-  store i32 %3, i32* %5
+  %5 = getelementptr i32, ptr %ptr, i64 %4
+  store i32 %3, ptr %5
   %inc = add <16 x i32> %2, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
   br i1 %end, label %loop, label %ret
 
@@ -40,7 +40,7 @@ ret:
   ret void
 }
 
-define void @copy(i64 %val, i32  %limit, i32 *%ptr) {
+define void @copy(i64 %val, i32  %limit, ptr %ptr) {
 ; CHECK-LABEL: @copy(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[TMP0:%.*]] = trunc i64 [[VAL:%.*]] to i32
@@ -50,8 +50,8 @@ define void @copy(i64 %val, i32  %limit, i32 *%ptr) {
 ; CHECK-NEXT:    [[END:%.*]] = icmp ult i32 [[TMP1]], [[LIMIT:%.*]]
 ; CHECK-NEXT:    [[TMP2:%.*]] = add i32 [[TMP1]], 10
 ; CHECK-NEXT:    [[TMP3:%.*]] = sext i32 [[TMP1]] to i64
-; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr i32, i32* [[PTR:%.*]], i64 [[TMP3]]
-; CHECK-NEXT:    store i32 [[TMP2]], i32* [[TMP4]], align 4
+; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr i32, ptr [[PTR:%.*]], i64 [[TMP3]]
+; CHECK-NEXT:    store i32 [[TMP2]], ptr [[TMP4]], align 4
 ; CHECK-NEXT:    [[TMP5]] = add i32 [[TMP1]], 16
 ; CHECK-NEXT:    br i1 [[END]], label [[LOOP]], label [[RET:%.*]]
 ; CHECK:       ret:
@@ -71,8 +71,8 @@ loop:
   %end = icmp ult i32 %elt, %limit
   %3 = add i32 10, %eltcopy
   %4 = sext i32 %elt to i64
-  %5 = getelementptr i32, i32* %ptr, i64 %4
-  store i32 %3, i32* %5
+  %5 = getelementptr i32, ptr %ptr, i64 %4
+  store i32 %3, ptr %5
   %inc = add <16 x i32> %2, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
   br i1 %end, label %loop, label %ret
 
@@ -80,7 +80,7 @@ ret:
   ret void
 }
 
-define void @nocopy(i64 %val, i32  %limit, i32 *%ptr) {
+define void @nocopy(i64 %val, i32  %limit, ptr %ptr) {
 ; CHECK-LABEL: @nocopy(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    [[TMP0:%.*]] = trunc i64 [[VAL:%.*]] to i32
@@ -95,8 +95,8 @@ define void @nocopy(i64 %val, i32  %limit, i32 *%ptr) {
 ; CHECK-NEXT:    [[END:%.*]] = icmp ult i32 [[ELT]], [[LIMIT:%.*]]
 ; CHECK-NEXT:    [[TMP5:%.*]] = add i32 [[ELTCOPY]], 10
 ; CHECK-NEXT:    [[TMP6:%.*]] = sext i32 [[ELT]] to i64
-; CHECK-NEXT:    [[TMP7:%.*]] = getelementptr i32, i32* [[PTR:%.*]], i64 [[TMP6]]
-; CHECK-NEXT:    store i32 [[TMP5]], i32* [[TMP7]], align 4
+; CHECK-NEXT:    [[TMP7:%.*]] = getelementptr i32, ptr [[PTR:%.*]], i64 [[TMP6]]
+; CHECK-NEXT:    store i32 [[TMP5]], ptr [[TMP7]], align 4
 ; CHECK-NEXT:    [[INC]] = add <16 x i32> [[TMP4]], <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
 ; CHECK-NEXT:    br i1 [[END]], label [[LOOP]], label [[RET:%.*]]
 ; CHECK:       ret:
@@ -116,8 +116,8 @@ loop:
   %end = icmp ult i32 %elt, %limit
   %3 = add i32 10, %eltcopy
   %4 = sext i32 %elt to i64
-  %5 = getelementptr i32, i32* %ptr, i64 %4
-  store i32 %3, i32* %5
+  %5 = getelementptr i32, ptr %ptr, i64 %4
+  store i32 %3, ptr %5
   %inc = add <16 x i32> %2, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
   br i1 %end, label %loop, label %ret
 
index 00d5cffb08dd0abaa27c52a829c90c8fda8752da..c2a31b52a8b1783fc573f6ad4bef9117b4a29b06 100644 (file)
@@ -313,17 +313,17 @@ define <2 x i8> @test13c(i8 %x1, i8 %x2) {
 
 define void @test14(i16 %conv10) {
 ; CHECK-LABEL: @test14(
-; CHECK-NEXT:    store <4 x i16> <i16 poison, i16 poison, i16 poison, i16 23>, <4 x i16>* undef, align 8
+; CHECK-NEXT:    store <4 x i16> <i16 poison, i16 poison, i16 poison, i16 23>, ptr undef, align 8
 ; CHECK-NEXT:    ret void
 ;
   %t = alloca <4 x i16>, align 8
   %vecinit6 = insertelement <4 x i16> poison, i16 23, i32 3
-  store <4 x i16> %vecinit6, <4 x i16>* undef
-  %t1 = load <4 x i16>, <4 x i16>* undef
+  store <4 x i16> %vecinit6, ptr undef
+  %t1 = load <4 x i16>, ptr undef
   %vecinit11 = insertelement <4 x i16> poison, i16 %conv10, i32 3
   %div = udiv <4 x i16> %t1, %vecinit11
-  store <4 x i16> %div, <4 x i16>* %t
-  %t4 = load <4 x i16>, <4 x i16>* %t
+  store <4 x i16> %div, ptr %t
+  %t4 = load <4 x i16>, ptr %t
   %t5 = shufflevector <4 x i16> %t4, <4 x i16> poison, <2 x i32> <i32 2, i32 0>
   %cmp = icmp ule <2 x i16> %t5, undef
   %sext = sext <2 x i1> %cmp to <2 x i16>
@@ -779,21 +779,21 @@ define <4 x i32> @pr20059(<4 x i32> %p1, <4 x i32> %p2) {
 define <4 x i32> @pr20114(<4 x i32> %__mask) {
 ; CHECK-LABEL: @pr20114(
 ; CHECK-NEXT:    [[MASK01_I:%.*]] = shufflevector <4 x i32> [[__MASK:%.*]], <4 x i32> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
-; CHECK-NEXT:    [[MASKED_NEW_I_I_I:%.*]] = and <4 x i32> [[MASK01_I]], bitcast (<2 x i64> <i64 ptrtoint (<4 x i32> (<4 x i32>)* @pr20114 to i64), i64 ptrtoint (<4 x i32> (<4 x i32>)* @pr20114 to i64)> to <4 x i32>)
+; CHECK-NEXT:    [[MASKED_NEW_I_I_I:%.*]] = and <4 x i32> [[MASK01_I]], bitcast (<2 x i64> <i64 ptrtoint (ptr @pr20114 to i64), i64 ptrtoint (ptr @pr20114 to i64)> to <4 x i32>)
 ; CHECK-NEXT:    ret <4 x i32> [[MASKED_NEW_I_I_I]]
 ;
   %mask01.i = shufflevector <4 x i32> %__mask, <4 x i32> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
-  %masked_new.i.i.i = and <4 x i32> bitcast (<2 x i64> <i64 ptrtoint (<4 x i32> (<4 x i32>)* @pr20114 to i64), i64 ptrtoint (<4 x i32> (<4 x i32>)* @pr20114 to i64)> to <4 x i32>), %mask01.i
+  %masked_new.i.i.i = and <4 x i32> bitcast (<2 x i64> <i64 ptrtoint (ptr @pr20114 to i64), i64 ptrtoint (ptr @pr20114 to i64)> to <4 x i32>), %mask01.i
   ret <4 x i32> %masked_new.i.i.i
 }
 
-define <2 x i32*> @pr23113(<4 x i32*> %A) {
+define <2 x ptr> @pr23113(<4 x ptr> %A) {
 ; CHECK-LABEL: @pr23113(
-; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <4 x i32*> [[A:%.*]], <4 x i32*> poison, <2 x i32> <i32 0, i32 1>
-; CHECK-NEXT:    ret <2 x i32*> [[TMP1]]
+; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <4 x ptr> [[A:%.*]], <4 x ptr> poison, <2 x i32> <i32 0, i32 1>
+; CHECK-NEXT:    ret <2 x ptr> [[TMP1]]
 ;
-  %1 = shufflevector <4 x i32*> %A, <4 x i32*> poison, <2 x i32> <i32 0, i32 1>
-  ret <2 x i32*> %1
+  %1 = shufflevector <4 x ptr> %A, <4 x ptr> poison, <2 x i32> <i32 0, i32 1>
+  ret <2 x ptr> %1
 }
 
 ; Unused lanes in the new binop should not kill the entire op (although it may simplify anyway as shown here).
@@ -1455,17 +1455,17 @@ define <4 x double> @not_insert_subvector_shuffles_with_same_size(<2 x double> %
 ; Demanded vector elements may not be able to simplify a shuffle mask
 ; before we try to narrow it. This used to crash.
 
-define <4 x float> @insert_subvector_crash_invalid_mask_elt(<2 x float> %x, <4 x float>* %p) {
+define <4 x float> @insert_subvector_crash_invalid_mask_elt(<2 x float> %x, ptr %p) {
 ; CHECK-LABEL: @insert_subvector_crash_invalid_mask_elt(
 ; CHECK-NEXT:    [[WIDEN:%.*]] = shufflevector <2 x float> [[X:%.*]], <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
 ; CHECK-NEXT:    [[I:%.*]] = shufflevector <2 x float> [[X]], <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
-; CHECK-NEXT:    store <4 x float> [[I]], <4 x float>* [[P:%.*]], align 16
+; CHECK-NEXT:    store <4 x float> [[I]], ptr [[P:%.*]], align 16
 ; CHECK-NEXT:    ret <4 x float> [[WIDEN]]
 ;
   %widen = shufflevector <2 x float> %x, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
   %ext2 = extractelement <2 x float> %x, i32 0
   %I = insertelement <4 x float> %widen, float %ext2, i16 0
-  store <4 x float> %I, <4 x float>* %p
+  store <4 x float> %I, ptr %p
   ret <4 x float> %widen
 }
 
@@ -1780,11 +1780,11 @@ define <4 x i32> @splat_assoc_add_mul(<4 x i32> %x, <4 x i32> %y) {
 define <4 x i32> @PR46872(<4 x i32> %x) {
 ; CHECK-LABEL: @PR46872(
 ; CHECK-NEXT:    [[S:%.*]] = shufflevector <4 x i32> [[X:%.*]], <4 x i32> poison, <4 x i32> <i32 undef, i32 0, i32 1, i32 1>
-; CHECK-NEXT:    [[A:%.*]] = and <4 x i32> [[S]], bitcast (<2 x i64> <i64 ptrtoint (<4 x i32> (<4 x i32>)* @PR46872 to i64), i64 ptrtoint (<4 x i32> (<4 x i32>)* @PR46872 to i64)> to <4 x i32>)
+; CHECK-NEXT:    [[A:%.*]] = and <4 x i32> [[S]], bitcast (<2 x i64> <i64 ptrtoint (ptr @PR46872 to i64), i64 ptrtoint (ptr @PR46872 to i64)> to <4 x i32>)
 ; CHECK-NEXT:    ret <4 x i32> [[A]]
 ;
   %s = shufflevector <4 x i32> %x, <4 x i32> poison, <4 x i32> <i32 undef, i32 0, i32 1, i32 1>
-  %a = and <4 x i32> %s, bitcast (<2 x i64> <i64 ptrtoint (<4 x i32> (<4 x i32>)* @PR46872 to i64), i64 ptrtoint (<4 x i32> (<4 x i32>)* @PR46872 to i64)> to <4 x i32>)
+  %a = and <4 x i32> %s, bitcast (<2 x i64> <i64 ptrtoint (ptr @PR46872 to i64), i64 ptrtoint (ptr @PR46872 to i64)> to <4 x i32>)
   ret <4 x i32> %a
 }
 
index 0084e77787a91d9f6b6f336dd049d0c5dcc790fb..46d72bf3f27049497757658711512754e1135d30 100644 (file)
@@ -313,17 +313,17 @@ define <2 x i8> @test13c(i8 %x1, i8 %x2) {
 
 define void @test14(i16 %conv10) {
 ; CHECK-LABEL: @test14(
-; CHECK-NEXT:    store <4 x i16> <i16 undef, i16 undef, i16 undef, i16 23>, <4 x i16>* undef, align 8
+; CHECK-NEXT:    store <4 x i16> <i16 undef, i16 undef, i16 undef, i16 23>, ptr undef, align 8
 ; CHECK-NEXT:    ret void
 ;
   %t = alloca <4 x i16>, align 8
   %vecinit6 = insertelement <4 x i16> undef, i16 23, i32 3
-  store <4 x i16> %vecinit6, <4 x i16>* undef
-  %t1 = load <4 x i16>, <4 x i16>* undef
+  store <4 x i16> %vecinit6, ptr undef
+  %t1 = load <4 x i16>, ptr undef
   %vecinit11 = insertelement <4 x i16> undef, i16 %conv10, i32 3
   %div = udiv <4 x i16> %t1, %vecinit11
-  store <4 x i16> %div, <4 x i16>* %t
-  %t4 = load <4 x i16>, <4 x i16>* %t
+  store <4 x i16> %div, ptr %t
+  %t4 = load <4 x i16>, ptr %t
   %t5 = shufflevector <4 x i16> %t4, <4 x i16> undef, <2 x i32> <i32 2, i32 0>
   %cmp = icmp ule <2 x i16> %t5, undef
   %sext = sext <2 x i1> %cmp to <2 x i16>
@@ -780,21 +780,21 @@ define <4 x i32> @pr20059(<4 x i32> %p1, <4 x i32> %p2) {
 define <4 x i32> @pr20114(<4 x i32> %__mask) {
 ; CHECK-LABEL: @pr20114(
 ; CHECK-NEXT:    [[MASK01_I:%.*]] = shufflevector <4 x i32> [[__MASK:%.*]], <4 x i32> undef, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
-; CHECK-NEXT:    [[MASKED_NEW_I_I_I:%.*]] = and <4 x i32> [[MASK01_I]], bitcast (<2 x i64> <i64 ptrtoint (<4 x i32> (<4 x i32>)* @pr20114 to i64), i64 ptrtoint (<4 x i32> (<4 x i32>)* @pr20114 to i64)> to <4 x i32>)
+; CHECK-NEXT:    [[MASKED_NEW_I_I_I:%.*]] = and <4 x i32> [[MASK01_I]], bitcast (<2 x i64> <i64 ptrtoint (ptr @pr20114 to i64), i64 ptrtoint (ptr @pr20114 to i64)> to <4 x i32>)
 ; CHECK-NEXT:    ret <4 x i32> [[MASKED_NEW_I_I_I]]
 ;
   %mask01.i = shufflevector <4 x i32> %__mask, <4 x i32> undef, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
-  %masked_new.i.i.i = and <4 x i32> bitcast (<2 x i64> <i64 ptrtoint (<4 x i32> (<4 x i32>)* @pr20114 to i64), i64 ptrtoint (<4 x i32> (<4 x i32>)* @pr20114 to i64)> to <4 x i32>), %mask01.i
+  %masked_new.i.i.i = and <4 x i32> bitcast (<2 x i64> <i64 ptrtoint (ptr @pr20114 to i64), i64 ptrtoint (ptr @pr20114 to i64)> to <4 x i32>), %mask01.i
   ret <4 x i32> %masked_new.i.i.i
 }
 
-define <2 x i32*> @pr23113(<4 x i32*> %A) {
+define <2 x ptr> @pr23113(<4 x ptr> %A) {
 ; CHECK-LABEL: @pr23113(
-; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <4 x i32*> [[A:%.*]], <4 x i32*> undef, <2 x i32> <i32 0, i32 1>
-; CHECK-NEXT:    ret <2 x i32*> [[TMP1]]
+; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <4 x ptr> [[A:%.*]], <4 x ptr> undef, <2 x i32> <i32 0, i32 1>
+; CHECK-NEXT:    ret <2 x ptr> [[TMP1]]
 ;
-  %1 = shufflevector <4 x i32*> %A, <4 x i32*> undef, <2 x i32> <i32 0, i32 1>
-  ret <2 x i32*> %1
+  %1 = shufflevector <4 x ptr> %A, <4 x ptr> undef, <2 x i32> <i32 0, i32 1>
+  ret <2 x ptr> %1
 }
 
 ; Unused lanes in the new binop should not kill the entire op (although it may simplify anyway as shown here).
@@ -1456,17 +1456,17 @@ define <4 x double> @not_insert_subvector_shuffles_with_same_size(<2 x double> %
 ; Demanded vector elements may not be able to simplify a shuffle mask
 ; before we try to narrow it. This used to crash.
 
-define <4 x float> @insert_subvector_crash_invalid_mask_elt(<2 x float> %x, <4 x float>* %p) {
+define <4 x float> @insert_subvector_crash_invalid_mask_elt(<2 x float> %x, ptr %p) {
 ; CHECK-LABEL: @insert_subvector_crash_invalid_mask_elt(
 ; CHECK-NEXT:    [[WIDEN:%.*]] = shufflevector <2 x float> [[X:%.*]], <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
 ; CHECK-NEXT:    [[I:%.*]] = shufflevector <2 x float> [[X]], <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
-; CHECK-NEXT:    store <4 x float> [[I]], <4 x float>* [[P:%.*]], align 16
+; CHECK-NEXT:    store <4 x float> [[I]], ptr [[P:%.*]], align 16
 ; CHECK-NEXT:    ret <4 x float> [[WIDEN]]
 ;
   %widen = shufflevector <2 x float> %x, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
   %ext2 = extractelement <2 x float> %x, i32 0
   %I = insertelement <4 x float> %widen, float %ext2, i16 0
-  store <4 x float> %I, <4 x float>* %p
+  store <4 x float> %I, ptr %p
   ret <4 x float> %widen
 }
 
@@ -1781,11 +1781,11 @@ define <4 x i32> @splat_assoc_add_mul(<4 x i32> %x, <4 x i32> %y) {
 define <4 x i32> @PR46872(<4 x i32> %x) {
 ; CHECK-LABEL: @PR46872(
 ; CHECK-NEXT:    [[S:%.*]] = shufflevector <4 x i32> [[X:%.*]], <4 x i32> undef, <4 x i32> <i32 undef, i32 0, i32 1, i32 1>
-; CHECK-NEXT:    [[A:%.*]] = and <4 x i32> [[S]], bitcast (<2 x i64> <i64 ptrtoint (<4 x i32> (<4 x i32>)* @PR46872 to i64), i64 ptrtoint (<4 x i32> (<4 x i32>)* @PR46872 to i64)> to <4 x i32>)
+; CHECK-NEXT:    [[A:%.*]] = and <4 x i32> [[S]], bitcast (<2 x i64> <i64 ptrtoint (ptr @PR46872 to i64), i64 ptrtoint (ptr @PR46872 to i64)> to <4 x i32>)
 ; CHECK-NEXT:    ret <4 x i32> [[A]]
 ;
   %s = shufflevector <4 x i32> %x, <4 x i32> undef, <4 x i32> <i32 undef, i32 0, i32 1, i32 1>
-  %a = and <4 x i32> %s, bitcast (<2 x i64> <i64 ptrtoint (<4 x i32> (<4 x i32>)* @PR46872 to i64), i64 ptrtoint (<4 x i32> (<4 x i32>)* @PR46872 to i64)> to <4 x i32>)
+  %a = and <4 x i32> %s, bitcast (<2 x i64> <i64 ptrtoint (ptr @PR46872 to i64), i64 ptrtoint (ptr @PR46872 to i64)> to <4 x i32>)
   ret <4 x i32> %a
 }
 
index b24fe0aecf5fd4303900815a0a95045b92ddfe1f..1bd2510f84be3cae9938999e80b656ca6ded523e 100644 (file)
@@ -148,16 +148,16 @@ define <2 x i64> @test7(<4 x float> %a, <4 x float> %b) {
   ret <2 x i64> %conv
 }
 
-define void @convert(<2 x i32>* %dst.addr, <2 x i64> %src) {
+define void @convert(ptr %dst.addr, <2 x i64> %src) {
 ; CHECK-LABEL: @convert(
 ; CHECK-NEXT:    [[VAL:%.*]] = trunc <2 x i64> [[SRC:%.*]] to <2 x i32>
 ; CHECK-NEXT:    [[ADD:%.*]] = add <2 x i32> [[VAL]], <i32 1, i32 1>
-; CHECK-NEXT:    store <2 x i32> [[ADD]], <2 x i32>* [[DST_ADDR:%.*]], align 8
+; CHECK-NEXT:    store <2 x i32> [[ADD]], ptr [[DST_ADDR:%.*]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %val = trunc <2 x i64> %src to <2 x i32>
   %add = add <2 x i32> %val, <i32 1, i32 1>
-  store <2 x i32> %add, <2 x i32>* %dst.addr
+  store <2 x i32> %add, ptr %dst.addr
   ret void
 }
 
@@ -259,8 +259,8 @@ define <4 x float> @f(i32 %a) {
   %dim31 = insertelement <4 x i32> %dim30, i32 %a, i32 2
   %dim32 = insertelement <4 x i32> %dim31, i32 %a, i32 3
 
-  %offset_ptr = getelementptr <4 x float>, <4 x float>* null, i32 1
-  %offset_int = ptrtoint <4 x float>* %offset_ptr to i64
+  %offset_ptr = getelementptr <4 x float>, ptr null, i32 1
+  %offset_int = ptrtoint ptr %offset_ptr to i64
   %sizeof32 = trunc i64 %offset_int to i32
 
   %smearinsert33 = insertelement <4 x i32> poison, i32 %sizeof32, i32 0
index e76e250d11abcd66f1951a65e1da2a9fab0a8409..44016939c9d70bdae91c9ef01b30996993537e96 100644 (file)
@@ -148,16 +148,16 @@ define <2 x i64> @test7(<4 x float> %a, <4 x float> %b) {
   ret <2 x i64> %conv
 }
 
-define void @convert(<2 x i32>* %dst.addr, <2 x i64> %src) {
+define void @convert(ptr %dst.addr, <2 x i64> %src) {
 ; CHECK-LABEL: @convert(
 ; CHECK-NEXT:    [[VAL:%.*]] = trunc <2 x i64> [[SRC:%.*]] to <2 x i32>
 ; CHECK-NEXT:    [[ADD:%.*]] = add <2 x i32> [[VAL]], <i32 1, i32 1>
-; CHECK-NEXT:    store <2 x i32> [[ADD]], <2 x i32>* [[DST_ADDR:%.*]], align 8
+; CHECK-NEXT:    store <2 x i32> [[ADD]], ptr [[DST_ADDR:%.*]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %val = trunc <2 x i64> %src to <2 x i32>
   %add = add <2 x i32> %val, <i32 1, i32 1>
-  store <2 x i32> %add, <2 x i32>* %dst.addr
+  store <2 x i32> %add, ptr %dst.addr
   ret void
 }
 
@@ -259,8 +259,8 @@ define <4 x float> @f(i32 %a) {
   %dim31 = insertelement <4 x i32> %dim30, i32 %a, i32 2
   %dim32 = insertelement <4 x i32> %dim31, i32 %a, i32 3
 
-  %offset_ptr = getelementptr <4 x float>, <4 x float>* null, i32 1
-  %offset_int = ptrtoint <4 x float>* %offset_ptr to i64
+  %offset_ptr = getelementptr <4 x float>, ptr null, i32 1
+  %offset_int = ptrtoint ptr %offset_ptr to i64
   %sizeof32 = trunc i64 %offset_int to i32
 
   %smearinsert33 = insertelement <4 x i32> undef, i32 %sizeof32, i32 0
index cfa4f35dab23acae9389c558e1a2d432b3b873cd..994ecc2246bb609bf7c111409a87fb347d3f5f06 100644 (file)
@@ -6,60 +6,60 @@ target triple = "x86_64-unknown-linux-gnu"
 
 @G1 = global i8 zeroinitializer
 
-define <2 x i1> @test(<2 x i8*> %a, <2 x i8*> %b) {
+define <2 x i1> @test(<2 x ptr> %a, <2 x ptr> %b) {
 ; CHECK-LABEL: @test(
-; CHECK-NEXT:    [[C:%.*]] = icmp eq <2 x i8*> [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[C:%.*]] = icmp eq <2 x ptr> [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    ret <2 x i1> [[C]]
 ;
-  %c = icmp eq <2 x i8*> %a, %b
+  %c = icmp eq <2 x ptr> %a, %b
   ret <2 x i1> %c
 }
 
-define <2 x i1> @test2(<2 x i8*> %a) {
+define <2 x i1> @test2(<2 x ptr> %a) {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
 ;
-  %c = inttoptr <2 x i32> <i32 1, i32 2> to <2 x i8*>
-  %d = icmp ult <2 x i8*> %c, zeroinitializer
+  %c = inttoptr <2 x i32> <i32 1, i32 2> to <2 x ptr>
+  %d = icmp ult <2 x ptr> %c, zeroinitializer
   ret <2 x i1> %d
 }
 
-define <2 x i1> @test3(<2 x i8*> %a) {
+define <2 x i1> @test3(<2 x ptr> %a) {
 ; CHECK-LABEL: @test3(
 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
 ;
-  %g = getelementptr i8, <2 x i8*> %a, <2 x i32> <i32 1, i32 0>
-  %B = icmp ult <2 x i8*> %g, zeroinitializer
+  %g = getelementptr i8, <2 x ptr> %a, <2 x i32> <i32 1, i32 0>
+  %B = icmp ult <2 x ptr> %g, zeroinitializer
   ret <2 x i1> %B
 }
 
-define <1 x i1> @test4(<1 x i8*> %a) {
+define <1 x i1> @test4(<1 x ptr> %a) {
 ; CHECK-LABEL: @test4(
 ; CHECK-NEXT:    ret <1 x i1> zeroinitializer
 ;
-  %g = getelementptr i8, <1 x i8*> %a, <1 x i32> <i32 1>
-  %B = icmp ult <1 x i8*> %g, zeroinitializer
+  %g = getelementptr i8, <1 x ptr> %a, <1 x i32> <i32 1>
+  %B = icmp ult <1 x ptr> %g, zeroinitializer
   ret <1 x i1> %B
 }
 
-define <2 x i1> @test5(<2 x i8*> %a) {
+define <2 x i1> @test5(<2 x ptr> %a) {
 ; CHECK-LABEL: @test5(
 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
 ;
-  %w = getelementptr i8, <2 x i8*> %a, <2 x i32> zeroinitializer
-  %e = getelementptr i8, <2 x i8*> %w, <2 x i32> <i32 5, i32 9>
-  %g = getelementptr i8, <2 x i8*> %e, <2 x i32> <i32 1, i32 0>
-  %B = icmp ult <2 x i8*> %g, zeroinitializer
+  %w = getelementptr i8, <2 x ptr> %a, <2 x i32> zeroinitializer
+  %e = getelementptr i8, <2 x ptr> %w, <2 x i32> <i32 5, i32 9>
+  %g = getelementptr i8, <2 x ptr> %e, <2 x i32> <i32 1, i32 0>
+  %B = icmp ult <2 x ptr> %g, zeroinitializer
   ret <2 x i1> %B
 }
 
-define <2 x i32*> @test7(<2 x {i32, i32}*> %a) {
+define <2 x ptr> @test7(<2 x ptr> %a) {
 ; CHECK-LABEL: @test7(
-; CHECK-NEXT:    [[W:%.*]] = getelementptr { i32, i32 }, <2 x { i32, i32 }*> [[A:%.*]], <2 x i64> <i64 5, i64 9>, <2 x i32> zeroinitializer
-; CHECK-NEXT:    ret <2 x i32*> [[W]]
+; CHECK-NEXT:    [[W:%.*]] = getelementptr { i32, i32 }, <2 x ptr> [[A:%.*]], <2 x i64> <i64 5, i64 9>, <2 x i32> zeroinitializer
+; CHECK-NEXT:    ret <2 x ptr> [[W]]
 ;
-  %w = getelementptr {i32, i32}, <2 x {i32, i32}*> %a, <2 x i32> <i32 5, i32 9>, <2 x i32> zeroinitializer
-  ret <2 x i32*> %w
+  %w = getelementptr {i32, i32}, <2 x ptr> %a, <2 x i32> <i32 5, i32 9>, <2 x i32> zeroinitializer
+  ret <2 x ptr> %w
 }
 
 define <vscale x 2 x i1> @test8() {
@@ -68,7 +68,7 @@ define <vscale x 2 x i1> @test8() {
 ;
   %ins = insertelement <vscale x 2 x i32> poison, i32 1, i32 0
   %b = shufflevector <vscale x 2 x i32> %ins, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
-  %c = inttoptr <vscale x 2 x i32> %b to <vscale x 2 x i8*>
-  %d = icmp ult <vscale x 2 x i8*> %c, zeroinitializer
+  %c = inttoptr <vscale x 2 x i32> %b to <vscale x 2 x ptr>
+  %d = icmp ult <vscale x 2 x ptr> %c, zeroinitializer
   ret <vscale x 2 x i1> %d
 }
index b5139873eaec5a1ca8fcd32e630290501ecde091..8e1cd17836a1a4c7c74725a66c2aef4027701a0e 100644 (file)
@@ -6,60 +6,60 @@ target triple = "x86_64-unknown-linux-gnu"
 
 @G1 = global i8 zeroinitializer
 
-define <2 x i1> @test(<2 x i8*> %a, <2 x i8*> %b) {
+define <2 x i1> @test(<2 x ptr> %a, <2 x ptr> %b) {
 ; CHECK-LABEL: @test(
-; CHECK-NEXT:    [[C:%.*]] = icmp eq <2 x i8*> [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[C:%.*]] = icmp eq <2 x ptr> [[A:%.*]], [[B:%.*]]
 ; CHECK-NEXT:    ret <2 x i1> [[C]]
 ;
-  %c = icmp eq <2 x i8*> %a, %b
+  %c = icmp eq <2 x ptr> %a, %b
   ret <2 x i1> %c
 }
 
-define <2 x i1> @test2(<2 x i8*> %a) {
+define <2 x i1> @test2(<2 x ptr> %a) {
 ; CHECK-LABEL: @test2(
 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
 ;
-  %c = inttoptr <2 x i32> <i32 1, i32 2> to <2 x i8*>
-  %d = icmp ult <2 x i8*> %c, zeroinitializer
+  %c = inttoptr <2 x i32> <i32 1, i32 2> to <2 x ptr>
+  %d = icmp ult <2 x ptr> %c, zeroinitializer
   ret <2 x i1> %d
 }
 
-define <2 x i1> @test3(<2 x i8*> %a) {
+define <2 x i1> @test3(<2 x ptr> %a) {
 ; CHECK-LABEL: @test3(
 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
 ;
-  %g = getelementptr i8, <2 x i8*> %a, <2 x i32> <i32 1, i32 0>
-  %B = icmp ult <2 x i8*> %g, zeroinitializer
+  %g = getelementptr i8, <2 x ptr> %a, <2 x i32> <i32 1, i32 0>
+  %B = icmp ult <2 x ptr> %g, zeroinitializer
   ret <2 x i1> %B
 }
 
-define <1 x i1> @test4(<1 x i8*> %a) {
+define <1 x i1> @test4(<1 x ptr> %a) {
 ; CHECK-LABEL: @test4(
 ; CHECK-NEXT:    ret <1 x i1> zeroinitializer
 ;
-  %g = getelementptr i8, <1 x i8*> %a, <1 x i32> <i32 1>
-  %B = icmp ult <1 x i8*> %g, zeroinitializer
+  %g = getelementptr i8, <1 x ptr> %a, <1 x i32> <i32 1>
+  %B = icmp ult <1 x ptr> %g, zeroinitializer
   ret <1 x i1> %B
 }
 
-define <2 x i1> @test5(<2 x i8*> %a) {
+define <2 x i1> @test5(<2 x ptr> %a) {
 ; CHECK-LABEL: @test5(
 ; CHECK-NEXT:    ret <2 x i1> zeroinitializer
 ;
-  %w = getelementptr i8, <2 x i8*> %a, <2 x i32> zeroinitializer
-  %e = getelementptr i8, <2 x i8*> %w, <2 x i32> <i32 5, i32 9>
-  %g = getelementptr i8, <2 x i8*> %e, <2 x i32> <i32 1, i32 0>
-  %B = icmp ult <2 x i8*> %g, zeroinitializer
+  %w = getelementptr i8, <2 x ptr> %a, <2 x i32> zeroinitializer
+  %e = getelementptr i8, <2 x ptr> %w, <2 x i32> <i32 5, i32 9>
+  %g = getelementptr i8, <2 x ptr> %e, <2 x i32> <i32 1, i32 0>
+  %B = icmp ult <2 x ptr> %g, zeroinitializer
   ret <2 x i1> %B
 }
 
-define <2 x i32*> @test7(<2 x {i32, i32}*> %a) {
+define <2 x ptr> @test7(<2 x ptr> %a) {
 ; CHECK-LABEL: @test7(
-; CHECK-NEXT:    [[W:%.*]] = getelementptr { i32, i32 }, <2 x { i32, i32 }*> [[A:%.*]], <2 x i64> <i64 5, i64 9>, <2 x i32> zeroinitializer
-; CHECK-NEXT:    ret <2 x i32*> [[W]]
+; CHECK-NEXT:    [[W:%.*]] = getelementptr { i32, i32 }, <2 x ptr> [[A:%.*]], <2 x i64> <i64 5, i64 9>, <2 x i32> zeroinitializer
+; CHECK-NEXT:    ret <2 x ptr> [[W]]
 ;
-  %w = getelementptr {i32, i32}, <2 x {i32, i32}*> %a, <2 x i32> <i32 5, i32 9>, <2 x i32> zeroinitializer
-  ret <2 x i32*> %w
+  %w = getelementptr {i32, i32}, <2 x ptr> %a, <2 x i32> <i32 5, i32 9>, <2 x i32> zeroinitializer
+  ret <2 x ptr> %w
 }
 
 define <vscale x 2 x i1> @test8() {
@@ -68,7 +68,7 @@ define <vscale x 2 x i1> @test8() {
 ;
   %ins = insertelement <vscale x 2 x i32> undef, i32 1, i32 0
   %b = shufflevector <vscale x 2 x i32> %ins, <vscale x 2 x i32> undef, <vscale x 2 x i32> zeroinitializer
-  %c = inttoptr <vscale x 2 x i32> %b to <vscale x 2 x i8*>
-  %d = icmp ult <vscale x 2 x i8*> %c, zeroinitializer
+  %c = inttoptr <vscale x 2 x i32> %b to <vscale x 2 x ptr>
+  %d = icmp ult <vscale x 2 x ptr> %c, zeroinitializer
   ret <vscale x 2 x i1> %d
 }
index bdda3578871b079bef12858d6dd0ceeda4d0f513..cfa2f6277d8589413395ca255acf11aa313d8d09 100644 (file)
@@ -4,41 +4,41 @@
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 
-define <2 x i8*> @testa(<2 x i8*> %a) {
+define <2 x ptr> @testa(<2 x ptr> %a) {
 ; CHECK-LABEL: @testa(
-; CHECK-NEXT:    [[G:%.*]] = getelementptr i8, <2 x i8*> [[A:%.*]], <2 x i64> <i64 0, i64 1>
-; CHECK-NEXT:    ret <2 x i8*> [[G]]
+; CHECK-NEXT:    [[G:%.*]] = getelementptr i8, <2 x ptr> [[A:%.*]], <2 x i64> <i64 0, i64 1>
+; CHECK-NEXT:    ret <2 x ptr> [[G]]
 ;
-  %g = getelementptr i8, <2 x i8*> %a, <2 x i32> <i32 0, i32 1>
-  ret <2 x i8*> %g
+  %g = getelementptr i8, <2 x ptr> %a, <2 x i32> <i32 0, i32 1>
+  ret <2 x ptr> %g
 }
 
-define <8 x double*> @vgep_s_v8i64(double* %a, <8 x i64>%i) {
+define <8 x ptr> @vgep_s_v8i64(ptr %a, <8 x i64>%i) {
 ; CHECK-LABEL: @vgep_s_v8i64(
-; CHECK-NEXT:    [[VECTORGEP:%.*]] = getelementptr double, double* [[A:%.*]], <8 x i64> [[I:%.*]]
-; CHECK-NEXT:    ret <8 x double*> [[VECTORGEP]]
+; CHECK-NEXT:    [[VECTORGEP:%.*]] = getelementptr double, ptr [[A:%.*]], <8 x i64> [[I:%.*]]
+; CHECK-NEXT:    ret <8 x ptr> [[VECTORGEP]]
 ;
-  %VectorGep = getelementptr double, double* %a, <8 x i64> %i
-  ret <8 x double*> %VectorGep
+  %VectorGep = getelementptr double, ptr %a, <8 x i64> %i
+  ret <8 x ptr> %VectorGep
 }
 
-define <8 x double*> @vgep_s_v8i32(double* %a, <8 x i32>%i) {
+define <8 x ptr> @vgep_s_v8i32(ptr %a, <8 x i32>%i) {
 ; CHECK-LABEL: @vgep_s_v8i32(
 ; CHECK-NEXT:    [[TMP1:%.*]] = sext <8 x i32> [[I:%.*]] to <8 x i64>
-; CHECK-NEXT:    [[VECTORGEP:%.*]] = getelementptr double, double* [[A:%.*]], <8 x i64> [[TMP1]]
-; CHECK-NEXT:    ret <8 x double*> [[VECTORGEP]]
+; CHECK-NEXT:    [[VECTORGEP:%.*]] = getelementptr double, ptr [[A:%.*]], <8 x i64> [[TMP1]]
+; CHECK-NEXT:    ret <8 x ptr> [[VECTORGEP]]
 ;
-  %VectorGep = getelementptr double, double* %a, <8 x i32> %i
-  ret <8 x double*> %VectorGep
+  %VectorGep = getelementptr double, ptr %a, <8 x i32> %i
+  ret <8 x ptr> %VectorGep
 }
 
-define <8 x i8*> @vgep_v8iPtr_i32(<8 x i8*> %a, i32 %i) {
+define <8 x ptr> @vgep_v8iPtr_i32(<8 x ptr> %a, i32 %i) {
 ; CHECK-LABEL: @vgep_v8iPtr_i32(
 ; CHECK-NEXT:    [[TMP1:%.*]] = sext i32 [[I:%.*]] to i64
-; CHECK-NEXT:    [[VECTORGEP:%.*]] = getelementptr i8, <8 x i8*> [[A:%.*]], i64 [[TMP1]]
-; CHECK-NEXT:    ret <8 x i8*> [[VECTORGEP]]
+; CHECK-NEXT:    [[VECTORGEP:%.*]] = getelementptr i8, <8 x ptr> [[A:%.*]], i64 [[TMP1]]
+; CHECK-NEXT:    ret <8 x ptr> [[VECTORGEP]]
 ;
-  %VectorGep = getelementptr i8, <8 x i8*> %a, i32 %i
-  ret <8 x i8*> %VectorGep
+  %VectorGep = getelementptr i8, <8 x ptr> %a, i32 %i
+  ret <8 x ptr> %VectorGep
 }
 
index 123371ed4fb387f9efe7d070defd68dda5a93f5b..2adf519e9798b6d4080ec9e0809802629b8678e0 100644 (file)
@@ -8,52 +8,52 @@
 ; See llvm.org/D75644 and llvm.org/D75505
 target datalayout = "e-p:64:64-i32:32:32-i64:64:64-f32:32:32-f64:64:64"
 
-define float @float_load(i32* %addr) {
+define float @float_load(ptr %addr) {
 ; CHECK-LABEL: @float_load(
-; CHECK:         %i32 = load volatile i32, i32* %addr, align 4
+; CHECK:         %i32 = load volatile i32, ptr %addr, align 4
 ; CHECK-NEXT:    %float = bitcast i32 %i32 to float
 ; CHECK-NEXT:    ret float %float
-  %i32 = load volatile i32, i32* %addr, align 4
+  %i32 = load volatile i32, ptr %addr, align 4
   %float = bitcast i32 %i32 to float
   ret float %float
 }
 
-define i32 @i32_load(float* %addr) {
+define i32 @i32_load(ptr %addr) {
 ; CHECK-LABEL: @i32_load(
-; CHECK:         %float = load volatile float, float* %addr, align 4
+; CHECK:         %float = load volatile float, ptr %addr, align 4
 ; CHECK-NEXT:    %i32 = bitcast float %float to i32
 ; CHECK-NEXT:    ret i32 %i32
-  %float = load volatile float, float* %addr, align 4
+  %float = load volatile float, ptr %addr, align 4
   %i32 = bitcast float %float to i32
   ret i32 %i32
 }
 
-define double @double_load(i64* %addr) {
+define double @double_load(ptr %addr) {
 ; CHECK-LABEL: @double_load(
-; CHECK:         %i64 = load volatile i64, i64* %addr, align 8
+; CHECK:         %i64 = load volatile i64, ptr %addr, align 8
 ; CHECK-NEXT:    %double = bitcast i64 %i64 to double
 ; CHECK-NEXT:    ret double %double
-  %i64 = load volatile i64, i64* %addr, align 8
+  %i64 = load volatile i64, ptr %addr, align 8
   %double = bitcast i64 %i64 to double
   ret double %double
 }
 
-define i64 @i64_load(double* %addr) {
+define i64 @i64_load(ptr %addr) {
 ; CHECK-LABEL: @i64_load(
-; CHECK:         %double = load volatile double, double* %addr, align 8
+; CHECK:         %double = load volatile double, ptr %addr, align 8
 ; CHECK-NEXT:    %i64 = bitcast double %double to i64
 ; CHECK-NEXT:    ret i64 %i64
-  %double = load volatile double, double* %addr, align 8
+  %double = load volatile double, ptr %addr, align 8
   %i64 = bitcast double %double to i64
   ret i64 %i64
 }
 
-define i8* @ptr_load(i64* %addr) {
+define ptr @ptr_load(ptr %addr) {
 ; CHECK-LABEL: @ptr_load(
-; CHECK:         %i64 = load volatile i64, i64* %addr, align 8
-; CHECK-NEXT:    %ptr = inttoptr i64 %i64 to i8*
-; CHECK-NEXT:    ret i8* %ptr
-  %i64 = load volatile i64, i64* %addr, align 8
-  %ptr = inttoptr i64 %i64 to i8*
-  ret i8* %ptr
+; CHECK:         %i64 = load volatile i64, ptr %addr, align 8
+; CHECK-NEXT:    %ptr = inttoptr i64 %i64 to ptr
+; CHECK-NEXT:    ret ptr %ptr
+  %i64 = load volatile i64, ptr %addr, align 8
+  %ptr = inttoptr i64 %i64 to ptr
+  ret ptr %ptr
 }
index 5fa211ff856cc4440208a74607445c5725fb8e0b..d307bd6d25a374d93b95f4dc5aac7cfdc55df5f2 100644 (file)
@@ -6,26 +6,26 @@
 define void @self_assign_1() {
 ; CHECK-LABEL: @self_assign_1(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[TMP:%.*]] = load volatile i32, i32* @x, align 4
-; CHECK-NEXT:    store volatile i32 [[TMP]], i32* @x, align 4
+; CHECK-NEXT:    [[TMP:%.*]] = load volatile i32, ptr @x, align 4
+; CHECK-NEXT:    store volatile i32 [[TMP]], ptr @x, align 4
 ; CHECK-NEXT:    br label [[RETURN:%.*]]
 ; CHECK:       return:
 ; CHECK-NEXT:    ret void
 ;
 entry:
-  %tmp = load volatile i32, i32* @x
-  store volatile i32 %tmp, i32* @x
+  %tmp = load volatile i32, ptr @x
+  store volatile i32 %tmp, ptr @x
   br label %return
 
 return:
   ret void
 }
 
-define void @volatile_store_before_unreachable(i1 %c, i8* %p) {
+define void @volatile_store_before_unreachable(i1 %c, ptr %p) {
 ; CHECK-LABEL: @volatile_store_before_unreachable(
 ; CHECK-NEXT:    br i1 [[C:%.*]], label [[TRUE:%.*]], label [[FALSE:%.*]]
 ; CHECK:       true:
-; CHECK-NEXT:    store volatile i8 0, i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store volatile i8 0, ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    unreachable
 ; CHECK:       false:
 ; CHECK-NEXT:    ret void
@@ -33,7 +33,7 @@ define void @volatile_store_before_unreachable(i1 %c, i8* %p) {
   br i1 %c, label %true, label %false
 
 true:
-  store volatile i8 0, i8* %p
+  store volatile i8 0, ptr %p
   unreachable
 
 false:
index 8cfc7b74a77fea03d2b519b1fe0c79efc840319d..04ba16126051ba745bacfb55767926963f2d31d6 100644 (file)
@@ -6,8 +6,8 @@ define <vscale x 4 x i32> @alloca(<vscale x 4 x i32> %z) {
 ; CHECK-NEXT:    ret <vscale x 4 x i32> [[Z:%.*]]
 ;
   %a = alloca <vscale x 4 x i32>
-  store <vscale x 4 x i32> %z, <vscale x 4 x i32>* %a
-  %load = load <vscale x 4 x i32>, <vscale x 4 x i32>* %a
+  store <vscale x 4 x i32> %z, ptr %a
+  %load = load <vscale x 4 x i32>, ptr %a
   ret <vscale x 4 x i32> %load
 }
 
@@ -16,7 +16,7 @@ define void @alloca_dead_store(<vscale x 4 x i32> %z) {
 ; CHECK-NEXT:    ret void
 ;
   %a = alloca <vscale x 4 x i32>
-  store <vscale x 4 x i32> %z, <vscale x 4 x i32>* %a
+  store <vscale x 4 x i32> %z, ptr %a
   ret void
 }
 
@@ -25,13 +25,13 @@ define void @alloca_zero_byte_move_first_inst() {
 ; CHECK-LABEL: @alloca_zero_byte_move_first_inst(
 ; CHECK-NEXT:    [[B:%.*]] = alloca {}, align 8
 ; CHECK-NEXT:    [[A:%.*]] = alloca <vscale x 16 x i8>, align 16
-; CHECK-NEXT:    call void (...) @use(<vscale x 16 x i8>* nonnull [[A]])
-; CHECK-NEXT:    call void (...) @use({}* nonnull [[B]])
+; CHECK-NEXT:    call void (...) @use(ptr nonnull [[A]])
+; CHECK-NEXT:    call void (...) @use(ptr nonnull [[B]])
 ; CHECK-NEXT:    ret void
 ;
   %a = alloca <vscale x 16 x i8>
-  call void (...) @use( <vscale x 16 x i8>* %a )
+  call void (...) @use( ptr %a )
   %b = alloca {  }
-  call void (...) @use( {  }* %b )
+  call void (...) @use( ptr %b )
   ret void
 }
index 68224458ee0e7d9dfb3de0aee3f38608e6a58ed6..a7f8368c5d62c89ef103b3dcc31ce613eaae24eb 100644 (file)
@@ -10,15 +10,15 @@ define <vscale x 2 x i1> @sge(<vscale x 2 x i8> %x) {
   ret <vscale x 2 x i1> %cmp
 }
 
-define <vscale x 2 x i1> @gep_scalevector1(i32* %X) nounwind {
+define <vscale x 2 x i1> @gep_scalevector1(ptr %X) nounwind {
 ; CHECK-LABEL: @gep_scalevector1(
-; CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i32*> poison, i32* [[X:%.*]], i64 0
-; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq <vscale x 2 x i32*> [[DOTSPLATINSERT]], zeroinitializer
+; CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x ptr> poison, ptr [[X:%.*]], i64 0
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq <vscale x 2 x ptr> [[DOTSPLATINSERT]], zeroinitializer
 ; CHECK-NEXT:    [[C:%.*]] = shufflevector <vscale x 2 x i1> [[TMP1]], <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
 ; CHECK-NEXT:    ret <vscale x 2 x i1> [[C]]
 ;
-  %A = getelementptr inbounds i32, i32* %X, <vscale x 2 x i64> zeroinitializer
-  %C = icmp eq <vscale x 2 x i32*> %A, zeroinitializer
+  %A = getelementptr inbounds i32, ptr %X, <vscale x 2 x i64> zeroinitializer
+  %C = icmp eq <vscale x 2 x ptr> %A, zeroinitializer
   ret <vscale x 2 x i1> %C
 }
 
index ca9cc8839b496fbc4dc43355a1f76bee651139f3..8c97f4246c6d094bdabe282da003ad9d681dcbd5 100644 (file)
@@ -269,18 +269,17 @@ define i1 @ext_lane1_from_cmp_with_stepvec(i64 %i) {
   ret i1 %res
 }
 
-define i64* @ext_lane_from_bitcast_of_splat(i32* %v) {
+define ptr @ext_lane_from_bitcast_of_splat(ptr %v) {
 ; CHECK-LABEL: @ext_lane_from_bitcast_of_splat(
 ; CHECK-NEXT:  entry:
-; CHECK-NEXT:    [[R:%.*]] = bitcast i32* [[V:%.*]] to i64*
-; CHECK-NEXT:    ret i64* [[R]]
+; CHECK-NEXT:    ret ptr [[V:%.*]]
 ;
 entry:
-  %in = insertelement <vscale x 4 x i32*> poison, i32* %v, i32 0
-  %splat = shufflevector <vscale x 4 x i32*> %in, <vscale x 4 x i32*> poison, <vscale x 4 x i32> zeroinitializer
-  %bc = bitcast <vscale x 4 x i32*> %splat to <vscale x 4 x i64*>
-  %r = extractelement <vscale x 4 x i64*> %bc, i32 3
-  ret i64* %r
+  %in = insertelement <vscale x 4 x ptr> poison, ptr %v, i32 0
+  %splat = shufflevector <vscale x 4 x ptr> %in, <vscale x 4 x ptr> poison, <vscale x 4 x i32> zeroinitializer
+  %bc = bitcast <vscale x 4 x ptr> %splat to <vscale x 4 x ptr>
+  %r = extractelement <vscale x 4 x ptr> %bc, i32 3
+  ret ptr %r
 }
 
 declare <vscale x 2 x i64> @llvm.experimental.stepvector.nxv2i64()
index b5d06a095bc1476b3d3ee721ba792aeef6357e44..537c8cfc1f504451354c8509fcb067a542318aa9 100644 (file)
@@ -2,39 +2,36 @@
 ; RUN: opt -S -passes=instcombine < %s | FileCheck %s
 
 ; This test is used to verify we are not crashing at Assertion `CastInst::castIsValid(opc, C, Ty) && "Invalid constantexpr cast!".
-define <vscale x 2 x i8*> @gep_index_type_is_scalable(i8* %p) {
+define <vscale x 2 x ptr> @gep_index_type_is_scalable(ptr %p) {
 ; CHECK-LABEL: @gep_index_type_is_scalable(
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i8, i8* [[P:%.*]], <vscale x 2 x i64> undef
-; CHECK-NEXT:    ret <vscale x 2 x i8*> [[GEP]]
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i8, ptr [[P:%.*]], <vscale x 2 x i64> undef
+; CHECK-NEXT:    ret <vscale x 2 x ptr> [[GEP]]
 ;
-  %gep = getelementptr i8, i8* %p, <vscale x 2 x i64> undef
-  ret <vscale x 2 x i8*> %gep
+  %gep = getelementptr i8, ptr %p, <vscale x 2 x i64> undef
+  ret <vscale x 2 x ptr> %gep
 }
 
 ; This test serves to verify code changes for "GEP.getNumIndices() == 1".
-define <vscale x 4 x i32>* @gep_num_of_indices_1(<vscale x 4 x i32>* %p) {
+define ptr @gep_num_of_indices_1(ptr %p) {
 ; CHECK-LABEL: @gep_num_of_indices_1(
-; CHECK-NEXT:    [[GEP:%.*]] = getelementptr <vscale x 4 x i32>, <vscale x 4 x i32>* [[P:%.*]], i64 1
-; CHECK-NEXT:    ret <vscale x 4 x i32>* [[GEP]]
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr <vscale x 4 x i32>, ptr [[P:%.*]], i64 1
+; CHECK-NEXT:    ret ptr [[GEP]]
 ;
-  %gep = getelementptr <vscale x 4 x i32>, <vscale x 4 x i32>* %p, i64 1
-  ret <vscale x 4 x i32>* %gep
+  %gep = getelementptr <vscale x 4 x i32>, ptr %p, i64 1
+  ret ptr %gep
 }
 
 ; This test serves to verify code changes for "GEP.getNumOperands() == 2".
-define void @gep_bitcast(i8* %p) {
+define void @gep_bitcast(ptr %p) {
 ; CHECK-LABEL: @gep_bitcast(
-; CHECK-NEXT:    [[CAST:%.*]] = bitcast i8* [[P:%.*]] to <vscale x 16 x i8>*
-; CHECK-NEXT:    store <vscale x 16 x i8> zeroinitializer, <vscale x 16 x i8>* [[CAST]], align 16
-; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr <vscale x 16 x i8>, <vscale x 16 x i8>* [[CAST]], i64 1
-; CHECK-NEXT:    store <vscale x 16 x i8> zeroinitializer, <vscale x 16 x i8>* [[GEP2]], align 16
+; CHECK-NEXT:    store <vscale x 16 x i8> zeroinitializer, ptr [[P:%.*]], align 16
+; CHECK-NEXT:    [[GEP2:%.*]] = getelementptr <vscale x 16 x i8>, ptr [[P:%.*]], i64 1
+; CHECK-NEXT:    store <vscale x 16 x i8> zeroinitializer, ptr [[GEP2]], align 16
 ; CHECK-NEXT:    ret void
 ;
-  %cast = bitcast i8* %p to <vscale x 16 x i8>*
-  %gep1 = getelementptr <vscale x 16 x i8>, <vscale x 16 x i8>* %cast, i64 0
-  store <vscale x 16 x i8> zeroinitializer, <vscale x 16 x i8>* %gep1
-  %gep2 = getelementptr <vscale x 16 x i8>, <vscale x 16 x i8>* %cast, i64 1
-  store <vscale x 16 x i8> zeroinitializer, <vscale x 16 x i8>* %gep2
+  store <vscale x 16 x i8> zeroinitializer, ptr %p
+  %gep2 = getelementptr <vscale x 16 x i8>, ptr %p, i64 1
+  store <vscale x 16 x i8> zeroinitializer, ptr %gep2
   ret void
 }
 
@@ -43,13 +40,13 @@ define void @gep_bitcast(i8* %p) {
 define i32 @gep_alloca_inbounds_vscale_zero() {
 ; CHECK-LABEL: @gep_alloca_inbounds_vscale_zero(
 ; CHECK-NEXT:    [[A:%.*]] = alloca <vscale x 4 x i32>, align 16
-; CHECK-NEXT:    [[TMP:%.*]] = getelementptr inbounds <vscale x 4 x i32>, <vscale x 4 x i32>* [[A]], i64 0, i64 2
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32, i32* [[TMP]], align 8
+; CHECK-NEXT:    [[TMP:%.*]] = getelementptr inbounds <vscale x 4 x i32>, ptr [[A]], i64 0, i64 2
+; CHECK-NEXT:    [[LOAD:%.*]] = load i32, ptr [[TMP]], align 8
 ; CHECK-NEXT:    ret i32 [[LOAD]]
 ;
   %a = alloca <vscale x 4 x i32>
-  %tmp = getelementptr <vscale x 4 x i32>, <vscale x 4 x i32>* %a, i32 0, i32 2
-  %load = load i32, i32* %tmp
+  %tmp = getelementptr <vscale x 4 x i32>, ptr %a, i32 0, i32 2
+  %load = load i32, ptr %tmp
   ret i32 %load
 }
 
@@ -57,12 +54,12 @@ define i32 @gep_alloca_inbounds_vscale_zero() {
 define i32 @gep_alloca_inbounds_vscale_nonzero() {
 ; CHECK-LABEL: @gep_alloca_inbounds_vscale_nonzero(
 ; CHECK-NEXT:    [[A:%.*]] = alloca <vscale x 4 x i32>, align 16
-; CHECK-NEXT:    [[TMP:%.*]] = getelementptr <vscale x 4 x i32>, <vscale x 4 x i32>* [[A]], i64 1, i64 2
-; CHECK-NEXT:    [[LOAD:%.*]] = load i32, i32* [[TMP]], align 8
+; CHECK-NEXT:    [[TMP:%.*]] = getelementptr <vscale x 4 x i32>, ptr [[A]], i64 1, i64 2
+; CHECK-NEXT:    [[LOAD:%.*]] = load i32, ptr [[TMP]], align 8
 ; CHECK-NEXT:    ret i32 [[LOAD]]
 ;
   %a = alloca <vscale x 4 x i32>
-  %tmp = getelementptr <vscale x 4 x i32>, <vscale x 4 x i32>* %a, i32 1, i32 2
-  %load = load i32, i32* %tmp
+  %tmp = getelementptr <vscale x 4 x i32>, ptr %a, i32 1, i32 2
+  %load = load i32, ptr %tmp
   ret i32 %load
 }
index 73e762f22a381f33d37743e6dedd55040cfc0d2e..31647ff10f7acd34d89e6496a54ae5a6cbca4bd4 100644 (file)
@@ -91,12 +91,12 @@ define void @ossfuzz_27416(i32 %v) {
 ; CHECK-NEXT:    [[IN:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[V:%.*]], i64 0
 ; CHECK-NEXT:    [[SPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[IN]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
 ; CHECK-NEXT:    [[I1:%.*]] = insertelement <vscale x 4 x i32> [[SPLAT]], i32 undef, i64 128
-; CHECK-NEXT:    store <vscale x 4 x i32> [[I1]], <vscale x 4 x i32>* undef, align 16
+; CHECK-NEXT:    store <vscale x 4 x i32> [[I1]], ptr undef, align 16
 ; CHECK-NEXT:    ret void
 ;
   %in = insertelement <vscale x 4 x i32> poison, i32 %v, i32 0
   %splat = shufflevector <vscale x 4 x i32> %in, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
   %I1 = insertelement <vscale x 4 x i32> %splat, i32 undef, i8 -128
-  store <vscale x 4 x i32> %I1, <vscale x 4 x i32>* undef, align 16
+  store <vscale x 4 x i32> %I1, ptr undef, align 16
   ret void
 }
index d7386a5da4bad24a7e1b680847dcdc63cd922e88..1c00fb200b066bc64ad890c0ef6bd3840df10dd3 100644 (file)
@@ -91,12 +91,12 @@ define void @ossfuzz_27416(i32 %v) {
 ; CHECK-NEXT:    [[IN:%.*]] = insertelement <vscale x 4 x i32> undef, i32 [[V:%.*]], i64 0
 ; CHECK-NEXT:    [[SPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[IN]], <vscale x 4 x i32> undef, <vscale x 4 x i32> zeroinitializer
 ; CHECK-NEXT:    [[I1:%.*]] = insertelement <vscale x 4 x i32> [[SPLAT]], i32 undef, i64 128
-; CHECK-NEXT:    store <vscale x 4 x i32> [[I1]], <vscale x 4 x i32>* undef, align 16
+; CHECK-NEXT:    store <vscale x 4 x i32> [[I1]], ptr undef, align 16
 ; CHECK-NEXT:    ret void
 ;
   %in = insertelement <vscale x 4 x i32> undef, i32 %v, i32 0
   %splat = shufflevector <vscale x 4 x i32> %in, <vscale x 4 x i32> undef, <vscale x 4 x i32> zeroinitializer
   %I1 = insertelement <vscale x 4 x i32> %splat, i32 undef, i8 -128
-  store <vscale x 4 x i32> %I1, <vscale x 4 x i32>* undef, align 16
+  store <vscale x 4 x i32> %I1, ptr undef, align 16
   ret void
 }
index 4041ffc0fb12469b5c93199a844fd5064ab9d5be..0809d3346c60583f7cebef0dc3685bc2500f4d67 100644 (file)
@@ -1,27 +1,24 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -instcombine -S -verify | FileCheck %s
 
-define <2 x i8> @constprop_load_bitcast(<vscale x 16 x i1>* %ptr) {
+define <2 x i8> @constprop_load_bitcast(ptr %ptr) {
 ; CHECK-LABEL: @constprop_load_bitcast(
-; CHECK-NEXT:    store <vscale x 16 x i1> zeroinitializer, <vscale x 16 x i1>* [[PTR:%.*]], align 16
+; CHECK-NEXT:    store <vscale x 16 x i1> zeroinitializer, ptr [[PTR:%.*]], align 16
 ; CHECK-NEXT:    ret <2 x i8> zeroinitializer
 ;
-  store <vscale x 16 x i1> zeroinitializer, <vscale x 16 x i1>* %ptr, align 16
-  %cast_to_fixed = bitcast <vscale x 16 x i1>* %ptr to <2 x i8>*
-  %a = load <2 x i8>, <2 x i8>* %cast_to_fixed, align 16
+  store <vscale x 16 x i1> zeroinitializer, ptr %ptr, align 16
+  %a = load <2 x i8>, ptr %ptr, align 16
   ret <2 x i8> %a
 }
 
 ; vscale-sized vec not guaranteed to fill destination.
-define <8 x i8> @constprop_load_bitcast_neg(<vscale x 16 x i1>* %ptr) {
+define <8 x i8> @constprop_load_bitcast_neg(ptr %ptr) {
 ; CHECK-LABEL: @constprop_load_bitcast_neg(
-; CHECK-NEXT:    store <vscale x 16 x i1> zeroinitializer, <vscale x 16 x i1>* [[PTR:%.*]], align 16
-; CHECK-NEXT:    [[CAST_TO_FIXED:%.*]] = bitcast <vscale x 16 x i1>* [[PTR]] to <8 x i8>*
-; CHECK-NEXT:    [[A:%.*]] = load <8 x i8>, <8 x i8>* [[CAST_TO_FIXED]], align 16
+; CHECK-NEXT:    store <vscale x 16 x i1> zeroinitializer, ptr [[PTR:%.*]], align 16
+; CHECK-NEXT:    [[A:%.*]] = load <8 x i8>, ptr [[PTR]], align 16
 ; CHECK-NEXT:    ret <8 x i8> [[A]]
 ;
-  store <vscale x 16 x i1> zeroinitializer, <vscale x 16 x i1>* %ptr, align 16
-  %cast_to_fixed = bitcast <vscale x 16 x i1>* %ptr to <8 x i8>*
-  %a = load <8 x i8>, <8 x i8>* %cast_to_fixed, align 16
+  store <vscale x 16 x i1> zeroinitializer, ptr %ptr, align 16
+  %a = load <8 x i8>, ptr %ptr, align 16
   ret <8 x i8> %a
 }
index 5737f79884b9c5295e1ed29e41bf90d4af124dde..88348141879294ce196635463824a0ab0a76edc1 100644 (file)
@@ -9,12 +9,11 @@ target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
 
 @hello = constant [6 x i32] [i32 104, i32 101, i32 108, i32 108, i32 111, i32 0]
 
-declare i64 @wcslen(i32*, i32)
+declare i64 @wcslen(ptr, i32)
 
 define i64 @test_no_simplify1() {
 ; CHECK-LABEL: @test_no_simplify1(
-  %hello_p = getelementptr [6 x i32], [6 x i32]* @hello, i64 0, i64 0
-  %hello_l = call i64 @wcslen(i32* %hello_p, i32 187)
+  %hello_l = call i64 @wcslen(ptr @hello, i32 187)
 ; CHECK-NEXT: %hello_l = call i64 @wcslen
   ret i64 %hello_l
 ; CHECK-NEXT: ret i64 %hello_l
index d9abb2d843b1a6849fa78bc2c4cbcd8b22e81a51..16cb049cdad8654a7086230cfc08be606f9c71b2 100644 (file)
@@ -13,9 +13,7 @@ define i32 @foo() nounwind {
 ; CHECK: ret i32 %temp1
 
 entry:
-  %str1 = getelementptr inbounds [2 x i8], [2 x i8]* @fake_init, i64 0, i64 0
-  %str2 = getelementptr inbounds [2 x i8], [2 x i8]* @.str, i64 0, i64 0
-  %temp1 = call i32 @strcmp(i8* %str1, i8* %str2) nounwind readonly
+  %temp1 = call i32 @strcmp(ptr @fake_init, ptr @.str) nounwind readonly
   ret i32 %temp1
 }
 
@@ -24,10 +22,8 @@ define i32 @bar() nounwind {
 ; CHECK: ret i32 0
 
 entry:
-  %str1 = getelementptr inbounds [2 x i8], [2 x i8]* @real_init, i64 0, i64 0
-  %str2 = getelementptr inbounds [2 x i8], [2 x i8]* @.str, i64 0, i64 0
-  %temp1 = call i32 @strcmp(i8* %str1, i8* %str2) nounwind readonly
+  %temp1 = call i32 @strcmp(ptr @real_init, ptr @.str) nounwind readonly
   ret i32 %temp1
 }
 
-declare i32 @strcmp(i8*, i8*) nounwind readonly
+declare i32 @strcmp(ptr, ptr) nounwind readonly
index 6098e036bd0d1a15bb0b54368ed47b7cb51ed425..9b83197a8d764cba5b9786cd64e98c864ce7d95c 100644 (file)
@@ -24,12 +24,12 @@ define i8 @uaddtest1(i8 %A, i8 %B) {
   ret i8 %y
 }
 
-define i8 @uaddtest2(i8 %A, i8 %B, i1* %overflowPtr) {
+define i8 @uaddtest2(i8 %A, i8 %B, ptr %overflowPtr) {
 ; CHECK-LABEL: @uaddtest2(
 ; CHECK-NEXT:    [[AND_A:%.*]] = and i8 [[A:%.*]], 127
 ; CHECK-NEXT:    [[AND_B:%.*]] = and i8 [[B:%.*]], 127
 ; CHECK-NEXT:    [[X:%.*]] = add nuw i8 [[AND_A]], [[AND_B]]
-; CHECK-NEXT:    store i1 false, i1* [[OVERFLOWPTR:%.*]], align 1
+; CHECK-NEXT:    store i1 false, ptr [[OVERFLOWPTR:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[X]]
 ;
   %and.A = and i8 %A, 127
@@ -37,16 +37,16 @@ define i8 @uaddtest2(i8 %A, i8 %B, i1* %overflowPtr) {
   %x = call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 %and.A, i8 %and.B)
   %y = extractvalue { i8, i1 } %x, 0
   %z = extractvalue { i8, i1 } %x, 1
-  store i1 %z, i1* %overflowPtr
+  store i1 %z, ptr %overflowPtr
   ret i8 %y
 }
 
-define i8 @uaddtest3(i8 %A, i8 %B, i1* %overflowPtr) {
+define i8 @uaddtest3(i8 %A, i8 %B, ptr %overflowPtr) {
 ; CHECK-LABEL: @uaddtest3(
 ; CHECK-NEXT:    [[OR_A:%.*]] = or i8 [[A:%.*]], -128
 ; CHECK-NEXT:    [[OR_B:%.*]] = or i8 [[B:%.*]], -128
 ; CHECK-NEXT:    [[X:%.*]] = add i8 [[OR_A]], [[OR_B]]
-; CHECK-NEXT:    store i1 true, i1* [[OVERFLOWPTR:%.*]], align 1
+; CHECK-NEXT:    store i1 true, ptr [[OVERFLOWPTR:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[X]]
 ;
   %or.A = or i8 %A, -128
@@ -54,31 +54,31 @@ define i8 @uaddtest3(i8 %A, i8 %B, i1* %overflowPtr) {
   %x = call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 %or.A, i8 %or.B)
   %y = extractvalue { i8, i1 } %x, 0
   %z = extractvalue { i8, i1 } %x, 1
-  store i1 %z, i1* %overflowPtr
+  store i1 %z, ptr %overflowPtr
   ret i8 %y
 }
 
-define i8 @uaddtest4(i8 %A, i1* %overflowPtr) {
+define i8 @uaddtest4(i8 %A, ptr %overflowPtr) {
 ; CHECK-LABEL: @uaddtest4(
-; CHECK-NEXT:    store i1 false, i1* [[OVERFLOWPTR:%.*]], align 1
+; CHECK-NEXT:    store i1 false, ptr [[OVERFLOWPTR:%.*]], align 1
 ; CHECK-NEXT:    ret i8 -1
 ;
   %x = call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 undef, i8 %A)
   %y = extractvalue { i8, i1 } %x, 0
   %z = extractvalue { i8, i1 } %x, 1
-  store i1 %z, i1* %overflowPtr
+  store i1 %z, ptr %overflowPtr
   ret i8 %y
 }
 
-define i8 @uaddtest5(i8 %A, i1* %overflowPtr) {
+define i8 @uaddtest5(i8 %A, ptr %overflowPtr) {
 ; CHECK-LABEL: @uaddtest5(
-; CHECK-NEXT:    store i1 false, i1* [[OVERFLOWPTR:%.*]], align 1
+; CHECK-NEXT:    store i1 false, ptr [[OVERFLOWPTR:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[A:%.*]]
 ;
   %x = call { i8, i1 } @llvm.uadd.with.overflow.i8(i8 0, i8 %A)
   %y = extractvalue { i8, i1 } %x, 0
   %z = extractvalue { i8, i1 } %x, 1
-  store i1 %z, i1* %overflowPtr
+  store i1 %z, ptr %overflowPtr
   ret i8 %y
 }
 
@@ -214,27 +214,27 @@ define { i32, i1 } @umultest_nuw(i32 %a, i32 %b) {
   ret { i32, i1 } %x
 }
 
-define i8 @umultest1(i8 %A, i1* %overflowPtr) {
+define i8 @umultest1(i8 %A, ptr %overflowPtr) {
 ; CHECK-LABEL: @umultest1(
-; CHECK-NEXT:    store i1 false, i1* [[OVERFLOWPTR:%.*]], align 1
+; CHECK-NEXT:    store i1 false, ptr [[OVERFLOWPTR:%.*]], align 1
 ; CHECK-NEXT:    ret i8 0
 ;
   %x = call { i8, i1 } @llvm.umul.with.overflow.i8(i8 0, i8 %A)
   %y = extractvalue { i8, i1 } %x, 0
   %z = extractvalue { i8, i1 } %x, 1
-  store i1 %z, i1* %overflowPtr
+  store i1 %z, ptr %overflowPtr
   ret i8 %y
 }
 
-define i8 @umultest2(i8 %A, i1* %overflowPtr) {
+define i8 @umultest2(i8 %A, ptr %overflowPtr) {
 ; CHECK-LABEL: @umultest2(
-; CHECK-NEXT:    store i1 false, i1* [[OVERFLOWPTR:%.*]], align 1
+; CHECK-NEXT:    store i1 false, ptr [[OVERFLOWPTR:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[A:%.*]]
 ;
   %x = call { i8, i1 } @llvm.umul.with.overflow.i8(i8 1, i8 %A)
   %y = extractvalue { i8, i1 } %x, 0
   %z = extractvalue { i8, i1 } %x, 1
-  store i1 %z, i1* %overflowPtr
+  store i1 %z, ptr %overflowPtr
   ret i8 %y
 }
 
@@ -361,117 +361,117 @@ define { i32, i1 } @never_overflows_ssub_test0(i32 %a) {
   ret { i32, i1 } %x
 }
 
-define i1 @uadd_res_ult_x(i32 %x, i32 %y, i1* %p) nounwind {
+define i1 @uadd_res_ult_x(i32 %x, i32 %y, ptr %p) nounwind {
 ; CHECK-LABEL: @uadd_res_ult_x(
 ; CHECK-NEXT:    [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X:%.*]], i32 [[Y:%.*]])
 ; CHECK-NEXT:    [[B:%.*]] = extractvalue { i32, i1 } [[A]], 1
-; CHECK-NEXT:    store i1 [[B]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[B]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[D:%.*]] = extractvalue { i32, i1 } [[A]], 1
 ; CHECK-NEXT:    ret i1 [[D]]
 ;
   %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 %y)
   %b = extractvalue { i32, i1 } %a, 1
-  store i1 %b, i1* %p
+  store i1 %b, ptr %p
   %c = extractvalue { i32, i1 } %a, 0
   %d = icmp ult i32 %c, %x
   ret i1 %d
 }
 
-define i1 @uadd_res_ult_y(i32 %x, i32 %y, i1* %p) nounwind {
+define i1 @uadd_res_ult_y(i32 %x, i32 %y, ptr %p) nounwind {
 ; CHECK-LABEL: @uadd_res_ult_y(
 ; CHECK-NEXT:    [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X:%.*]], i32 [[Y:%.*]])
 ; CHECK-NEXT:    [[B:%.*]] = extractvalue { i32, i1 } [[A]], 1
-; CHECK-NEXT:    store i1 [[B]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[B]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[D:%.*]] = extractvalue { i32, i1 } [[A]], 1
 ; CHECK-NEXT:    ret i1 [[D]]
 ;
   %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 %y)
   %b = extractvalue { i32, i1 } %a, 1
-  store i1 %b, i1* %p
+  store i1 %b, ptr %p
   %c = extractvalue { i32, i1 } %a, 0
   %d = icmp ult i32 %c, %y
   ret i1 %d
 }
 
-define i1 @uadd_res_ugt_x(i32 %xx, i32 %y, i1* %p) nounwind {
+define i1 @uadd_res_ugt_x(i32 %xx, i32 %y, ptr %p) nounwind {
 ; CHECK-LABEL: @uadd_res_ugt_x(
 ; CHECK-NEXT:    [[X:%.*]] = urem i32 42, [[XX:%.*]]
 ; CHECK-NEXT:    [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X]], i32 [[Y:%.*]])
 ; CHECK-NEXT:    [[B:%.*]] = extractvalue { i32, i1 } [[A]], 1
-; CHECK-NEXT:    store i1 [[B]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[B]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[D:%.*]] = extractvalue { i32, i1 } [[A]], 1
 ; CHECK-NEXT:    ret i1 [[D]]
 ;
   %x = urem i32 42, %xx ; Thwart complexity-based canonicalization
   %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 %y)
   %b = extractvalue { i32, i1 } %a, 1
-  store i1 %b, i1* %p
+  store i1 %b, ptr %p
   %c = extractvalue { i32, i1 } %a, 0
   %d = icmp ugt i32 %x, %c
   ret i1 %d
 }
 
-define i1 @uadd_res_ugt_y(i32 %x, i32 %yy, i1* %p) nounwind {
+define i1 @uadd_res_ugt_y(i32 %x, i32 %yy, ptr %p) nounwind {
 ; CHECK-LABEL: @uadd_res_ugt_y(
 ; CHECK-NEXT:    [[Y:%.*]] = urem i32 42, [[YY:%.*]]
 ; CHECK-NEXT:    [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X:%.*]], i32 [[Y]])
 ; CHECK-NEXT:    [[B:%.*]] = extractvalue { i32, i1 } [[A]], 1
-; CHECK-NEXT:    store i1 [[B]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[B]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[D:%.*]] = extractvalue { i32, i1 } [[A]], 1
 ; CHECK-NEXT:    ret i1 [[D]]
 ;
   %y = urem i32 42, %yy ; Thwart complexity-based canonicalization
   %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 %y)
   %b = extractvalue { i32, i1 } %a, 1
-  store i1 %b, i1* %p
+  store i1 %b, ptr %p
   %c = extractvalue { i32, i1 } %a, 0
   %d = icmp ugt i32 %y, %c
   ret i1 %d
 }
 
-define i1 @uadd_res_ult_const(i32 %x, i1* %p) nounwind {
+define i1 @uadd_res_ult_const(i32 %x, ptr %p) nounwind {
 ; CHECK-LABEL: @uadd_res_ult_const(
 ; CHECK-NEXT:    [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X:%.*]], i32 42)
 ; CHECK-NEXT:    [[B:%.*]] = extractvalue { i32, i1 } [[A]], 1
-; CHECK-NEXT:    store i1 [[B]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[B]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[D:%.*]] = extractvalue { i32, i1 } [[A]], 1
 ; CHECK-NEXT:    ret i1 [[D]]
 ;
   %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 42)
   %b = extractvalue { i32, i1 } %a, 1
-  store i1 %b, i1* %p
+  store i1 %b, ptr %p
   %c = extractvalue { i32, i1 } %a, 0
   %d = icmp ult i32 %c, 42
   ret i1 %d
 }
 
-define i1 @uadd_res_ult_const_one(i32 %x, i1* %p) nounwind {
+define i1 @uadd_res_ult_const_one(i32 %x, ptr %p) nounwind {
 ; CHECK-LABEL: @uadd_res_ult_const_one(
 ; CHECK-NEXT:    [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X:%.*]], i32 1)
 ; CHECK-NEXT:    [[B:%.*]] = extractvalue { i32, i1 } [[A]], 1
-; CHECK-NEXT:    store i1 [[B]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[B]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[D:%.*]] = extractvalue { i32, i1 } [[A]], 1
 ; CHECK-NEXT:    ret i1 [[D]]
 ;
   %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 1)
   %b = extractvalue { i32, i1 } %a, 1
-  store i1 %b, i1* %p
+  store i1 %b, ptr %p
   %c = extractvalue { i32, i1 } %a, 0
   %d = icmp ult i32 %c, 1
   ret i1 %d
 }
 
-define i1 @uadd_res_ult_const_minus_one(i32 %x, i1* %p) nounwind {
+define i1 @uadd_res_ult_const_minus_one(i32 %x, ptr %p) nounwind {
 ; CHECK-LABEL: @uadd_res_ult_const_minus_one(
 ; CHECK-NEXT:    [[A:%.*]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[X:%.*]], i32 -1)
 ; CHECK-NEXT:    [[B:%.*]] = extractvalue { i32, i1 } [[A]], 1
-; CHECK-NEXT:    store i1 [[B]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[B]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[D:%.*]] = extractvalue { i32, i1 } [[A]], 1
 ; CHECK-NEXT:    ret i1 [[D]]
 ;
   %a = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %x, i32 -1)
   %b = extractvalue { i32, i1 } %a, 1
-  store i1 %b, i1* %p
+  store i1 %b, ptr %p
   %c = extractvalue { i32, i1 } %a, 0
   %d = icmp ult i32 %c, -1
   ret i1 %d
@@ -764,102 +764,102 @@ define { <4 x i8>, <4 x i1> } @neutral_umul_const_vector() nounwind {
   ret { <4 x i8>, <4 x i1> } %x
 }
 
-define i8 @smul_neg1(i8 %x, i1* %p) {
+define i8 @smul_neg1(i8 %x, ptr %p) {
 ; CHECK-LABEL: @smul_neg1(
 ; CHECK-NEXT:    [[R:%.*]] = sub i8 0, [[X:%.*]]
 ; CHECK-NEXT:    [[OV:%.*]] = icmp eq i8 [[X]], -128
-; CHECK-NEXT:    store i1 [[OV]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %m = tail call { i8, i1 } @llvm.smul.with.overflow.i8(i8 %x, i8 -1)
   %r = extractvalue { i8, i1 } %m, 0
   %ov = extractvalue { i8, i1 } %m, 1
-  store i1 %ov, i1* %p
+  store i1 %ov, ptr %p
   ret i8 %r
 }
 
-define <4 x i8> @smul_neg1_vec(<4 x i8> %x, <4 x i1>* %p) {
+define <4 x i8> @smul_neg1_vec(<4 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @smul_neg1_vec(
 ; CHECK-NEXT:    [[R:%.*]] = sub <4 x i8> zeroinitializer, [[X:%.*]]
 ; CHECK-NEXT:    [[OV:%.*]] = icmp eq <4 x i8> [[X]], <i8 -128, i8 -128, i8 -128, i8 -128>
-; CHECK-NEXT:    store <4 x i1> [[OV]], <4 x i1>* [[P:%.*]], align 1
+; CHECK-NEXT:    store <4 x i1> [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret <4 x i8> [[R]]
 ;
   %m = tail call { <4 x i8>, <4 x i1> } @llvm.smul.with.overflow.v4i8(<4 x i8> %x, <4 x i8> <i8 -1, i8 -1, i8 -1, i8 -1>)
   %r = extractvalue { <4 x i8>, <4 x i1> } %m, 0
   %ov = extractvalue { <4 x i8>, <4 x i1> } %m, 1
-  store <4 x i1> %ov, <4 x i1>* %p
+  store <4 x i1> %ov, ptr %p
   ret <4 x i8> %r
 }
 
-define <4 x i8> @smul_neg1_vec_poison(<4 x i8> %x, <4 x i1>* %p) {
+define <4 x i8> @smul_neg1_vec_poison(<4 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @smul_neg1_vec_poison(
 ; CHECK-NEXT:    [[R:%.*]] = sub <4 x i8> zeroinitializer, [[X:%.*]]
 ; CHECK-NEXT:    [[OV:%.*]] = icmp eq <4 x i8> [[X]], <i8 -128, i8 -128, i8 -128, i8 -128>
-; CHECK-NEXT:    store <4 x i1> [[OV]], <4 x i1>* [[P:%.*]], align 1
+; CHECK-NEXT:    store <4 x i1> [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret <4 x i8> [[R]]
 ;
   %m = tail call { <4 x i8>, <4 x i1> } @llvm.smul.with.overflow.v4i8(<4 x i8> %x, <4 x i8> <i8 -1, i8 -1, i8 poison, i8 -1>)
   %r = extractvalue { <4 x i8>, <4 x i1> } %m, 0
   %ov = extractvalue { <4 x i8>, <4 x i1> } %m, 1
-  store <4 x i1> %ov, <4 x i1>* %p
+  store <4 x i1> %ov, ptr %p
   ret <4 x i8> %r
 }
 
-define i8 @smul_neg2(i8 %x, i1* %p) {
+define i8 @smul_neg2(i8 %x, ptr %p) {
 ; CHECK-LABEL: @smul_neg2(
 ; CHECK-NEXT:    [[M:%.*]] = tail call { i8, i1 } @llvm.smul.with.overflow.i8(i8 [[X:%.*]], i8 -2)
 ; CHECK-NEXT:    [[R:%.*]] = extractvalue { i8, i1 } [[M]], 0
 ; CHECK-NEXT:    [[OV:%.*]] = extractvalue { i8, i1 } [[M]], 1
-; CHECK-NEXT:    store i1 [[OV]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %m = tail call { i8, i1 } @llvm.smul.with.overflow.i8(i8 %x, i8 -2)
   %r = extractvalue { i8, i1 } %m, 0
   %ov = extractvalue { i8, i1 } %m, 1
-  store i1 %ov, i1* %p
+  store i1 %ov, ptr %p
   ret i8 %r
 }
 
-define i8 @umul_neg1(i8 %x, i1* %p) {
+define i8 @umul_neg1(i8 %x, ptr %p) {
 ; CHECK-LABEL: @umul_neg1(
 ; CHECK-NEXT:    [[R:%.*]] = sub i8 0, [[X:%.*]]
 ; CHECK-NEXT:    [[OV:%.*]] = icmp ugt i8 [[X]], 1
-; CHECK-NEXT:    store i1 [[OV]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %m = tail call { i8, i1 } @llvm.umul.with.overflow.i8(i8 %x, i8 -1)
   %r = extractvalue { i8, i1 } %m, 0
   %ov = extractvalue { i8, i1 } %m, 1
-  store i1 %ov, i1* %p
+  store i1 %ov, ptr %p
   ret i8 %r
 }
 
-define <4 x i8> @umul_neg1_vec(<4 x i8> %x, <4 x i1>* %p) {
+define <4 x i8> @umul_neg1_vec(<4 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @umul_neg1_vec(
 ; CHECK-NEXT:    [[R:%.*]] = sub <4 x i8> zeroinitializer, [[X:%.*]]
 ; CHECK-NEXT:    [[OV:%.*]] = icmp ugt <4 x i8> [[X]], <i8 1, i8 1, i8 1, i8 1>
-; CHECK-NEXT:    store <4 x i1> [[OV]], <4 x i1>* [[P:%.*]], align 1
+; CHECK-NEXT:    store <4 x i1> [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret <4 x i8> [[R]]
 ;
   %m = tail call { <4 x i8>, <4 x i1> } @llvm.umul.with.overflow.v4i8(<4 x i8> %x, <4 x i8> <i8 -1, i8 -1, i8 -1, i8 -1>)
   %r = extractvalue { <4 x i8>, <4 x i1> } %m, 0
   %ov = extractvalue { <4 x i8>, <4 x i1> } %m, 1
-  store <4 x i1> %ov, <4 x i1>* %p
+  store <4 x i1> %ov, ptr %p
   ret <4 x i8> %r
 }
 
-define <4 x i8> @umul_neg1_vec_poison(<4 x i8> %x, <4 x i1>* %p) {
+define <4 x i8> @umul_neg1_vec_poison(<4 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @umul_neg1_vec_poison(
 ; CHECK-NEXT:    [[R:%.*]] = sub <4 x i8> zeroinitializer, [[X:%.*]]
 ; CHECK-NEXT:    [[OV:%.*]] = icmp ugt <4 x i8> [[X]], <i8 1, i8 1, i8 1, i8 1>
-; CHECK-NEXT:    store <4 x i1> [[OV]], <4 x i1>* [[P:%.*]], align 1
+; CHECK-NEXT:    store <4 x i1> [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret <4 x i8> [[R]]
 ;
   %m = tail call { <4 x i8>, <4 x i1> } @llvm.umul.with.overflow.v4i8(<4 x i8> %x, <4 x i8> <i8 poison, i8 -1, i8 -1, i8 poison>)
   %r = extractvalue { <4 x i8>, <4 x i1> } %m, 0
   %ov = extractvalue { <4 x i8>, <4 x i1> } %m, 1
-  store <4 x i1> %ov, <4 x i1>* %p
+  store <4 x i1> %ov, ptr %p
   ret <4 x i8> %r
 }
 
@@ -889,178 +889,178 @@ define i8 @umul_neg1_select(i8 %x) {
   ret i8 %r
 }
 
-define i8 @umul_2(i8 %x, i1* %p) {
+define i8 @umul_2(i8 %x, ptr %p) {
 ; CHECK-LABEL: @umul_2(
 ; CHECK-NEXT:    [[R:%.*]] = shl i8 [[X:%.*]], 1
 ; CHECK-NEXT:    [[OV:%.*]] = icmp slt i8 [[X]], 0
-; CHECK-NEXT:    store i1 [[OV]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %m = tail call { i8, i1 } @llvm.umul.with.overflow.i8(i8 %x, i8 2)
   %r = extractvalue { i8, i1 } %m, 0
   %ov = extractvalue { i8, i1 } %m, 1
-  store i1 %ov, i1* %p
+  store i1 %ov, ptr %p
   ret i8 %r
 }
 
-define i8 @umul_8(i8 %x, i1* %p) {
+define i8 @umul_8(i8 %x, ptr %p) {
 ; CHECK-LABEL: @umul_8(
 ; CHECK-NEXT:    [[R:%.*]] = shl i8 [[X:%.*]], 3
 ; CHECK-NEXT:    [[OV:%.*]] = icmp ugt i8 [[X]], 31
-; CHECK-NEXT:    store i1 [[OV]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %m = tail call { i8, i1 } @llvm.umul.with.overflow.i8(i8 %x, i8 8)
   %r = extractvalue { i8, i1 } %m, 0
   %ov = extractvalue { i8, i1 } %m, 1
-  store i1 %ov, i1* %p
+  store i1 %ov, ptr %p
   ret i8 %r
 }
 
-define i8 @umul_64(i8 %x, i1* %p) {
+define i8 @umul_64(i8 %x, ptr %p) {
 ; CHECK-LABEL: @umul_64(
 ; CHECK-NEXT:    [[R:%.*]] = shl i8 [[X:%.*]], 6
 ; CHECK-NEXT:    [[OV:%.*]] = icmp ugt i8 [[X]], 3
-; CHECK-NEXT:    store i1 [[OV]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %m = tail call { i8, i1 } @llvm.umul.with.overflow.i8(i8 %x, i8 64)
   %r = extractvalue { i8, i1 } %m, 0
   %ov = extractvalue { i8, i1 } %m, 1
-  store i1 %ov, i1* %p
+  store i1 %ov, ptr %p
   ret i8 %r
 }
 
-define i8 @umul_256(i8 %x, i1* %p) {
+define i8 @umul_256(i8 %x, ptr %p) {
 ; CHECK-LABEL: @umul_256(
-; CHECK-NEXT:    store i1 false, i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 false, ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret i8 0
 ;
   %m = tail call { i8, i1 } @llvm.umul.with.overflow.i8(i8 %x, i8 256)
   %r = extractvalue { i8, i1 } %m, 0
   %ov = extractvalue { i8, i1 } %m, 1
-  store i1 %ov, i1* %p
+  store i1 %ov, ptr %p
   ret i8 %r
 }
 
-define <4 x i8> @umul_4_vec_poison(<4 x i8> %x, <4 x i1>* %p) {
+define <4 x i8> @umul_4_vec_poison(<4 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @umul_4_vec_poison(
 ; CHECK-NEXT:    [[R:%.*]] = shl <4 x i8> [[X:%.*]], <i8 2, i8 2, i8 2, i8 2>
 ; CHECK-NEXT:    [[OV:%.*]] = icmp ugt <4 x i8> [[X]], <i8 63, i8 63, i8 63, i8 63>
-; CHECK-NEXT:    store <4 x i1> [[OV]], <4 x i1>* [[P:%.*]], align 1
+; CHECK-NEXT:    store <4 x i1> [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret <4 x i8> [[R]]
 ;
   %m = tail call { <4 x i8>, <4 x i1> } @llvm.umul.with.overflow.v4i8(<4 x i8> %x, <4 x i8> <i8 poison, i8 4, i8 4, i8 poison>)
   %r = extractvalue { <4 x i8>, <4 x i1> } %m, 0
   %ov = extractvalue { <4 x i8>, <4 x i1> } %m, 1
-  store <4 x i1> %ov, <4 x i1>* %p
+  store <4 x i1> %ov, ptr %p
   ret <4 x i8> %r
 }
 
 ; Negative test: not PowerOf2
 
-define i8 @umul_3(i8 %x, i1* %p) {
+define i8 @umul_3(i8 %x, ptr %p) {
 ; CHECK-LABEL: @umul_3(
 ; CHECK-NEXT:    [[M:%.*]] = tail call { i8, i1 } @llvm.umul.with.overflow.i8(i8 [[X:%.*]], i8 3)
 ; CHECK-NEXT:    [[R:%.*]] = extractvalue { i8, i1 } [[M]], 0
 ; CHECK-NEXT:    [[OV:%.*]] = extractvalue { i8, i1 } [[M]], 1
-; CHECK-NEXT:    store i1 [[OV]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %m = tail call { i8, i1 } @llvm.umul.with.overflow.i8(i8 %x, i8 3)
   %r = extractvalue { i8, i1 } %m, 0
   %ov = extractvalue { i8, i1 } %m, 1
-  store i1 %ov, i1* %p
+  store i1 %ov, ptr %p
   ret i8 %r
 }
 
-define i8 @smul_4(i8 %x, i1* %p) {
+define i8 @smul_4(i8 %x, ptr %p) {
 ; CHECK-LABEL: @smul_4(
 ; CHECK-NEXT:    [[R:%.*]] = shl i8 [[X:%.*]], 2
 ; CHECK-NEXT:    [[TMP1:%.*]] = add i8 [[X]], -32
 ; CHECK-NEXT:    [[OV:%.*]] = icmp ult i8 [[TMP1]], -64
-; CHECK-NEXT:    store i1 [[OV]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %m = tail call { i8, i1 } @llvm.smul.with.overflow.i8(i8 %x, i8 4)
   %r = extractvalue { i8, i1 } %m, 0
   %ov = extractvalue { i8, i1 } %m, 1
-  store i1 %ov, i1* %p
+  store i1 %ov, ptr %p
   ret i8 %r
 }
 
-define i8 @smul_16(i8 %x, i1* %p) {
+define i8 @smul_16(i8 %x, ptr %p) {
 ; CHECK-LABEL: @smul_16(
 ; CHECK-NEXT:    [[R:%.*]] = shl i8 [[X:%.*]], 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = add i8 [[X]], -8
 ; CHECK-NEXT:    [[OV:%.*]] = icmp ult i8 [[TMP1]], -16
-; CHECK-NEXT:    store i1 [[OV]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %m = tail call { i8, i1 } @llvm.smul.with.overflow.i8(i8 %x, i8 16)
   %r = extractvalue { i8, i1 } %m, 0
   %ov = extractvalue { i8, i1 } %m, 1
-  store i1 %ov, i1* %p
+  store i1 %ov, ptr %p
   ret i8 %r
 }
 
-define i8 @smul_32(i8 %x, i1* %p) {
+define i8 @smul_32(i8 %x, ptr %p) {
 ; CHECK-LABEL: @smul_32(
 ; CHECK-NEXT:    [[R:%.*]] = shl i8 [[X:%.*]], 5
 ; CHECK-NEXT:    [[TMP1:%.*]] = add i8 [[X]], -4
 ; CHECK-NEXT:    [[OV:%.*]] = icmp ult i8 [[TMP1]], -8
-; CHECK-NEXT:    store i1 [[OV]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %m = tail call { i8, i1 } @llvm.smul.with.overflow.i8(i8 %x, i8 32)
   %r = extractvalue { i8, i1 } %m, 0
   %ov = extractvalue { i8, i1 } %m, 1
-  store i1 %ov, i1* %p
+  store i1 %ov, ptr %p
   ret i8 %r
 }
 
-define i8 @smul_128(i8 %x, i1* %p) {
+define i8 @smul_128(i8 %x, ptr %p) {
 ; CHECK-LABEL: @smul_128(
 ; CHECK-NEXT:    [[R:%.*]] = shl i8 [[X:%.*]], 7
 ; CHECK-NEXT:    [[OV:%.*]] = icmp ugt i8 [[X]], 1
-; CHECK-NEXT:    store i1 [[OV]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %m = tail call { i8, i1 } @llvm.smul.with.overflow.i8(i8 %x, i8 128)
   %r = extractvalue { i8, i1 } %m, 0
   %ov = extractvalue { i8, i1 } %m, 1
-  store i1 %ov, i1* %p
+  store i1 %ov, ptr %p
   ret i8 %r
 }
 
-define <4 x i8> @smul_2_vec_poison(<4 x i8> %x, <4 x i1>* %p) {
+define <4 x i8> @smul_2_vec_poison(<4 x i8> %x, ptr %p) {
 ; CHECK-LABEL: @smul_2_vec_poison(
 ; CHECK-NEXT:    [[R:%.*]] = shl <4 x i8> [[X:%.*]], <i8 1, i8 1, i8 1, i8 1>
 ; CHECK-NEXT:    [[TMP1:%.*]] = add <4 x i8> [[X]], <i8 64, i8 64, i8 64, i8 64>
 ; CHECK-NEXT:    [[OV:%.*]] = icmp slt <4 x i8> [[TMP1]], zeroinitializer
-; CHECK-NEXT:    store <4 x i1> [[OV]], <4 x i1>* [[P:%.*]], align 1
+; CHECK-NEXT:    store <4 x i1> [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret <4 x i8> [[R]]
 ;
   %m = tail call { <4 x i8>, <4 x i1> } @llvm.smul.with.overflow.v4i8(<4 x i8> %x, <4 x i8> <i8 poison, i8 2, i8 2, i8 poison>)
   %r = extractvalue { <4 x i8>, <4 x i1> } %m, 0
   %ov = extractvalue { <4 x i8>, <4 x i1> } %m, 1
-  store <4 x i1> %ov, <4 x i1>* %p
+  store <4 x i1> %ov, ptr %p
   ret <4 x i8> %r
 }
 
 ; Negative test: not PowerOf2
 
-define i8 @smul_7(i8 %x, i1* %p) {
+define i8 @smul_7(i8 %x, ptr %p) {
 ; CHECK-LABEL: @smul_7(
 ; CHECK-NEXT:    [[M:%.*]] = tail call { i8, i1 } @llvm.smul.with.overflow.i8(i8 [[X:%.*]], i8 7)
 ; CHECK-NEXT:    [[R:%.*]] = extractvalue { i8, i1 } [[M]], 0
 ; CHECK-NEXT:    [[OV:%.*]] = extractvalue { i8, i1 } [[M]], 1
-; CHECK-NEXT:    store i1 [[OV]], i1* [[P:%.*]], align 1
+; CHECK-NEXT:    store i1 [[OV]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %m = tail call { i8, i1 } @llvm.smul.with.overflow.i8(i8 %x, i8 7)
   %r = extractvalue { i8, i1 } %m, 0
   %ov = extractvalue { i8, i1 } %m, 1
-  store i1 %ov, i1* %p
+  store i1 %ov, ptr %p
   ret i8 %r
 }
index 1f4c25e47edc4dff783dd352d607e032bcec8bb0..d139d97d9d3c65a0a57d496059cefd7429b91238 100644 (file)
@@ -158,15 +158,15 @@ define i1 @test14(i8 %A, i8 %B) {
   ret i1 %E
 }
 
-define i1 @xor_icmp_ptr(i8* %c, i8* %d) {
+define i1 @xor_icmp_ptr(ptr %c, ptr %d) {
 ; CHECK-LABEL: @xor_icmp_ptr(
-; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8* [[C:%.*]], null
-; CHECK-NEXT:    [[CMP1:%.*]] = icmp slt i8* [[D:%.*]], null
+; CHECK-NEXT:    [[CMP:%.*]] = icmp slt ptr [[C:%.*]], null
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp slt ptr [[D:%.*]], null
 ; CHECK-NEXT:    [[XOR:%.*]] = xor i1 [[CMP]], [[CMP1]]
 ; CHECK-NEXT:    ret i1 [[XOR]]
 ;
-  %cmp = icmp slt i8* %c, null
-  %cmp1 = icmp slt i8* %d, null
+  %cmp = icmp slt ptr %c, null
+  %cmp1 = icmp slt ptr %d, null
   %xor = xor i1 %cmp, %cmp1
   ret i1 %xor
 }
index 3f47ea355c93ed3afb8c15e7a462af00f2b83284..b2ba3100ae544896250fd15868a138d72639258f 100644 (file)
@@ -5,11 +5,11 @@
 ; uses, so we don't consider it, even though some cases are freely invertible.
 
 ; %cond0 is extra-used in select, which is freely invertible.
-define i1 @v0_select_of_consts(i32 %X, i32* %selected) {
+define i1 @v0_select_of_consts(i32 %X, ptr %selected) {
 ; CHECK-LABEL: @v0_select_of_consts(
 ; CHECK-NEXT:    [[COND0_INV:%.*]] = icmp sgt i32 [[X:%.*]], 32767
 ; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[COND0_INV]], i32 32767, i32 -32768
-; CHECK-NEXT:    store i32 [[SELECT]], i32* [[SELECTED:%.*]], align 4
+; CHECK-NEXT:    store i32 [[SELECT]], ptr [[SELECTED:%.*]], align 4
 ; CHECK-NEXT:    [[X_OFF:%.*]] = add i32 [[X]], 32767
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult i32 [[X_OFF]], 65535
 ; CHECK-NEXT:    ret i1 [[TMP1]]
@@ -17,15 +17,15 @@ define i1 @v0_select_of_consts(i32 %X, i32* %selected) {
   %cond0 = icmp sgt i32 %X, 32767
   %cond1 = icmp sgt i32 %X, -32768
   %select = select i1 %cond0, i32 32767, i32 -32768
-  store i32 %select, i32* %selected
+  store i32 %select, ptr %selected
   %res = xor i1 %cond0, %cond1
   ret i1 %res
 }
-define i1 @v1_select_of_var_and_const(i32 %X, i32 %Y, i32* %selected) {
+define i1 @v1_select_of_var_and_const(i32 %X, i32 %Y, ptr %selected) {
 ; CHECK-LABEL: @v1_select_of_var_and_const(
 ; CHECK-NEXT:    [[COND0:%.*]] = icmp slt i32 [[X:%.*]], 32768
 ; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[COND0]], i32 -32768, i32 [[Y:%.*]]
-; CHECK-NEXT:    store i32 [[SELECT]], i32* [[SELECTED:%.*]], align 4
+; CHECK-NEXT:    store i32 [[SELECT]], ptr [[SELECTED:%.*]], align 4
 ; CHECK-NEXT:    [[X_OFF:%.*]] = add i32 [[X]], 32767
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult i32 [[X_OFF]], 65535
 ; CHECK-NEXT:    ret i1 [[TMP1]]
@@ -33,15 +33,15 @@ define i1 @v1_select_of_var_and_const(i32 %X, i32 %Y, i32* %selected) {
   %cond0 = icmp sgt i32 %X, 32767
   %cond1 = icmp sgt i32 %X, -32768
   %select = select i1 %cond0, i32 %Y, i32 -32768
-  store i32 %select, i32* %selected
+  store i32 %select, ptr %selected
   %res = xor i1 %cond0, %cond1
   ret i1 %res
 }
-define i1 @v2_select_of_const_and_var(i32 %X, i32 %Y, i32* %selected) {
+define i1 @v2_select_of_const_and_var(i32 %X, i32 %Y, ptr %selected) {
 ; CHECK-LABEL: @v2_select_of_const_and_var(
 ; CHECK-NEXT:    [[COND0_INV:%.*]] = icmp sgt i32 [[X:%.*]], 32767
 ; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[COND0_INV]], i32 32767, i32 [[Y:%.*]]
-; CHECK-NEXT:    store i32 [[SELECT]], i32* [[SELECTED:%.*]], align 4
+; CHECK-NEXT:    store i32 [[SELECT]], ptr [[SELECTED:%.*]], align 4
 ; CHECK-NEXT:    [[X_OFF:%.*]] = add i32 [[X]], 32767
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult i32 [[X_OFF]], 65535
 ; CHECK-NEXT:    ret i1 [[TMP1]]
@@ -49,22 +49,22 @@ define i1 @v2_select_of_const_and_var(i32 %X, i32 %Y, i32* %selected) {
   %cond0 = icmp sgt i32 %X, 32767
   %cond1 = icmp sgt i32 %X, -32768
   %select = select i1 %cond0, i32 32767, i32 %Y
-  store i32 %select, i32* %selected
+  store i32 %select, ptr %selected
   %res = xor i1 %cond0, %cond1
   ret i1 %res
 }
 
 ; Branch is also freely invertible
-define i1 @v3_branch(i32 %X, i32* %dst0, i32* %dst1) {
+define i1 @v3_branch(i32 %X, ptr %dst0, ptr %dst1) {
 ; CHECK-LABEL: @v3_branch(
 ; CHECK-NEXT:  begin:
 ; CHECK-NEXT:    [[COND0:%.*]] = icmp slt i32 [[X:%.*]], 32768
 ; CHECK-NEXT:    br i1 [[COND0]], label [[BB1:%.*]], label [[BB0:%.*]]
 ; CHECK:       bb0:
-; CHECK-NEXT:    store i32 0, i32* [[DST0:%.*]], align 4
+; CHECK-NEXT:    store i32 0, ptr [[DST0:%.*]], align 4
 ; CHECK-NEXT:    br label [[END:%.*]]
 ; CHECK:       bb1:
-; CHECK-NEXT:    store i32 0, i32* [[DST1:%.*]], align 4
+; CHECK-NEXT:    store i32 0, ptr [[DST1:%.*]], align 4
 ; CHECK-NEXT:    br label [[END]]
 ; CHECK:       end:
 ; CHECK-NEXT:    [[X_OFF:%.*]] = add i32 [[X]], 32767
@@ -76,10 +76,10 @@ begin:
   %cond1 = icmp sgt i32 %X, -32768
   br i1 %cond0, label %bb0, label %bb1
 bb0:
-  store i32 0, i32* %dst0
+  store i32 0, ptr %dst0
   br label %end
 bb1:
-  store i32 0, i32* %dst1
+  store i32 0, ptr %dst1
   br label %end
 end:
   %res = xor i1 %cond0, %cond1
@@ -87,17 +87,17 @@ end:
 }
 
 ; Can invert 'not'.
-define i1 @v4_not_store(i32 %X, i1* %not_cond) {
+define i1 @v4_not_store(i32 %X, ptr %not_cond) {
 ; CHECK-LABEL: @v4_not_store(
 ; CHECK-NEXT:    [[COND0:%.*]] = icmp slt i32 [[X:%.*]], 32768
-; CHECK-NEXT:    store i1 [[COND0]], i1* [[NOT_COND:%.*]], align 1
+; CHECK-NEXT:    store i1 [[COND0]], ptr [[NOT_COND:%.*]], align 1
 ; CHECK-NEXT:    [[X_OFF:%.*]] = add i32 [[X]], 32767
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult i32 [[X_OFF]], 65535
 ; CHECK-NEXT:    ret i1 [[TMP1]]
 ;
   %cond0 = icmp sgt i32 %X, 32767
   %not_cond0 = xor i1 %cond0, -1
-  store i1 %not_cond0, i1* %not_cond
+  store i1 %not_cond0, ptr %not_cond
   %cond1 = icmp sgt i32 %X, -32768
   %select = select i1 %cond0, i32 32767, i32 -32768
   %res = xor i1 %cond0, %cond1
@@ -105,12 +105,12 @@ define i1 @v4_not_store(i32 %X, i1* %not_cond) {
 }
 
 ; All extra uses are invertible.
-define i1 @v5_select_and_not(i32 %X, i32 %Y, i32* %selected, i1* %not_cond) {
+define i1 @v5_select_and_not(i32 %X, i32 %Y, ptr %selected, ptr %not_cond) {
 ; CHECK-LABEL: @v5_select_and_not(
 ; CHECK-NEXT:    [[COND0:%.*]] = icmp slt i32 [[X:%.*]], 32768
 ; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[COND0]], i32 [[Y:%.*]], i32 32767
-; CHECK-NEXT:    store i1 [[COND0]], i1* [[NOT_COND:%.*]], align 1
-; CHECK-NEXT:    store i32 [[SELECT]], i32* [[SELECTED:%.*]], align 4
+; CHECK-NEXT:    store i1 [[COND0]], ptr [[NOT_COND:%.*]], align 1
+; CHECK-NEXT:    store i32 [[SELECT]], ptr [[SELECTED:%.*]], align 4
 ; CHECK-NEXT:    [[X_OFF:%.*]] = add i32 [[X]], 32767
 ; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult i32 [[X_OFF]], 65535
 ; CHECK-NEXT:    ret i1 [[TMP1]]
@@ -119,43 +119,43 @@ define i1 @v5_select_and_not(i32 %X, i32 %Y, i32* %selected, i1* %not_cond) {
   %cond1 = icmp sgt i32 %X, -32768
   %select = select i1 %cond0, i32 32767, i32 %Y
   %not_cond0 = xor i1 %cond0, -1
-  store i1 %not_cond0, i1* %not_cond
-  store i32 %select, i32* %selected
+  store i1 %not_cond0, ptr %not_cond
+  store i32 %select, ptr %selected
   %res = xor i1 %cond0, %cond1
   ret i1 %res
 }
 
 ; Not all extra uses are invertible.
-define i1 @n6_select_and_not(i32 %X, i32 %Y, i32* %selected, i1* %not_cond) {
+define i1 @n6_select_and_not(i32 %X, i32 %Y, ptr %selected, ptr %not_cond) {
 ; CHECK-LABEL: @n6_select_and_not(
 ; CHECK-NEXT:    [[COND0:%.*]] = icmp sgt i32 [[X:%.*]], 32767
 ; CHECK-NEXT:    [[COND1:%.*]] = icmp sgt i32 [[X]], -32768
 ; CHECK-NEXT:    [[SELECT:%.*]] = select i1 [[COND0]], i32 32767, i32 [[Y:%.*]]
-; CHECK-NEXT:    store i1 [[COND0]], i1* [[NOT_COND:%.*]], align 1
-; CHECK-NEXT:    store i32 [[SELECT]], i32* [[SELECTED:%.*]], align 4
+; CHECK-NEXT:    store i1 [[COND0]], ptr [[NOT_COND:%.*]], align 1
+; CHECK-NEXT:    store i32 [[SELECT]], ptr [[SELECTED:%.*]], align 4
 ; CHECK-NEXT:    [[RES:%.*]] = xor i1 [[COND0]], [[COND1]]
 ; CHECK-NEXT:    ret i1 [[RES]]
 ;
   %cond0 = icmp sgt i32 %X, 32767
   %cond1 = icmp sgt i32 %X, -32768
   %select = select i1 %cond0, i32 32767, i32 %Y
-  store i1 %cond0, i1* %not_cond
-  store i32 %select, i32* %selected
+  store i1 %cond0, ptr %not_cond
+  store i32 %select, ptr %selected
   %res = xor i1 %cond0, %cond1
   ret i1 %res
 }
 
 ; Not freely invertible, would require extra 'not' instruction.
-define i1 @n7_store(i32 %X, i1* %cond) {
+define i1 @n7_store(i32 %X, ptr %cond) {
 ; CHECK-LABEL: @n7_store(
 ; CHECK-NEXT:    [[COND0:%.*]] = icmp sgt i32 [[X:%.*]], 32767
-; CHECK-NEXT:    store i1 [[COND0]], i1* [[COND:%.*]], align 1
+; CHECK-NEXT:    store i1 [[COND0]], ptr [[COND:%.*]], align 1
 ; CHECK-NEXT:    [[COND1:%.*]] = icmp sgt i32 [[X]], -32768
 ; CHECK-NEXT:    [[RES:%.*]] = xor i1 [[COND0]], [[COND1]]
 ; CHECK-NEXT:    ret i1 [[RES]]
 ;
   %cond0 = icmp sgt i32 %X, 32767
-  store i1 %cond0, i1* %cond
+  store i1 %cond0, ptr %cond
   %cond1 = icmp sgt i32 %X, -32768
   %select = select i1 %cond0, i32 32767, i32 -32768
   %res = xor i1 %cond0, %cond1
index 71690d2eae7e944f6ebcfdd08d2dbfb2c466bcea..a19004f97fbac45275904588979a112a0e27b038 100644 (file)
@@ -133,31 +133,31 @@ define <2 x i4> @t10(<2 x i4> %x) {
 define i4 @t11(i4 %x) {
 ; CHECK-LABEL: @t11(
 ; CHECK-NEXT:    [[I0:%.*]] = or i4 [[X:%.*]], -4
-; CHECK-NEXT:    [[I1:%.*]] = xor i4 [[I0]], ptrtoint (i32* @G2 to i4)
+; CHECK-NEXT:    [[I1:%.*]] = xor i4 [[I0]], ptrtoint (ptr @G2 to i4)
 ; CHECK-NEXT:    ret i4 [[I1]]
 ;
   %i0 = or i4 %x, 12
-  %i1 = xor i4 %i0, ptrtoint (i32* @G2 to i4)
+  %i1 = xor i4 %i0, ptrtoint (ptr @G2 to i4)
   ret i4 %i1
 }
 define i4 @t12(i4 %x) {
 ; CHECK-LABEL: @t12(
-; CHECK-NEXT:    [[I0:%.*]] = or i4 [[X:%.*]], ptrtoint (i32* @G to i4)
+; CHECK-NEXT:    [[I0:%.*]] = or i4 [[X:%.*]], ptrtoint (ptr @G to i4)
 ; CHECK-NEXT:    [[I1:%.*]] = xor i4 [[I0]], -6
 ; CHECK-NEXT:    ret i4 [[I1]]
 ;
-  %i0 = or i4 %x, ptrtoint (i32* @G to i4)
+  %i0 = or i4 %x, ptrtoint (ptr @G to i4)
   %i1 = xor i4 %i0, 10
   ret i4 %i1
 }
 define i4 @t13(i4 %x) {
 ; CHECK-LABEL: @t13(
-; CHECK-NEXT:    [[I0:%.*]] = or i4 [[X:%.*]], ptrtoint (i32* @G to i4)
-; CHECK-NEXT:    [[I1:%.*]] = xor i4 [[I0]], ptrtoint (i32* @G2 to i4)
+; CHECK-NEXT:    [[I0:%.*]] = or i4 [[X:%.*]], ptrtoint (ptr @G to i4)
+; CHECK-NEXT:    [[I1:%.*]] = xor i4 [[I0]], ptrtoint (ptr @G2 to i4)
 ; CHECK-NEXT:    ret i4 [[I1]]
 ;
-  %i0 = or i4 %x, ptrtoint (i32* @G to i4)
-  %i1 = xor i4 %i0, ptrtoint (i32* @G2 to i4)
+  %i0 = or i4 %x, ptrtoint (ptr @G to i4)
+  %i1 = xor i4 %i0, ptrtoint (ptr @G2 to i4)
   ret i4 %i1
 }
 
index 32807bff680873c57f282c126594d0c6aceccc80..fe2acf6c58ad079ec0e6386fe2512b34f42d7fb5 100644 (file)
@@ -182,15 +182,15 @@ define i32 @test19(i32 %A, i32 %B) {
 
 define void @test20(i32 %A, i32 %B) {
 ; CHECK-LABEL: @test20(
-; CHECK-NEXT:    store i32 [[B:%.*]], i32* @G1, align 4
-; CHECK-NEXT:    store i32 [[A:%.*]], i32* @G2, align 4
+; CHECK-NEXT:    store i32 [[B:%.*]], ptr @G1, align 4
+; CHECK-NEXT:    store i32 [[A:%.*]], ptr @G2, align 4
 ; CHECK-NEXT:    ret void
 ;
   %t2 = xor i32 %B, %A
   %t5 = xor i32 %t2, %B
   %t8 = xor i32 %t5, %t2
-  store i32 %t8, i32* @G1
-  store i32 %t5, i32* @G2
+  store i32 %t8, ptr @G1
+  store i32 %t5, ptr @G2
   ret void
 }
 
@@ -483,15 +483,15 @@ define i32 @or_xor_commute4(i32 %p1, i32 %p2) {
   ret i32 %r
 }
 
-define i32 @or_xor_extra_use(i32 %a, i32 %b, i32* %p) {
+define i32 @or_xor_extra_use(i32 %a, i32 %b, ptr %p) {
 ; CHECK-LABEL: @or_xor_extra_use(
 ; CHECK-NEXT:    [[O:%.*]] = or i32 [[A:%.*]], [[B:%.*]]
-; CHECK-NEXT:    store i32 [[O]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[O]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = xor i32 [[O]], [[B]]
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %o = or i32 %a, %b
-  store i32 %o, i32* %p
+  store i32 %o, ptr %p
   %r = xor i32 %b, %o
   ret i32 %r
 }
@@ -568,15 +568,15 @@ define i32 @and_xor_commute4(i32 %p1, i32 %p2) {
   ret i32 %r
 }
 
-define i32 @and_xor_extra_use(i32 %a, i32 %b, i32* %p) {
+define i32 @and_xor_extra_use(i32 %a, i32 %b, ptr %p) {
 ; CHECK-LABEL: @and_xor_extra_use(
 ; CHECK-NEXT:    [[O:%.*]] = and i32 [[A:%.*]], [[B:%.*]]
-; CHECK-NEXT:    store i32 [[O]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[O]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = xor i32 [[O]], [[B]]
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %o = and i32 %a, %b
-  store i32 %o, i32* %p
+  store i32 %o, ptr %p
   %r = xor i32 %b, %o
   ret i32 %r
 }
@@ -585,16 +585,16 @@ define i32 @and_xor_extra_use(i32 %a, i32 %b, i32* %p) {
 ; The extra use (store) is here because the simpler case
 ; may be transformed using demanded bits.
 
-define i8 @xor_or_not(i8 %x, i8* %p) {
+define i8 @xor_or_not(i8 %x, ptr %p) {
 ; CHECK-LABEL: @xor_or_not(
 ; CHECK-NEXT:    [[NX:%.*]] = xor i8 [[X:%.*]], -1
-; CHECK-NEXT:    store i8 [[NX]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[NX]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i8 [[X]], -8
 ; CHECK-NEXT:    [[R:%.*]] = xor i8 [[TMP1]], -13
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %nx = xor i8 %x, -1
-  store i8 %nx, i8* %p
+  store i8 %nx, ptr %p
   %or = or i8 %nx, 7
   %r = xor i8 %or, 12
   ret i8 %r
@@ -602,17 +602,17 @@ define i8 @xor_or_not(i8 %x, i8* %p) {
 
 ; Don't do this if the 'or' has extra uses.
 
-define i8 @xor_or_not_uses(i8 %x, i8* %p) {
+define i8 @xor_or_not_uses(i8 %x, ptr %p) {
 ; CHECK-LABEL: @xor_or_not_uses(
 ; CHECK-NEXT:    [[NX:%.*]] = xor i8 [[X:%.*]], -1
 ; CHECK-NEXT:    [[OR:%.*]] = or i8 [[NX]], 7
-; CHECK-NEXT:    store i8 [[OR]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[OR]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[R:%.*]] = xor i8 [[OR]], 12
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %nx = xor i8 %x, -1
   %or = or i8 %nx, 7
-  store i8 %or, i8* %p
+  store i8 %or, ptr %p
   %r = xor i8 %or, 12
   ret i8 %r
 }
@@ -621,16 +621,16 @@ define i8 @xor_or_not_uses(i8 %x, i8* %p) {
 ; The extra use (store) is here because the simpler case
 ; may be transformed using demanded bits.
 
-define i8 @xor_and_not(i8 %x, i8* %p) {
+define i8 @xor_and_not(i8 %x, ptr %p) {
 ; CHECK-LABEL: @xor_and_not(
 ; CHECK-NEXT:    [[NX:%.*]] = xor i8 [[X:%.*]], -1
-; CHECK-NEXT:    store i8 [[NX]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[NX]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i8 [[X]], 42
 ; CHECK-NEXT:    [[R:%.*]] = xor i8 [[TMP1]], 53
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %nx = xor i8 %x, -1
-  store i8 %nx, i8* %p
+  store i8 %nx, ptr %p
   %and = and i8 %nx, 42
   %r = xor i8 %and, 31
   ret i8 %r
@@ -638,17 +638,17 @@ define i8 @xor_and_not(i8 %x, i8* %p) {
 
 ; Don't do this if the 'and' has extra uses.
 
-define i8 @xor_and_not_uses(i8 %x, i8* %p) {
+define i8 @xor_and_not_uses(i8 %x, ptr %p) {
 ; CHECK-LABEL: @xor_and_not_uses(
 ; CHECK-NEXT:    [[NX:%.*]] = and i8 [[X:%.*]], 42
 ; CHECK-NEXT:    [[AND:%.*]] = xor i8 [[NX]], 42
-; CHECK-NEXT:    store i8 [[AND]], i8* [[P:%.*]], align 1
+; CHECK-NEXT:    store i8 [[AND]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[R:%.*]] = xor i8 [[NX]], 53
 ; CHECK-NEXT:    ret i8 [[R]]
 ;
   %nx = xor i8 %x, -1
   %and = and i8 %nx, 42
-  store i8 %and, i8* %p
+  store i8 %and, ptr %p
   %r = xor i8 %and, 31
   ret i8 %r
 }
@@ -952,32 +952,32 @@ define <2 x i4> @or_or_xor_commute3(<2 x i4> %x, <2 x i4> %y, <2 x i4> %z) {
   ret <2 x i4> %r
 }
 
-define i4 @or_or_xor_use1(i4 %x, i4 %y, i4 %z, i4* %p) {
+define i4 @or_or_xor_use1(i4 %x, i4 %y, i4 %z, ptr %p) {
 ; CHECK-LABEL: @or_or_xor_use1(
 ; CHECK-NEXT:    [[O1:%.*]] = or i4 [[Z:%.*]], [[X:%.*]]
-; CHECK-NEXT:    store i4 [[O1]], i4* [[P:%.*]], align 1
+; CHECK-NEXT:    store i4 [[O1]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[O2:%.*]] = or i4 [[Z]], [[Y:%.*]]
 ; CHECK-NEXT:    [[R:%.*]] = xor i4 [[O1]], [[O2]]
 ; CHECK-NEXT:    ret i4 [[R]]
 ;
   %o1 = or i4 %z, %x
-  store i4 %o1, i4* %p
+  store i4 %o1, ptr %p
   %o2 = or i4 %z, %y
   %r = xor i4 %o1, %o2
   ret i4 %r
 }
 
-define i4 @or_or_xor_use2(i4 %x, i4 %y, i4 %z, i4* %p) {
+define i4 @or_or_xor_use2(i4 %x, i4 %y, i4 %z, ptr %p) {
 ; CHECK-LABEL: @or_or_xor_use2(
 ; CHECK-NEXT:    [[O1:%.*]] = or i4 [[Z:%.*]], [[X:%.*]]
 ; CHECK-NEXT:    [[O2:%.*]] = or i4 [[Z]], [[Y:%.*]]
-; CHECK-NEXT:    store i4 [[O2]], i4* [[P:%.*]], align 1
+; CHECK-NEXT:    store i4 [[O2]], ptr [[P:%.*]], align 1
 ; CHECK-NEXT:    [[R:%.*]] = xor i4 [[O1]], [[O2]]
 ; CHECK-NEXT:    ret i4 [[R]]
 ;
   %o1 = or i4 %z, %x
   %o2 = or i4 %z, %y
-  store i4 %o2, i4* %p
+  store i4 %o2, ptr %p
   %r = xor i4 %o1, %o2
   ret i4 %r
 }
@@ -1249,7 +1249,7 @@ define i8 @xor_orn_commute1(i8 %pa, i8 %b) {
 
 ; (B | ~A) ^ A --> ~(A & B)
 
-define i32 @xor_orn_commute2(i32 %a, i32 %pb,i32* %s) {
+define i32 @xor_orn_commute2(i32 %a, i32 %pb,ptr %s) {
 ; CHECK-LABEL: @xor_orn_commute2(
 ; CHECK-NEXT:    [[B:%.*]] = udiv i32 42, [[PB:%.*]]
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[B]], [[A:%.*]]
@@ -1263,11 +1263,11 @@ define i32 @xor_orn_commute2(i32 %a, i32 %pb,i32* %s) {
   ret i32 %z
 }
 
-define i32 @xor_orn_commute2_1use(i32 %a, i32 %pb,i32* %s) {
+define i32 @xor_orn_commute2_1use(i32 %a, i32 %pb,ptr %s) {
 ; CHECK-LABEL: @xor_orn_commute2_1use(
 ; CHECK-NEXT:    [[B:%.*]] = udiv i32 42, [[PB:%.*]]
 ; CHECK-NEXT:    [[NOTA:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    store i32 [[NOTA]], i32* [[S:%.*]], align 4
+; CHECK-NEXT:    store i32 [[NOTA]], ptr [[S:%.*]], align 4
 ; CHECK-NEXT:    [[TMP1:%.*]] = and i32 [[B]], [[A]]
 ; CHECK-NEXT:    [[Z:%.*]] = xor i32 [[TMP1]], -1
 ; CHECK-NEXT:    ret i32 [[Z]]
@@ -1275,14 +1275,14 @@ define i32 @xor_orn_commute2_1use(i32 %a, i32 %pb,i32* %s) {
   %b = udiv i32 42, %pb
   %nota = xor i32 %a, -1
   %l = or i32 %b, %nota
-  store i32 %nota, i32* %s
+  store i32 %nota, ptr %s
   %z = xor i32 %l, %a
   ret i32 %z
 }
 
 ; A ^ (B | ~A) --> ~(A & B)
 
-define i67 @xor_orn_commute3(i67 %pa, i67 %pb, i67* %s) {
+define i67 @xor_orn_commute3(i67 %pa, i67 %pb, ptr %s) {
 ; CHECK-LABEL: @xor_orn_commute3(
 ; CHECK-NEXT:    [[A:%.*]] = udiv i67 42, [[PA:%.*]]
 ; CHECK-NEXT:    [[B:%.*]] = udiv i67 42, [[PB:%.*]]
@@ -1298,13 +1298,13 @@ define i67 @xor_orn_commute3(i67 %pa, i67 %pb, i67* %s) {
   ret i67 %z
 }
 
-define i67 @xor_orn_commute3_1use(i67 %pa, i67 %pb, i67* %s) {
+define i67 @xor_orn_commute3_1use(i67 %pa, i67 %pb, ptr %s) {
 ; CHECK-LABEL: @xor_orn_commute3_1use(
 ; CHECK-NEXT:    [[A:%.*]] = udiv i67 42, [[PA:%.*]]
 ; CHECK-NEXT:    [[B:%.*]] = udiv i67 42, [[PB:%.*]]
 ; CHECK-NEXT:    [[NOTA:%.*]] = xor i67 [[A]], -1
 ; CHECK-NEXT:    [[L:%.*]] = or i67 [[B]], [[NOTA]]
-; CHECK-NEXT:    store i67 [[L]], i67* [[S:%.*]], align 4
+; CHECK-NEXT:    store i67 [[L]], ptr [[S:%.*]], align 4
 ; CHECK-NEXT:    [[Z:%.*]] = xor i67 [[A]], [[L]]
 ; CHECK-NEXT:    ret i67 [[Z]]
 ;
@@ -1312,24 +1312,24 @@ define i67 @xor_orn_commute3_1use(i67 %pa, i67 %pb, i67* %s) {
   %b = udiv i67 42, %pb
   %nota = xor i67 %a, -1
   %l = or i67 %b, %nota
-  store i67 %l, i67* %s
+  store i67 %l, ptr %s
   %z = xor i67 %a, %l
   ret i67 %z
 }
 
-define i32 @xor_orn_2use(i32 %a, i32 %b, i32* %s1, i32* %s2) {
+define i32 @xor_orn_2use(i32 %a, i32 %b, ptr %s1, ptr %s2) {
 ; CHECK-LABEL: @xor_orn_2use(
 ; CHECK-NEXT:    [[NOTA:%.*]] = xor i32 [[A:%.*]], -1
-; CHECK-NEXT:    store i32 [[NOTA]], i32* [[S1:%.*]], align 4
+; CHECK-NEXT:    store i32 [[NOTA]], ptr [[S1:%.*]], align 4
 ; CHECK-NEXT:    [[L:%.*]] = or i32 [[NOTA]], [[B:%.*]]
-; CHECK-NEXT:    store i32 [[L]], i32* [[S2:%.*]], align 4
+; CHECK-NEXT:    store i32 [[L]], ptr [[S2:%.*]], align 4
 ; CHECK-NEXT:    [[Z:%.*]] = xor i32 [[L]], [[A]]
 ; CHECK-NEXT:    ret i32 [[Z]]
 ;
   %nota = xor i32 %a, -1
-  store i32 %nota, i32* %s1
+  store i32 %nota, ptr %s1
   %l = or i32 %nota, %b
-  store i32 %l, i32* %s2
+  store i32 %l, ptr %s2
   %z = xor i32 %l, %a
   ret i32 %z
 }
index b8807a2ec96591e5c11ff9f75b647f38863f0606..9f698b0957f067c232bd85ab8ad07506b2887d41 100644 (file)
@@ -439,49 +439,49 @@ define i32 @xor_or_xor_common_op_commute8(i32 %a, i32 %b, i32 %c) {
   ret i32 %r
 }
 
-define i32 @xor_or_xor_common_op_extra_use1(i32 %a, i32 %b, i32 %c, i32* %p) {
+define i32 @xor_or_xor_common_op_extra_use1(i32 %a, i32 %b, i32 %c, ptr %p) {
 ; CHECK-LABEL: @xor_or_xor_common_op_extra_use1(
 ; CHECK-NEXT:    [[AC:%.*]] = xor i32 [[A:%.*]], [[C:%.*]]
-; CHECK-NEXT:    store i32 [[AC]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[AC]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[AB:%.*]] = or i32 [[A]], [[B:%.*]]
 ; CHECK-NEXT:    [[R:%.*]] = xor i32 [[AC]], [[AB]]
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %ac = xor i32 %a, %c
-  store i32 %ac, i32* %p
+  store i32 %ac, ptr %p
   %ab = or i32 %a, %b
   %r = xor i32 %ac, %ab
   ret i32 %r
 }
 
-define i32 @xor_or_xor_common_op_extra_use2(i32 %a, i32 %b, i32 %c, i32* %p) {
+define i32 @xor_or_xor_common_op_extra_use2(i32 %a, i32 %b, i32 %c, ptr %p) {
 ; CHECK-LABEL: @xor_or_xor_common_op_extra_use2(
 ; CHECK-NEXT:    [[AC:%.*]] = xor i32 [[A:%.*]], [[C:%.*]]
 ; CHECK-NEXT:    [[AB:%.*]] = or i32 [[A]], [[B:%.*]]
-; CHECK-NEXT:    store i32 [[AB]], i32* [[P:%.*]], align 4
+; CHECK-NEXT:    store i32 [[AB]], ptr [[P:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = xor i32 [[AC]], [[AB]]
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %ac = xor i32 %a, %c
   %ab = or i32 %a, %b
-  store i32 %ab, i32* %p
+  store i32 %ab, ptr %p
   %r = xor i32 %ac, %ab
   ret i32 %r
 }
 
-define i32 @xor_or_xor_common_op_extra_use3(i32 %a, i32 %b, i32 %c, i32* %p1, i32* %p2) {
+define i32 @xor_or_xor_common_op_extra_use3(i32 %a, i32 %b, i32 %c, ptr %p1, ptr %p2) {
 ; CHECK-LABEL: @xor_or_xor_common_op_extra_use3(
 ; CHECK-NEXT:    [[AC:%.*]] = xor i32 [[A:%.*]], [[C:%.*]]
-; CHECK-NEXT:    store i32 [[AC]], i32* [[P1:%.*]], align 4
+; CHECK-NEXT:    store i32 [[AC]], ptr [[P1:%.*]], align 4
 ; CHECK-NEXT:    [[AB:%.*]] = or i32 [[A]], [[B:%.*]]
-; CHECK-NEXT:    store i32 [[AB]], i32* [[P2:%.*]], align 4
+; CHECK-NEXT:    store i32 [[AB]], ptr [[P2:%.*]], align 4
 ; CHECK-NEXT:    [[R:%.*]] = xor i32 [[AC]], [[AB]]
 ; CHECK-NEXT:    ret i32 [[R]]
 ;
   %ac = xor i32 %a, %c
-  store i32 %ac, i32* %p1
+  store i32 %ac, ptr %p1
   %ab = or i32 %a, %b
-  store i32 %ab, i32* %p2
+  store i32 %ab, ptr %p2
   %r = xor i32 %ac, %ab
   ret i32 %r
 }
index 5350e8a52d587ec3839f29fe505e34952ed858fb..45b90900f83bf88522338f2dc3a350ecf761af31 100644 (file)
@@ -217,7 +217,7 @@ define i8 @PR49475_infloop(i32 %t0, i16 %insert, i64 %e, i8 %i162) {
 ; This would infinite loop because knownbits changed between checking
 ; if a transform was profitable and actually doing the transform.
 
-define i1 @PR51762(i32 *%i, i32 %t0, i16 %t1, i64* %p, i32* %d, i32* %f, i32 %p2, i1 %c1) {
+define i1 @PR51762(ptr %i, i32 %t0, i16 %t1, ptr %p, ptr %d, ptr %f, i32 %p2, i1 %c1) {
 ; CHECK-LABEL: @PR51762(
 ; CHECK-NEXT:  entry:
 ; CHECK-NEXT:    br label [[FOR_COND:%.*]]
@@ -229,7 +229,7 @@ define i1 @PR51762(i32 *%i, i32 %t0, i16 %t1, i64* %p, i32* %d, i32* %f, i32 %p2
 ; CHECK-NEXT:    br label [[FOR_COND]]
 ; CHECK:       for.end11:
 ; CHECK-NEXT:    [[S1:%.*]] = sext i16 [[T1:%.*]] to i64
-; CHECK-NEXT:    [[SROA38:%.*]] = load i32, i32* [[I:%.*]], align 8
+; CHECK-NEXT:    [[SROA38:%.*]] = load i32, ptr [[I:%.*]], align 8
 ; CHECK-NEXT:    [[INSERT_EXT51:%.*]] = zext i32 [[I_SROA_8_0]] to i64
 ; CHECK-NEXT:    [[INSERT_SHIFT52:%.*]] = shl nuw i64 [[INSERT_EXT51]], 32
 ; CHECK-NEXT:    [[INSERT_EXT39:%.*]] = zext i32 [[SROA38]] to i64
@@ -239,16 +239,16 @@ define i1 @PR51762(i32 *%i, i32 %t0, i16 %t1, i64* %p, i32* %d, i32* %f, i32 %p2
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i64 [[INSERT_INSERT41]], 0
 ; CHECK-NEXT:    [[SPEC_SELECT57:%.*]] = or i1 [[NE]], [[CMP]]
 ; CHECK-NEXT:    [[LOR_EXT:%.*]] = zext i1 [[SPEC_SELECT57]] to i32
-; CHECK-NEXT:    [[T2:%.*]] = load i32, i32* [[D:%.*]], align 4
+; CHECK-NEXT:    [[T2:%.*]] = load i32, ptr [[D:%.*]], align 4
 ; CHECK-NEXT:    [[CONV15:%.*]] = sext i16 [[T1]] to i32
 ; CHECK-NEXT:    [[CMP16:%.*]] = icmp sge i32 [[T2]], [[CONV15]]
 ; CHECK-NEXT:    [[CONV17:%.*]] = zext i1 [[CMP16]] to i32
-; CHECK-NEXT:    [[T3:%.*]] = load i32, i32* [[F:%.*]], align 4
+; CHECK-NEXT:    [[T3:%.*]] = load i32, ptr [[F:%.*]], align 4
 ; CHECK-NEXT:    [[ADD:%.*]] = add nsw i32 [[T3]], [[CONV17]]
-; CHECK-NEXT:    store i32 [[ADD]], i32* [[F]], align 4
+; CHECK-NEXT:    store i32 [[ADD]], ptr [[F]], align 4
 ; CHECK-NEXT:    [[REM18:%.*]] = srem i32 [[LOR_EXT]], [[ADD]]
 ; CHECK-NEXT:    [[CONV19:%.*]] = zext i32 [[REM18]] to i64
-; CHECK-NEXT:    store i32 0, i32* [[D]], align 8
+; CHECK-NEXT:    store i32 0, ptr [[D]], align 8
 ; CHECK-NEXT:    [[R:%.*]] = icmp ult i64 [[INSERT_INSERT41]], [[CONV19]]
 ; CHECK-NEXT:    call void @llvm.assume(i1 [[R]])
 ; CHECK-NEXT:    ret i1 true
@@ -266,7 +266,7 @@ cond.true:
 
 for.end11:
   %s1 = sext i16 %t1 to i64
-  %sroa38 = load i32, i32* %i, align 8
+  %sroa38 = load i32, ptr %i, align 8
   %insert.ext51 = zext i32 %i.sroa.8.0 to i64
   %insert.shift52 = shl nuw i64 %insert.ext51, 32
   %insert.ext39 = zext i32 %sroa38 to i64
@@ -277,18 +277,18 @@ for.end11:
   %spec.select57 = or i1 %ne, %cmp
 
   %lor.ext = zext i1 %spec.select57 to i32
-  %t2 = load i32, i32* %d, align 4
+  %t2 = load i32, ptr %d, align 4
   %conv15 = sext i16 %t1 to i32
   %cmp16 = icmp sge i32 %t2, %conv15
   %conv17 = zext i1 %cmp16 to i32
-  %t3 = load i32, i32* %f, align 4
+  %t3 = load i32, ptr %f, align 4
   %add = add nsw i32 %t3, %conv17
-  store i32 %add, i32* %f, align 4
+  store i32 %add, ptr %f, align 4
   %rem18 = srem i32 %lor.ext, %add
   %conv19 = zext i32 %rem18 to i64
   %div = udiv i64 %insert.insert41, %conv19
   %trunc33 = trunc i64 %div to i32
-  store i32 %trunc33, i32* %d, align 8
+  store i32 %trunc33, ptr %d, align 8
   %r = icmp ult i64 %insert.insert41, %conv19
   call void @llvm.assume(i1 %r)
   ret i1 %r