Author: tstellar Date: Thu Oct 12 19:33:17 2017 New Revision: 315663 URL: http://llvm.org/viewvc/llvm-project?rev=315663&view=rev Log: Merging r312357:
------------------------------------------------------------------------ r312357 | davide | 2017-09-01 12:54:08 -0700 (Fri, 01 Sep 2017) | 9 lines [TTI] Fix getGEPCost() for geps with a single operand. Previously this would sporadically crash as TargetType was never initialized. We special-case the single-operand case returning earlier and trying to mimic the behaviour of isLegalAddressingMode as closely as possible. Differential Revision: https://reviews.llvm.org/D37277 ------------------------------------------------------------------------ Added: llvm/branches/release_50/test/Transforms/SimplifyCFG/gepcost.ll Modified: llvm/branches/release_50/include/llvm/Analysis/TargetTransformInfoImpl.h Modified: llvm/branches/release_50/include/llvm/Analysis/TargetTransformInfoImpl.h URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_50/include/llvm/Analysis/TargetTransformInfoImpl.h?rev=315663&r1=315662&r2=315663&view=diff ============================================================================== --- llvm/branches/release_50/include/llvm/Analysis/TargetTransformInfoImpl.h (original) +++ llvm/branches/release_50/include/llvm/Analysis/TargetTransformInfoImpl.h Thu Oct 12 19:33:17 2017 @@ -652,6 +652,12 @@ public: auto GTI = gep_type_begin(PointeeType, Operands); Type *TargetType; + + // Handle the case where the GEP instruction has a single operand, + // the basis, therefore TargetType is a nullptr. + if (Operands.empty()) + return !BaseGV ? TTI::TCC_Free : TTI::TCC_Basic; + for (auto I = Operands.begin(); I != Operands.end(); ++I, ++GTI) { TargetType = GTI.getIndexedType(); // We assume that the cost of Scalar GEP with constant index and the Added: llvm/branches/release_50/test/Transforms/SimplifyCFG/gepcost.ll URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_50/test/Transforms/SimplifyCFG/gepcost.ll?rev=315663&view=auto ============================================================================== --- llvm/branches/release_50/test/Transforms/SimplifyCFG/gepcost.ll (added) +++ llvm/branches/release_50/test/Transforms/SimplifyCFG/gepcost.ll Thu Oct 12 19:33:17 2017 @@ -0,0 +1,28 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt < %s -S -simplifycfg | FileCheck %s + +target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" +target triple = "thumbv7m-none--eabi" + +@glob = external unnamed_addr constant [16 x i8] + +define void @f() { +; CHECK-LABEL: @f( +; CHECK-NEXT: entr: +; CHECK-NEXT: br i1 undef, label [[NEXT:%.*]], label [[EXIT:%.*]] +; CHECK: next: +; CHECK-NEXT: [[PAT:%.*]] = getelementptr [16 x i8], [16 x i8]* @glob +; CHECK-NEXT: br label [[EXIT]] +; CHECK: exit: +; CHECK-NEXT: ret void +; +entr: + br i1 undef, label %next, label %exit + +next: + %pat = getelementptr [16 x i8], [16 x i8]* @glob + br label %exit + +exit: + ret void +} _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits