1*475ce4c2SSameer Sahasrabuddhe //===- Uniformity.h --------------------------------------*- C++ -*--------===// 2*475ce4c2SSameer Sahasrabuddhe // 3*475ce4c2SSameer Sahasrabuddhe // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*475ce4c2SSameer Sahasrabuddhe // See https://llvm.org/LICENSE.txt for license information. 5*475ce4c2SSameer Sahasrabuddhe // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*475ce4c2SSameer Sahasrabuddhe // 7*475ce4c2SSameer Sahasrabuddhe //===----------------------------------------------------------------------===// 8*475ce4c2SSameer Sahasrabuddhe 9*475ce4c2SSameer Sahasrabuddhe #ifndef LLVM_ADT_UNIFORMITY_H 10*475ce4c2SSameer Sahasrabuddhe #define LLVM_ADT_UNIFORMITY_H 11*475ce4c2SSameer Sahasrabuddhe 12*475ce4c2SSameer Sahasrabuddhe namespace llvm { 13*475ce4c2SSameer Sahasrabuddhe 14*475ce4c2SSameer Sahasrabuddhe /// Enum describing how instructions behave with respect to uniformity and 15*475ce4c2SSameer Sahasrabuddhe /// divergence, to answer the question: if the same instruction is executed by 16*475ce4c2SSameer Sahasrabuddhe /// two threads in a convergent set of threads, will its result value(s) be 17*475ce4c2SSameer Sahasrabuddhe /// uniform, i.e. the same on both threads? 18*475ce4c2SSameer Sahasrabuddhe enum class InstructionUniformity { 19*475ce4c2SSameer Sahasrabuddhe /// The result values are uniform if and only if all operands are uniform. 20*475ce4c2SSameer Sahasrabuddhe Default, 21*475ce4c2SSameer Sahasrabuddhe 22*475ce4c2SSameer Sahasrabuddhe /// The result values are always uniform. 23*475ce4c2SSameer Sahasrabuddhe AlwaysUniform, 24*475ce4c2SSameer Sahasrabuddhe 25*475ce4c2SSameer Sahasrabuddhe /// The result values can never be assumed to be uniform. 26*475ce4c2SSameer Sahasrabuddhe NeverUniform 27*475ce4c2SSameer Sahasrabuddhe }; 28*475ce4c2SSameer Sahasrabuddhe 29*475ce4c2SSameer Sahasrabuddhe } // namespace llvm 30*475ce4c2SSameer Sahasrabuddhe #endif // LLVM_ADT_UNIFORMITY_H 31