aboutsummaryrefslogtreecommitdiff
path: root/test/Analysis
AgeCommit message (Collapse)Author
2018-11-12[CostModel][X86] Add some initial cost tests for funnel shiftsSimon Pilgrim
Still need to add full uniform/constant coverage but this is enough to check basic fshl/fshr cost handling git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346670 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-12[CostModel][X86] SK_ExtractSubvector is cheap if the (legal) subvector is ↵Simon Pilgrim
aligned within the source vector git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346664 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-12[SystemZ::TTI] Improve accuracy of costs for vector fp <-> int conversionsJonas Paulsson
Improve getCastInstrCost() by respecting the different types of Src and Dst for vector integer <-> fp conversions. This means that extracting from integer becomes more expensive (by the extraction penalty), and the extraction from fp becomes cheaper (no longer has a false extraction penalty). Review: Ulrich Weigand https://reviews.llvm.org/D54423 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346663 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-12[CostModel] Add more realistic SK_InsertSubvector generic costs.Simon Pilgrim
Instead of defaulting to a cost = 1, expand to element extract/insert like we do for other shuffles. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346662 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-12[CostModel] Add more realistic SK_ExtractSubvector generic costs.Simon Pilgrim
Instead of defaulting to a cost = 1, expand to element extract/insert like we do for other shuffles. This exposes an issue in LoopVectorize which could call SK_ExtractSubvector with a scalar subvector type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346656 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-09[CostModel][X86] SK_ExtractSubvector is free if the subvector is at the ↵Simon Pilgrim
start of the source vector git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346538 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-09[CostModel] Add SK_ExtractSubvector handling to getInstructionThroughput ↵Simon Pilgrim
(PR39368) Add ShuffleVectorInst::isExtractSubvectorMask helper to match shuffle masks. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346510 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-08Return "[IndVars] Smart hard uses detection"Max Kazantsev
The patch has been reverted because it ended up prohibiting propagation of a constant to exit value. For such values, we should skip all checks related to hard uses because propagating a constant is always profitable. Differential Revision: https://reviews.llvm.org/D53691 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346397 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-06Revert "[IndVars] Smart hard uses detection"Max Kazantsev
This reverts commit 2f425e9c7946b9d74e64ebbfa33c1caa36914402. It seems that the check that we still should do the transform if we know the result is constant is missing in this code. So the logic that has been deleted by this change is still sometimes accidentally useful. I revert the change to see what can be done about it. The motivating case is the following: @Y = global [400 x i16] zeroinitializer, align 1 define i16 @foo() { entry: br label %for.body for.body: ; preds = %entry, %for.body %i = phi i16 [ 0, %entry ], [ %inc, %for.body ] %arrayidx = getelementptr inbounds [400 x i16], [400 x i16]* @Y, i16 0, i16 %i store i16 0, i16* %arrayidx, align 1 %inc = add nuw nsw i16 %i, 1 %cmp = icmp ult i16 %inc, 400 br i1 %cmp, label %for.body, label %for.end for.end: ; preds = %for.body %inc.lcssa = phi i16 [ %inc, %for.body ] ret i16 %inc.lcssa } We should be able to figure out that the result is constant, but the patch breaks it. Differential Revision: https://reviews.llvm.org/D51584 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346198 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-02[SystemZ::TTI] Improve cost handling of uint/sint to fp conversions.Jonas Paulsson
Let i8/i16 uint/sint to fp conversions cost 1 if operand is a load. Since the load already does the extension, there is no extra cost (previously returned 2). Review: Ulrich Weigand https://reviews.llvm.org/D54028 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346009 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-02[ProfileSummary] Add options to override hot and cold count thresholds.Easwaran Raman
Summary: The hot and cold count thresholds are derived from the summary, but for debugging purposes it is convenient to provide the actual thresholds. Reviewers: davidxl Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D54040 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346005 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-01[SystemZ::TTI] Recognize the higher cost of scalar i1 -> fp conversionJonas Paulsson
Scalar i1 to fp conversions are done with a branch sequence, so it should have a higher cost. Review: Ulrich Weigand https://reviews.llvm.org/D53924 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345818 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-01[SystemZ::TTI] Accurate costs for i1->double vector conversionsJonas Paulsson
This factors out a new method getBoolVecToIntConversionCost() containing the code for vector sext/zext of i1, in order to reuse it for i1 to double vector conversions. Review: Ulrich Weigand https://reviews.llvm.org/D53923 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345817 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-01[IndVars] Smart hard uses detectionMax Kazantsev
When rewriting loop exit values, IndVars considers this transform not profitable if the loop instruction has a loop user which it believes cannot be optimized away. In current implementation only calls that immediately use the instruction are considered as such. This patch extends the definition of "hard" users to any side-effecting instructions (which usually cannot be optimized away from the loop) and also allows handling of not just immediate users, but use chains. Differentlai Revision: https://reviews.llvm.org/D51584 Reviewed By: etherzhhb git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345814 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-01[SCEV] Avoid redundant computations when doing AddRec mergeMax Kazantsev
When we calculate a product of 2 AddRecs, we end up making quite massive computations to deduce the operands of resulting AddRec. This process can be optimized by computing all args of intermediate sum and then calling `getAddExpr` once rather than calling `getAddExpr` with intermediate result every time a new argument is computed. Differential Revision: https://reviews.llvm.org/D53189 Reviewed By: rtereshin git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345813 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-30[TTI] Fix uses of SK_ExtractSubvector shuffle costs (PR39368)Simon Pilgrim
Correct costings of SK_ExtractSubvector requires the SubTy argument to indicate the type/size of the extracted subvector. Unlike the rest of the shuffle kinds this means that the main Ty argument represents the source vector type not the destination! I've done my best to fix a number of vectorizer uses: SLP - the reduction epilogue costs should be using a SK_PermuteSingleSrc shuffle as these all occur at the hardware vector width - we're not extracting (illegal) subvector types. This is causing the cost model diffs as SK_ExtractSubvector costs are poorly handled and tend to just return 1 at the moment. LV - I'm not clear on what the SK_ExtractSubvector should represents for recurrences - I've used a <1 x ?> subvector extraction as that seems to match the VF delta. Differential Revision: https://reviews.llvm.org/D53573 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345617 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-30[SystemZ] Improve isFoldableLoad() for Sub, SDiv and UDiv.Jonas Paulsson
Sub, SDiv and UDiv are not commutative, so only the RHS operand can fold a load. This patch adds a check for this. Review: Ulrich Weigand https://reviews.llvm.org/D53791 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345596 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-26[X86] Add -LABEL to some FileCheck checks. NFCCraig Topper
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345407 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-25[SystemZ] Improve getMemoryOpCost() to find foldable loads that are converted.Jonas Paulsson
The SystemZ backend can do arithmetic of memory by loading and then extending one of the operands. Similarly, a load + truncate can be folded into an operand. This patch improves the SystemZ TTI cost function to recognize this. Review: Ulrich Weigand https://reviews.llvm.org/D52692 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345327 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-25[SystemZ] Improve handling and cost estimates of vector integer div/remJonas Paulsson
Enable the DAG optimization that converts vector div/rem with constants into multiply+shifts sequences by expanding them early. This is needed since ISD::SMUL_LOHI is 'Custom' lowered on SystemZ, and will therefore not be available to BuildSDIV after legalization. Better cost values for these instructions based on how they will be implemented (a constant divisor is cheaper). Review: Ulrich Weigand https://reviews.llvm.org/D53196 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345321 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-25[CostModel][X86] Add realistic vXi64 uitofp vXf64 costsSimon Pilgrim
Match codegen improvements from D53649/rL345256 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345263 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-25[CostModel][X86] Add realistic i64 uitofp f64 scalar costsSimon Pilgrim
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345261 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24[CostModel][X86] Add vXi8 vector division by constants costs.Simon Pilgrim
ISD::MULHS/ISD::MULHU lowering of vXi8 types means we expand these in TargetLowering BuildSDIV/BuildUDIV. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345175 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24[CostModel][X86] Enable non-uniform vector division by constants costs.Simon Pilgrim
Non-uniform division/remainder handling was added back at D49248/D50765 - so share the 'mul+sub' costs that already exist for uniform cases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345164 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-23[TTI][X86] Treat SK_Transpose shuffles as SK_PermuteTwoSrc - there's no ↵Simon Pilgrim
difference in lowering. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345048 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-23[CostModel][X86] Add transpose shuffle cost testsSimon Pilgrim
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345045 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-23Add BROADCAST shuffle cost tests.Simon Pilgrim
Part of a lot of cleanup necessary before PR39368. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345025 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-23Add BROADCAST shuffle cost tests.Simon Pilgrim
Part of a lot of cleanup necessary before PR39368. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345023 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-22[ARM] Regenerate reverse shuffle costsSimon Pilgrim
Came about while cleaning up general shuffle costs for PR39368 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344966 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-20[CostModel][X86] Add some initial extract/insert subvector shuffle cost testsSimon Pilgrim
Just f64/i64 tests initially to demonstrate PR39368 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344857 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-20[CostModel][X86] Add integer vector reduction cost testsSimon Pilgrim
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344846 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-19[ConstantFolding] Constant fold minimum and maximum intrinsicsThomas Lively
Summary: Depends on D52764 Reviewers: aheejin, dschuff Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D52765 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344796 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-16[LV] Teach vectorizer about variant value store into uniform addressAnna Thomas
Summary: Teach vectorizer about vectorizing variant value stores to uniform address. Similar to rL343028, we do not allow vectorization if we have multiple stores to the same uniform address. Cost model already has the change for considering the extract instruction cost for a variant value store. See added test cases for how vectorization is done. The patch also contains changes to the ORE messages. Reviewers: Ayal, mkuper, anemet, hsaito Subscribers: rkruppe, llvm-commits Differential Revision: https://reviews.llvm.org/D52656 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344613 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-16[SCEV] Limit AddRec "simplifications" to avoid combinatorial explosionsMax Kazantsev
SCEV's transform that turns `{A1,+,A2,+,...,+,An}<L> * {B1,+,B2,+,...,+,Bn}<L>` into a single AddRec of size `2n+1` with complex combinatorial coefficients can easily trigger exponential growth of the SCEV (in case if nothing gets folded and simplified). We tried to restrain this transform using the option `scalar-evolution-max-add-rec-size`, but its default value seems to be insufficiently small: the test attached to this patch with default value of this option `16` has a SCEV of >3M symbols (when printed out). This patch reduces the simplification limit. It is not a cure to combinatorial explosions, but at least it reduces this corner case to something more or less reasonable. Differential Revision: https://reviews.llvm.org/D53282 Reviewed By: sanjoy git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344584 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-10[SystemZ] Temporarily disable high VFs with integer div/rem.Jonas Paulsson
Until mischeduler is clever enough to avoid spilling in a vectorized loop with many (scalar) DLRs it is better to avoid high vectorization factors (8 and above). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344129 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-10[SystemZ] Take better care when computing needed vector registers in TTI.Jonas Paulsson
A new function getNumVectorRegs() is better to use for the number of needed vector registers instead of getNumberOfParts(). This is to make sure that the number of vector registers (and typically operations) required for a vector type is accurate. getNumberOfParts() which was previously used works by splitting the vector type until it is legal gives incorrect results for types with a non power of two number of elements (rare). A new static function getScalarSizeInBits() that also checks for a pointer type and returns 64U for it since otherwise it gets a value of 0). Used in a few places where Ty may be pointer. Review: Ulrich Weigand git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344115 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-10[Analysis] Make LocationSize pretty-printing more descriptiveGeorge Burgess IV
This is the third patch in a series intended to make https://reviews.llvm.org/D44748 more easily reviewable. Please see that patch for more context. The second being r344013. The intent is to make the output of printing a LocationSize more precise. The main motivation for this is that we plan to add a bit to distinguish whether a given LocationSize is an upper-bound or is precise; making that information available in pretty-printing is nice. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344108 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-25[LV][LAA] Vectorize loop invariant values stored into loop invariant addressAnna Thomas
Summary: We are overly conservative in loop vectorizer with respect to stores to loop invariant addresses. More details in https://bugs.llvm.org/show_bug.cgi?id=38546 This is the first part of the fix where we start with vectorizing loop invariant values to loop invariant addresses. This also includes changes to ORE for stores to invariant address. Reviewers: anemet, Ayal, mkuper, mssimpso Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D50665 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@343028 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-14[SystemZ] Adjust cost functions for subtargets that use LI + LOC instead of IPMJonas Paulsson
After recent improvements which makes better use of LOC instead of IPM, the TTI cost functions also needs to be updated to reflect this. This involves sext, zext and xor of i1. The tests were updated so that for z13 the new costs are expected, while the old costs are still checked for on zEC12. Review: Ulrich Weigand https://reviews.llvm.org/D51339 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@342207 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-11Prevent Constant Folding From Optimizing inrange GEPPeter Collingbourne
This patch does the following things: 1. update SymbolicallyEvaluateGEP so that it bails out if it cannot preserve inrange arribute; 2. update llvm/test/Analysis/ConstantFolding/gep.ll to remove UB in it; 3. remove inaccurate comment above ConstantFoldInstOperandsImpl in llvm/lib/Analysis/ConstantFolding.cpp; 4. add a new regression test that makes sure that no optimizations change an inrange GEP in an unexpected way. Patch by Zhaomo Yang! Differential Revision: https://reviews.llvm.org/D51698 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341888 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-10[AST] Add test coverage of memsetsPhilip Reames
Immediately after posting https://reviews.llvm.org/D51895, I noticed a small bug. These tests would have caught that. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341880 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-10[AST] Visit memtransfer arguments in orderPhilip Reames
The only point to this change is the test diffs. When I remove this code entirely (in favor of the recently added generic handling), I don't want there to be any confusion due to spurious test diffs. As an aside, the fact out tests are AST construction order dependent is not great. I thought about fixing that, but the reasonable schemes I might want (e.g. sort by name) need the test diffs anyways. Philip git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341841 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-10InstCombine: move hasOneUse check to the top of foldICmpAddConstantTim Northover
There were two combines not covered by the check before now, neither of which actually differed from normal in the benefit analysis. The most recent seems to be because it was just added at the top of the function (naturally). The older is from way back in 2008 (r46687) when we just didn't put those checks in so routinely, and has been diligently maintained since. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341831 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-10AMDGPU: Fix tests using old number for constant address spaceMatt Arsenault
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341770 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-07[AST] Generalize argument specific aliasingPhilip Reames
AliasSetTracker has special case handling for memset, memcpy and memmove which pre-existed argmemonly on functions and readonly and writeonly on arguments. This patch generalizes it using the AA infrastructure to any call correctly annotated. The motivation here is to cut down on confusion, not performance per se. For most instructions, there is a direct mapping to alias set. However, this is not guaranteed by the interface and was not in fact true for these three intrinsics *and only these three intrinsics*. I kept getting myself confused about this invariant, so I figured it would be good to clearly distinguish between a instructions and alias sets. Calls happened to be an easy target. The nice side effect is that custom implementations of memset/memcpy/memmove - including wrappers discovered by IPO - can now be optimized the same as builts by LICM. Note: The actual removal of the memset/memtransfer specific handling will happen in a follow on NFC patch. It was originally part of this one, but separate for ease of review and rebase. Differential Revision: https://reviews.llvm.org/D50730 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341713 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-04[InstCombine] Fold icmp ugt/ult (add nuw X, C2), C --> icmp ugt/ult X, (C - C2)Nicola Zaghen
Support for sgt/slt was added in rL294898, this adds the same cases also for unsigned compares. This is the Alive proof: https://rise4fun.com/Alive/nyY Differential Revision: https://reviews.llvm.org/D50972 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341353 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-30Move test/Analysis/DivergenceAnalysis/AMDGPU/loads.llNicolai Haehnle
Should fix failures of buildbots that don't build the AMDGPU backend. Change-Id: I01cb84b4b47803b10c5b21ea0353546239860a51 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341079 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-30[NFC] Rename the DivergenceAnalysis to LegacyDivergenceAnalysisNicolai Haehnle
Summary: This is patch 1 of the new DivergenceAnalysis (https://reviews.llvm.org/D50433). The purpose of this patch is to free up the name DivergenceAnalysis for the new generic implementation. The generic implementation class will be shared by specialized divergence analysis classes. Patch by: Simon Moll Reviewed By: nhaehnle Subscribers: jvesely, jholewinski, arsenm, nhaehnle, mgorny, jfb, llvm-commits Differential Revision: https://reviews.llvm.org/D50434 Change-Id: Ie8146b11be2c50d5312f30e11c7a3036a15b48cb git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341071 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-29[InstCombine] remove unnecessary shuffle undef foldingSanjay Patel
Add a test for constant folding to show that (shuffle undef, undef, mask) should already be handled via instsimplify. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340926 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-28[PPC] Remove Darwin support from POWER backend.Kit Barton
This patch issues an error message if Darwin ABI is attempted with the PPC backend. It also cleans up existing test cases, either converting the test to use an alternative triple or removing the test if the coverage is no longer needed. Updated Tests ------------- The majority of test cases were updated to use a different triple that does not include the Darwin ABI. Many tests were also updated to use FileCheck, in place of grep. Deleted Tests ------------- llvm/test/tools/dsymutil/PowerPC/sibling.test was originally added to test specific functionality of dsymutil using an object file created with an old version of llvm-gcc for a Powerbook G4. After a discussion with @JDevlieghere he suggested removing the test. llvm/test/CodeGen/PowerPC/combine_loads_from_build_pair.ll was converted from a PPC test to a SystemZ test, as the behavior is also reproducible there. All other tests that were deleted were specific to the darwin/ppc ABI and no longer necessary. Phabricator Review: https://reviews.llvm.org/D50988 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340795 91177308-0d34-0410-b5e6-96231b3b80d8