• Home
  • Raw
  • Download

Lines Matching full:optimizer

15 #include "spirv-tools/optimizer.hpp"
45 struct Optimizer::PassToken::Impl {
51 Optimizer::PassToken::PassToken( in PassToken()
52 std::unique_ptr<Optimizer::PassToken::Impl> impl) in PassToken()
55 Optimizer::PassToken::PassToken(std::unique_ptr<opt::Pass>&& pass) in PassToken()
56 : impl_(MakeUnique<Optimizer::PassToken::Impl>(std::move(pass))) {} in PassToken()
58 Optimizer::PassToken::PassToken(PassToken&& that) in PassToken()
61 Optimizer::PassToken& Optimizer::PassToken::operator=(PassToken&& that) { in operator =()
66 Optimizer::PassToken::~PassToken() {} in ~PassToken()
68 struct Optimizer::Impl {
76 Optimizer::Optimizer(spv_target_env env) : impl_(new Impl(env)) { in Optimizer() function in spvtools::Optimizer
80 Optimizer::~Optimizer() {} in ~Optimizer()
82 void Optimizer::SetMessageConsumer(MessageConsumer c) { in SetMessageConsumer()
90 const MessageConsumer& Optimizer::consumer() const { in consumer()
94 Optimizer& Optimizer::RegisterPass(PassToken&& p) { in RegisterPass()
122 Optimizer& Optimizer::RegisterLegalizationPasses(bool preserve_interface) { in RegisterLegalizationPasses()
176 Optimizer& Optimizer::RegisterLegalizationPasses() { in RegisterLegalizationPasses()
180 Optimizer& Optimizer::RegisterPerformancePasses(bool preserve_interface) { in RegisterPerformancePasses()
227 Optimizer& Optimizer::RegisterPerformancePasses() { in RegisterPerformancePasses()
231 Optimizer& Optimizer::RegisterSizePasses(bool preserve_interface) { in RegisterSizePasses()
267 Optimizer& Optimizer::RegisterSizePasses() { return RegisterSizePasses(false); } in RegisterSizePasses()
269 bool Optimizer::RegisterPassesFromFlags(const std::vector<std::string>& flags) { in RegisterPassesFromFlags()
273 bool Optimizer::RegisterPassesFromFlags(const std::vector<std::string>& flags, in RegisterPassesFromFlags()
284 bool Optimizer::FlagHasValidForm(const std::string& flag) const { in FlagHasValidForm()
299 bool Optimizer::RegisterPassFromFlag(const std::string& flag) { in RegisterPassFromFlag()
303 bool Optimizer::RegisterPassFromFlag(const std::string& flag, in RegisterPassFromFlag()
649 void Optimizer::SetTargetEnv(const spv_target_env env) { in SetTargetEnv()
653 bool Optimizer::Run(const uint32_t* original_binary, in Run()
660 bool Optimizer::Run(const uint32_t* original_binary, in Run()
672 bool Optimizer::Run(const uint32_t* original_binary, in Run()
713 "Binary size unexpectedly changed despite the optimizer saying " in Run()
722 "Binary content unexpectedly changed despite the optimizer saying " in Run()
736 Optimizer& Optimizer::SetPrintAll(std::ostream* out) { in SetPrintAll()
741 Optimizer& Optimizer::SetTimeReport(std::ostream* out) { in SetTimeReport()
746 Optimizer& Optimizer::SetValidateAfterAll(bool validate) { in SetValidateAfterAll()
751 Optimizer::PassToken CreateNullPass() { in CreateNullPass()
752 return MakeUnique<Optimizer::PassToken::Impl>(MakeUnique<opt::NullPass>()); in CreateNullPass()
755 Optimizer::PassToken CreateStripDebugInfoPass() { in CreateStripDebugInfoPass()
756 return MakeUnique<Optimizer::PassToken::Impl>( in CreateStripDebugInfoPass()
760 Optimizer::PassToken CreateStripReflectInfoPass() { in CreateStripReflectInfoPass()
764 Optimizer::PassToken CreateStripNonSemanticInfoPass() { in CreateStripNonSemanticInfoPass()
765 return MakeUnique<Optimizer::PassToken::Impl>( in CreateStripNonSemanticInfoPass()
769 Optimizer::PassToken CreateEliminateDeadFunctionsPass() { in CreateEliminateDeadFunctionsPass()
770 return MakeUnique<Optimizer::PassToken::Impl>( in CreateEliminateDeadFunctionsPass()
774 Optimizer::PassToken CreateEliminateDeadMembersPass() { in CreateEliminateDeadMembersPass()
775 return MakeUnique<Optimizer::PassToken::Impl>( in CreateEliminateDeadMembersPass()
779 Optimizer::PassToken CreateSetSpecConstantDefaultValuePass( in CreateSetSpecConstantDefaultValuePass()
781 return MakeUnique<Optimizer::PassToken::Impl>( in CreateSetSpecConstantDefaultValuePass()
785 Optimizer::PassToken CreateSetSpecConstantDefaultValuePass( in CreateSetSpecConstantDefaultValuePass()
787 return MakeUnique<Optimizer::PassToken::Impl>( in CreateSetSpecConstantDefaultValuePass()
791 Optimizer::PassToken CreateFlattenDecorationPass() { in CreateFlattenDecorationPass()
792 return MakeUnique<Optimizer::PassToken::Impl>( in CreateFlattenDecorationPass()
796 Optimizer::PassToken CreateFreezeSpecConstantValuePass() { in CreateFreezeSpecConstantValuePass()
797 return MakeUnique<Optimizer::PassToken::Impl>( in CreateFreezeSpecConstantValuePass()
801 Optimizer::PassToken CreateFoldSpecConstantOpAndCompositePass() { in CreateFoldSpecConstantOpAndCompositePass()
802 return MakeUnique<Optimizer::PassToken::Impl>( in CreateFoldSpecConstantOpAndCompositePass()
806 Optimizer::PassToken CreateUnifyConstantPass() { in CreateUnifyConstantPass()
807 return MakeUnique<Optimizer::PassToken::Impl>( in CreateUnifyConstantPass()
811 Optimizer::PassToken CreateEliminateDeadConstantPass() { in CreateEliminateDeadConstantPass()
812 return MakeUnique<Optimizer::PassToken::Impl>( in CreateEliminateDeadConstantPass()
816 Optimizer::PassToken CreateDeadVariableEliminationPass() { in CreateDeadVariableEliminationPass()
817 return MakeUnique<Optimizer::PassToken::Impl>( in CreateDeadVariableEliminationPass()
821 Optimizer::PassToken CreateStrengthReductionPass() { in CreateStrengthReductionPass()
822 return MakeUnique<Optimizer::PassToken::Impl>( in CreateStrengthReductionPass()
826 Optimizer::PassToken CreateBlockMergePass() { in CreateBlockMergePass()
827 return MakeUnique<Optimizer::PassToken::Impl>( in CreateBlockMergePass()
831 Optimizer::PassToken CreateInlineExhaustivePass() { in CreateInlineExhaustivePass()
832 return MakeUnique<Optimizer::PassToken::Impl>( in CreateInlineExhaustivePass()
836 Optimizer::PassToken CreateInlineOpaquePass() { in CreateInlineOpaquePass()
837 return MakeUnique<Optimizer::PassToken::Impl>( in CreateInlineOpaquePass()
841 Optimizer::PassToken CreateLocalAccessChainConvertPass() { in CreateLocalAccessChainConvertPass()
842 return MakeUnique<Optimizer::PassToken::Impl>( in CreateLocalAccessChainConvertPass()
846 Optimizer::PassToken CreateLocalSingleBlockLoadStoreElimPass() { in CreateLocalSingleBlockLoadStoreElimPass()
847 return MakeUnique<Optimizer::PassToken::Impl>( in CreateLocalSingleBlockLoadStoreElimPass()
851 Optimizer::PassToken CreateLocalSingleStoreElimPass() { in CreateLocalSingleStoreElimPass()
852 return MakeUnique<Optimizer::PassToken::Impl>( in CreateLocalSingleStoreElimPass()
856 Optimizer::PassToken CreateInsertExtractElimPass() { in CreateInsertExtractElimPass()
857 return MakeUnique<Optimizer::PassToken::Impl>( in CreateInsertExtractElimPass()
861 Optimizer::PassToken CreateDeadInsertElimPass() { in CreateDeadInsertElimPass()
862 return MakeUnique<Optimizer::PassToken::Impl>( in CreateDeadInsertElimPass()
866 Optimizer::PassToken CreateDeadBranchElimPass() { in CreateDeadBranchElimPass()
867 return MakeUnique<Optimizer::PassToken::Impl>( in CreateDeadBranchElimPass()
871 Optimizer::PassToken CreateLocalMultiStoreElimPass() { in CreateLocalMultiStoreElimPass()
872 return MakeUnique<Optimizer::PassToken::Impl>( in CreateLocalMultiStoreElimPass()
876 Optimizer::PassToken CreateAggressiveDCEPass() { in CreateAggressiveDCEPass()
877 return MakeUnique<Optimizer::PassToken::Impl>( in CreateAggressiveDCEPass()
881 Optimizer::PassToken CreateAggressiveDCEPass(bool preserve_interface) { in CreateAggressiveDCEPass()
882 return MakeUnique<Optimizer::PassToken::Impl>( in CreateAggressiveDCEPass()
886 Optimizer::PassToken CreateAggressiveDCEPass(bool preserve_interface, in CreateAggressiveDCEPass()
888 return MakeUnique<Optimizer::PassToken::Impl>( in CreateAggressiveDCEPass()
892 Optimizer::PassToken CreateRemoveUnusedInterfaceVariablesPass() { in CreateRemoveUnusedInterfaceVariablesPass()
893 return MakeUnique<Optimizer::PassToken::Impl>( in CreateRemoveUnusedInterfaceVariablesPass()
897 Optimizer::PassToken CreatePropagateLineInfoPass() { in CreatePropagateLineInfoPass()
898 return MakeUnique<Optimizer::PassToken::Impl>(MakeUnique<opt::EmptyPass>()); in CreatePropagateLineInfoPass()
901 Optimizer::PassToken CreateRedundantLineInfoElimPass() { in CreateRedundantLineInfoElimPass()
902 return MakeUnique<Optimizer::PassToken::Impl>(MakeUnique<opt::EmptyPass>()); in CreateRedundantLineInfoElimPass()
905 Optimizer::PassToken CreateCompactIdsPass() { in CreateCompactIdsPass()
906 return MakeUnique<Optimizer::PassToken::Impl>( in CreateCompactIdsPass()
910 Optimizer::PassToken CreateMergeReturnPass() { in CreateMergeReturnPass()
911 return MakeUnique<Optimizer::PassToken::Impl>( in CreateMergeReturnPass()
915 std::vector<const char*> Optimizer::GetPassNames() const { in GetPassNames()
923 Optimizer::PassToken CreateCFGCleanupPass() { in CreateCFGCleanupPass()
924 return MakeUnique<Optimizer::PassToken::Impl>( in CreateCFGCleanupPass()
928 Optimizer::PassToken CreateLocalRedundancyEliminationPass() { in CreateLocalRedundancyEliminationPass()
929 return MakeUnique<Optimizer::PassToken::Impl>( in CreateLocalRedundancyEliminationPass()
933 Optimizer::PassToken CreateLoopFissionPass(size_t threshold) { in CreateLoopFissionPass()
934 return MakeUnique<Optimizer::PassToken::Impl>( in CreateLoopFissionPass()
938 Optimizer::PassToken CreateLoopFusionPass(size_t max_registers_per_loop) { in CreateLoopFusionPass()
939 return MakeUnique<Optimizer::PassToken::Impl>( in CreateLoopFusionPass()
943 Optimizer::PassToken CreateLoopInvariantCodeMotionPass() { in CreateLoopInvariantCodeMotionPass()
944 return MakeUnique<Optimizer::PassToken::Impl>(MakeUnique<opt::LICMPass>()); in CreateLoopInvariantCodeMotionPass()
947 Optimizer::PassToken CreateLoopPeelingPass() { in CreateLoopPeelingPass()
948 return MakeUnique<Optimizer::PassToken::Impl>( in CreateLoopPeelingPass()
952 Optimizer::PassToken CreateLoopUnswitchPass() { in CreateLoopUnswitchPass()
953 return MakeUnique<Optimizer::PassToken::Impl>( in CreateLoopUnswitchPass()
957 Optimizer::PassToken CreateRedundancyEliminationPass() { in CreateRedundancyEliminationPass()
958 return MakeUnique<Optimizer::PassToken::Impl>( in CreateRedundancyEliminationPass()
962 Optimizer::PassToken CreateRemoveDuplicatesPass() { in CreateRemoveDuplicatesPass()
963 return MakeUnique<Optimizer::PassToken::Impl>( in CreateRemoveDuplicatesPass()
967 Optimizer::PassToken CreateScalarReplacementPass(uint32_t size_limit) { in CreateScalarReplacementPass()
968 return MakeUnique<Optimizer::PassToken::Impl>( in CreateScalarReplacementPass()
972 Optimizer::PassToken CreatePrivateToLocalPass() { in CreatePrivateToLocalPass()
973 return MakeUnique<Optimizer::PassToken::Impl>( in CreatePrivateToLocalPass()
977 Optimizer::PassToken CreateCCPPass() { in CreateCCPPass()
978 return MakeUnique<Optimizer::PassToken::Impl>(MakeUnique<opt::CCPPass>()); in CreateCCPPass()
981 Optimizer::PassToken CreateWorkaround1209Pass() { in CreateWorkaround1209Pass()
982 return MakeUnique<Optimizer::PassToken::Impl>( in CreateWorkaround1209Pass()
986 Optimizer::PassToken CreateIfConversionPass() { in CreateIfConversionPass()
987 return MakeUnique<Optimizer::PassToken::Impl>( in CreateIfConversionPass()
991 Optimizer::PassToken CreateReplaceInvalidOpcodePass() { in CreateReplaceInvalidOpcodePass()
992 return MakeUnique<Optimizer::PassToken::Impl>( in CreateReplaceInvalidOpcodePass()
996 Optimizer::PassToken CreateSimplificationPass() { in CreateSimplificationPass()
997 return MakeUnique<Optimizer::PassToken::Impl>( in CreateSimplificationPass()
1001 Optimizer::PassToken CreateLoopUnrollPass(bool fully_unroll, int factor) { in CreateLoopUnrollPass()
1002 return MakeUnique<Optimizer::PassToken::Impl>( in CreateLoopUnrollPass()
1006 Optimizer::PassToken CreateSSARewritePass() { in CreateSSARewritePass()
1007 return MakeUnique<Optimizer::PassToken::Impl>( in CreateSSARewritePass()
1011 Optimizer::PassToken CreateCopyPropagateArraysPass() { in CreateCopyPropagateArraysPass()
1012 return MakeUnique<Optimizer::PassToken::Impl>( in CreateCopyPropagateArraysPass()
1016 Optimizer::PassToken CreateVectorDCEPass() { in CreateVectorDCEPass()
1017 return MakeUnique<Optimizer::PassToken::Impl>(MakeUnique<opt::VectorDCE>()); in CreateVectorDCEPass()
1020 Optimizer::PassToken CreateReduceLoadSizePass( in CreateReduceLoadSizePass()
1022 return MakeUnique<Optimizer::PassToken::Impl>( in CreateReduceLoadSizePass()
1026 Optimizer::PassToken CreateCombineAccessChainsPass() { in CreateCombineAccessChainsPass()
1027 return MakeUnique<Optimizer::PassToken::Impl>( in CreateCombineAccessChainsPass()
1031 Optimizer::PassToken CreateUpgradeMemoryModelPass() { in CreateUpgradeMemoryModelPass()
1032 return MakeUnique<Optimizer::PassToken::Impl>( in CreateUpgradeMemoryModelPass()
1036 Optimizer::PassToken CreateConvertRelaxedToHalfPass() { in CreateConvertRelaxedToHalfPass()
1037 return MakeUnique<Optimizer::PassToken::Impl>( in CreateConvertRelaxedToHalfPass()
1041 Optimizer::PassToken CreateRelaxFloatOpsPass() { in CreateRelaxFloatOpsPass()
1042 return MakeUnique<Optimizer::PassToken::Impl>( in CreateRelaxFloatOpsPass()
1046 Optimizer::PassToken CreateCodeSinkingPass() { in CreateCodeSinkingPass()
1047 return MakeUnique<Optimizer::PassToken::Impl>( in CreateCodeSinkingPass()
1051 Optimizer::PassToken CreateFixStorageClassPass() { in CreateFixStorageClassPass()
1052 return MakeUnique<Optimizer::PassToken::Impl>( in CreateFixStorageClassPass()
1056 Optimizer::PassToken CreateGraphicsRobustAccessPass() { in CreateGraphicsRobustAccessPass()
1057 return MakeUnique<Optimizer::PassToken::Impl>( in CreateGraphicsRobustAccessPass()
1061 Optimizer::PassToken CreateReplaceDescArrayAccessUsingVarIndexPass() { in CreateReplaceDescArrayAccessUsingVarIndexPass()
1062 return MakeUnique<Optimizer::PassToken::Impl>( in CreateReplaceDescArrayAccessUsingVarIndexPass()
1066 Optimizer::PassToken CreateSpreadVolatileSemanticsPass() { in CreateSpreadVolatileSemanticsPass()
1067 return MakeUnique<Optimizer::PassToken::Impl>( in CreateSpreadVolatileSemanticsPass()
1071 Optimizer::PassToken CreateDescriptorScalarReplacementPass() { in CreateDescriptorScalarReplacementPass()
1072 return MakeUnique<Optimizer::PassToken::Impl>( in CreateDescriptorScalarReplacementPass()
1077 Optimizer::PassToken CreateDescriptorCompositeScalarReplacementPass() { in CreateDescriptorCompositeScalarReplacementPass()
1078 return MakeUnique<Optimizer::PassToken::Impl>( in CreateDescriptorCompositeScalarReplacementPass()
1083 Optimizer::PassToken CreateDescriptorArrayScalarReplacementPass() { in CreateDescriptorArrayScalarReplacementPass()
1084 return MakeUnique<Optimizer::PassToken::Impl>( in CreateDescriptorArrayScalarReplacementPass()
1089 Optimizer::PassToken CreateWrapOpKillPass() { in CreateWrapOpKillPass()
1090 return MakeUnique<Optimizer::PassToken::Impl>(MakeUnique<opt::WrapOpKill>()); in CreateWrapOpKillPass()
1093 Optimizer::PassToken CreateAmdExtToKhrPass() { in CreateAmdExtToKhrPass()
1094 return MakeUnique<Optimizer::PassToken::Impl>( in CreateAmdExtToKhrPass()
1098 Optimizer::PassToken CreateInterpolateFixupPass() { in CreateInterpolateFixupPass()
1099 return MakeUnique<Optimizer::PassToken::Impl>( in CreateInterpolateFixupPass()
1103 Optimizer::PassToken CreateEliminateDeadInputComponentsPass() { in CreateEliminateDeadInputComponentsPass()
1104 return MakeUnique<Optimizer::PassToken::Impl>( in CreateEliminateDeadInputComponentsPass()
1109 Optimizer::PassToken CreateEliminateDeadOutputComponentsPass() { in CreateEliminateDeadOutputComponentsPass()
1110 return MakeUnique<Optimizer::PassToken::Impl>( in CreateEliminateDeadOutputComponentsPass()
1115 Optimizer::PassToken CreateEliminateDeadInputComponentsSafePass() { in CreateEliminateDeadInputComponentsSafePass()
1116 return MakeUnique<Optimizer::PassToken::Impl>( in CreateEliminateDeadInputComponentsSafePass()
1121 Optimizer::PassToken CreateAnalyzeLiveInputPass( in CreateAnalyzeLiveInputPass()
1124 return MakeUnique<Optimizer::PassToken::Impl>( in CreateAnalyzeLiveInputPass()
1128 Optimizer::PassToken CreateEliminateDeadOutputStoresPass( in CreateEliminateDeadOutputStoresPass()
1131 return MakeUnique<Optimizer::PassToken::Impl>( in CreateEliminateDeadOutputStoresPass()
1135 Optimizer::PassToken CreateConvertToSampledImagePass( in CreateConvertToSampledImagePass()
1138 return MakeUnique<Optimizer::PassToken::Impl>( in CreateConvertToSampledImagePass()
1142 Optimizer::PassToken CreateInterfaceVariableScalarReplacementPass() { in CreateInterfaceVariableScalarReplacementPass()
1143 return MakeUnique<Optimizer::PassToken::Impl>( in CreateInterfaceVariableScalarReplacementPass()
1147 Optimizer::PassToken CreateRemoveDontInlinePass() { in CreateRemoveDontInlinePass()
1148 return MakeUnique<Optimizer::PassToken::Impl>( in CreateRemoveDontInlinePass()
1152 Optimizer::PassToken CreateFixFuncCallArgumentsPass() { in CreateFixFuncCallArgumentsPass()
1153 return MakeUnique<Optimizer::PassToken::Impl>( in CreateFixFuncCallArgumentsPass()
1157 Optimizer::PassToken CreateTrimCapabilitiesPass() { in CreateTrimCapabilitiesPass()
1158 return MakeUnique<Optimizer::PassToken::Impl>( in CreateTrimCapabilitiesPass()
1162 Optimizer::PassToken CreateStructPackingPass(const char* structToPack, in CreateStructPackingPass()
1164 return MakeUnique<Optimizer::PassToken::Impl>( in CreateStructPackingPass()
1170 Optimizer::PassToken CreateSwitchDescriptorSetPass(uint32_t from, uint32_t to) { in CreateSwitchDescriptorSetPass()
1171 return MakeUnique<Optimizer::PassToken::Impl>( in CreateSwitchDescriptorSetPass()
1175 Optimizer::PassToken CreateInvocationInterlockPlacementPass() { in CreateInvocationInterlockPlacementPass()
1176 return MakeUnique<Optimizer::PassToken::Impl>( in CreateInvocationInterlockPlacementPass()
1180 Optimizer::PassToken CreateModifyMaximalReconvergencePass(bool add) { in CreateModifyMaximalReconvergencePass()
1181 return MakeUnique<Optimizer::PassToken::Impl>( in CreateModifyMaximalReconvergencePass()
1185 Optimizer::PassToken CreateOpExtInstWithForwardReferenceFixupPass() { in CreateOpExtInstWithForwardReferenceFixupPass()
1186 return MakeUnique<Optimizer::PassToken::Impl>( in CreateOpExtInstWithForwardReferenceFixupPass()
1195 return reinterpret_cast<spv_optimizer_t*>(new spvtools::Optimizer(env)); in spvOptimizerCreate()
1198 SPIRV_TOOLS_EXPORT void spvOptimizerDestroy(spv_optimizer_t* optimizer) { in spvOptimizerDestroy() argument
1199 delete reinterpret_cast<spvtools::Optimizer*>(optimizer); in spvOptimizerDestroy()
1203 spv_optimizer_t* optimizer, spv_message_consumer consumer) { in spvOptimizerSetMessageConsumer() argument
1204 reinterpret_cast<spvtools::Optimizer*>(optimizer)-> in spvOptimizerSetMessageConsumer()
1213 spv_optimizer_t* optimizer) { in spvOptimizerRegisterLegalizationPasses() argument
1214 reinterpret_cast<spvtools::Optimizer*>(optimizer)-> in spvOptimizerRegisterLegalizationPasses()
1219 spv_optimizer_t* optimizer) { in spvOptimizerRegisterPerformancePasses() argument
1220 reinterpret_cast<spvtools::Optimizer*>(optimizer)-> in spvOptimizerRegisterPerformancePasses()
1225 spv_optimizer_t* optimizer) { in spvOptimizerRegisterSizePasses() argument
1226 reinterpret_cast<spvtools::Optimizer*>(optimizer)->RegisterSizePasses(); in spvOptimizerRegisterSizePasses()
1230 spv_optimizer_t* optimizer, const char* flag) in spvOptimizerRegisterPassFromFlag() argument
1232 return reinterpret_cast<spvtools::Optimizer*>(optimizer)-> in spvOptimizerRegisterPassFromFlag()
1237 spv_optimizer_t* optimizer, const char** flags, const size_t flag_count) { in spvOptimizerRegisterPassesFromFlags() argument
1240 return reinterpret_cast<spvtools::Optimizer*>(optimizer) in spvOptimizerRegisterPassesFromFlags()
1246 spv_optimizer_t* optimizer, const char** flags, const size_t flag_count) { in spvOptimizerRegisterPassesFromFlagsWhilePreservingTheInterface() argument
1249 return reinterpret_cast<spvtools::Optimizer*>(optimizer) in spvOptimizerRegisterPassesFromFlagsWhilePreservingTheInterface()
1254 spv_result_t spvOptimizerRun(spv_optimizer_t* optimizer, in spvOptimizerRun() argument
1261 if (!reinterpret_cast<spvtools::Optimizer*>(optimizer)-> in spvOptimizerRun()