Squashed 'third_party/allwpilib/' changes from e4b91005cf..83f1860047

83f1860047 [wpilib] Add/update documentation to PneumaticBase and subclasses (NFC) (#4881)
9872e676d8 [commands] Make Subsystem destructor virtual (#4892)
25db20e49d [hal] Fix segfault in various HAL functions (#4891)
b0c6724eed [glass] Add hamburger menu icon to titlebars (#4874)
f0fa8205ac Add missing compiler flags and fix warnings (#4889)
42fc4cb6bc [wpiutil] SafeThread: Provide start/stop hooks (#4880)
cc166c98d2 [templates] Add Command-based skeleton template (#4861)
3f51f10ad3 [build] Update to 2023v3 image (#4886)
1562eae74a [ntcore] Refactor meta-topic decoding from glass (#4809)
b632b288a3 Fix usages of std::min and std::max to be windows safe (#4887)
c11bd2720f [wpilibc] Add internal function to reset Shuffleboard instance (#4884)
f1151d375f [ntcore] Add method to get server time offset (#4847)
fe1b62647f [hal,wpilib] Update documentation for getComments (NFC) (#4879)
c49a45abbd [build] Fix examples linking in incorrect jni library (#4873)
bc3d01a721 [build] Add platform check to doxygen plugin (#4862)
bc473240ae Add Jetbrains Fleet folder to .gitignore (#4872)
2121bd5fb8 [wpimath] Remove RKF45 (#4870)
835f8470d6 [build] Fix roborio cross-compiler on arm hosts (#4864)
6cfe5de00d [ntcore] Don't deadlock server on early destroy (#4863)
2ac41f3edc [hal, wpilib] Add RobotController.getComments()  (#4463)
26bdbf3d41 Java optimization and formatting fixes (#4857)
92149efa11 Spelling and grammar cleanups (#4849)
176fddeb4c [commands] Add functions to HID classes to allow use of axes as BooleanEvents/Triggers (#4762)
87a34af367 [templates] Add bindings to command-based template (#4838)
4534e75787 [examples] Remove redundant MotorControl example (#4837)
1cbebaa2f7 [commands] Remove final semicolon from test macro definition (#4859)
6efb9ee405 [commands] Add constructor for SwerveControllerCommand that takes a HolonomicDriveController (#4785)
1e7fcd5637 [cscore] Change run loop functions to not be mac specific (#4854)
1f940e2b60 [apriltag] Add C++ wrappers, rewrite Java/JNI to match (#4842)
a6d127aedf [build] Add missing task dependency in wpilibjExamples (#4852)
b893b3d6d3 [cscore] Add support for USB cameras on macOS (#4846)
1696a490fa [glass] Add support for alternate NT ports (#4848)
40a22d69bc [glass] Add support for alternate NT ports (#4848)
e84dbfede0 [wpilib] GenericHID: Add rumble both option (#4843)
8aa9dbfa90 [examples] Link apriltag package in examples build.gradle (#4845)
eda2fa8a17 [build] Update Spotless (#4840)
d20594db0d Fix typos (#4839)
dd8ecfdd54 [commands] Fix typo in waitUntil docs (NFC) (#4841)
17ceebfff4 [apriltag] Clean up apriltag JNI (#4823)
8b74ab389d [examples] RapidReactCommandBot: Fix array indices (#4833)
1aad3489c2 [sim] Implement PD total current and power (#4830)
2744991771 [wpimath] Fix docs in SwerveModulePosition (#4825)
ffbf6a1fa2 [commands] Disable regularly failing unit test (#4824)
fbabd0ef15 [commands] Enhance Command Sendable implementations (#4822)
7713f68772 [hal] Use atomic rather then mutex for DS Data updates (#4787)
701995d6cc [examples] Update Command-based starter project (#4778)
bf7068ac27 [wpilibc] Add missing PPS implementation for C++ (#4821)
aae0f52ca6 [ntcore] NetworkTable: fix visibility of get/set value (#4820)
ee02fb7ba7 [hal] Add support for Pulse-Per-Second signal (#4819)
518916ba02 [wpilib] Fix DS mode thread event being manual reset accidentally (#4818)
3997c6635b [hal] Update to new image, use new TCP notify callback and new duty cycle API (#4774)
cc8675a4e5 [examples] Add comment on how to view elevator sim (NFC) (#4482)
fb2c170b6e [ntcore] Simplify local startup (#4803)
7ba8a9ee1f [wpimath] ProfiledPIDController: Add to SendableRegistry (#4656)
c569d8e523 [wpilib] Joystick.getMagnitude(): use hypot() function (#4816)
2a5e89fa97 [apriltag] Improve description of pose coordinates (NFC) (#4810)
cc003c6c38 [apriltag] Fix AprilTagFieldLayout JSON name (#4814)
5522916123 [commands] CommandXBoxController bumper documentation fix (NFC) (#4815)
967b30de3a [glass] Fix NT view UpdateClients() bug (#4808)
3270d4fc86 [wpimath] Rewrite pose estimator docs (#4807)
be39678447 [apriltag] Add test to ensure apriltagjni loads (#4805)
61c75deb2a [commands] Test no-op behavior of scheduling a scheduled command (#4806)
a865f48e96 [ntcore] Pass pub/sub options as a unified PubSubOptions struct (#4794)
f66a667321 [commands] Fix incorrect Trigger docs (NFC) (#4792)
f8d4e9866e [ntcore] Clean up ntcore_test.h (#4804)
7e84ea891f [wpimath] Fix ComputerVisionUtil transform example in parameter docs (NFC) (#4800)
da3ec1be10 [wpimath] Change terminology for ArmFeedforward gravity gain (NFC) (#4791)
944dd7265d [wpilibc] Add C++ Notifier error handling, update java notifier error message (#4795)
6948cea67a [wpiutil] Fix MemoryBuffer initialization (#4797)
a31459bce6 [wpiutil] Fix UnescapeCString overflow when inputSize < 2 (#4796)
4a0ad6b48c [wpimath] Rotation2d: Add reference to angleModulus in docs (NFC) (#4786)
e6552d272e [ntcore] Remove table multi-subscriber (#4789)
bde383f763 [hal] Replace const char* with std::string_view in Driver Station sim functions (#4532)
5a52b51443 [hal] Add RobotController.getSerialNumber() (#4783)
69a66ec5ec [wpilib] Fix multiple motor safety issues (#4784)
989c9fb29a [wpimath] Revert Rotation2D change that limits angles (#4781)
0f5b08ec69 [wpigui] Update imgui to 1.89.1+ (#4780)
fba191099c [examples] AddressableLED: Add unit test (#4779)
b390cad095 [wpilibj] Consistently use ErrorMessages.requireNonNullParam (#4776)
b9772214d9 [wpilib] Sendable: Don't call setter for getter changes
342c375a71 [ntcore] Add subscriber option to exclude single publisher
b0e4053087 [ntcore] Use int for options instead of double
f3e666b7bb [cscore] Convert YUYV and UYVY directly to grayscale (#4777)
b300518bd1 [hal] Add CAN Stream API to Java through JNI bindings (#4193)
be27171236 [wpilibj] Shuffleboard: Check for null sendable (#4772)
4bbdbdfb48 [commands] Move GroupedCommands to CommandScheduler (#4728)
f18fd41ac3 [wpimath] Remove broken and obsoleted ComputerVisionUtil functions (#4775)
2d0faecf4f [glass] DataSource: Add spinlock to protect value (#4771)
348bd107fc [hal] Add CANManufacturer for The Thrifty Bot (#4773)
3149dc64b8 [examples] HatchbotInlined: Use Subsystem factories (#4765)
8618dd4160 [glass, wpilib] Replace remaining references to Speed Controller with Motor Controller (#4769)
72e21a1ed1 [apriltag] Use wpilibsuite fork of apriltag (#4764)
eab0d929e6 [commands] CommandGenericHID POV methods: Fix docs (NFC) (#4760)
6789869663 [wpilib] Call set(0) rather than disable for stopMotor (#4763)
c9dea2968d [cscore] Emit warning that USB Camera isn't supported on OSX (#4766)
8f402645f5 [commands] Fix PIDSubsystem setSetpoint behavior (#4759)
f24ad1d715 [build] Upgrade to googletest 1.12.1 (#4752)
ff88756864 [wpimath] Add new DCMotor functions for alternative calculations and reduction calculation (#4749)
f58873db8e [wpimath] Remove extra terms in matrix for pose estimator docs (#4756)
37e969b41a [wpimath] Add constructors to pose estimators with default standard deviations (#4754)
13cdc29382 [ci] Rename comment command from "/wpiformat" to "/format" (#4755)
6e23985ae6 [examples] Add main include directory to test builds (#4751)
66bb0ffb2c [examples] Add unit testing infrastructure (#4646)
74cc86c4c5 [wpimath] Make transform tests use pose/transform equality operators (#4675)
e22d8cc343 [wpimath] Use Odometry for internal state in Pose Estimation (#4668)
68dba92630 [ci] Update mac and windows builds to Java 17 (#4750)
23bfc2d9ab [sim] Remove unmaintained Gazebo support (#4736)
1f1461e254 [wpilib] Add method to enable/disable LiveWindow in test mode (#4678)
eae68fc165 [wpimath] Add tolerance for Rotation3d rotation matrix special orthogonality (#4744)
4c4545fb4b [apriltag] Suppress warning (#4743)
16ffaa754d [docs] Generate docs for apriltag subproject (#4745)
5e74ff26d8 [apriltag, build] Update native utils, add apriltag impl and JNI (#4733)
53875419a1 [hal] Allow overriding stderr printing by HAL_SendError (#4742)
aa6499e920 [ntcore] Fix special topic multi-subscriber handling (#4740)
df70351107 [build] Fix cmake install of thirdparty includes (#4741)
e9bd50ff9b [glass] NT view: clear meta-topic info on disconnect (#4732)
9b319fd56b [ntcore] Add sub option for local vs remote changes (#4731)
18d28ec5e3 [ntcore] Remove duplicate value checking from ClientImpl
bdfb625211 [ntcore] Send duplicate values to network if necessary
21003e34eb [commands] Update Subsystem factories and example to return CommandBase (#4729)
70080457d5 [commands] Refactor ProxyScheduleCommand, SelectCommand into ProxyCommand (#4534)
e82cd5147b [wpilib] Tweak Color HSV formula and use in AddressableLED (#4724)
ec124bb662 [commands] Allow unsetting a subsystem's default command (#4621)
2b2aa8eef7 [examples] Update all examples to use NWU coordinate conventions (#4725)
cb38bacfe8 [commands] Revert to original Trigger implementation (#4673)
15561338d5 [commands] Remove one more default command isFinished check (#4727)
ca35a2e097 Add simgui files to .gitignore (#4726)
20dbae0cee [examples] Renovate command-based examples (#4409)
1a59737f40 [commands] Add convenience factories (#4460)
42b6d4e3f7 Use defaulted comparison operators in C++ (#4723)
135c13958f [wpigui] Add FontAwesome (#4713)
ffbfc61532 [ntcore] Add NetworkTable table-specific listeners (#4640)
8958b2a4da [commands] Add property tests for command compositions (#4715)
e4ac09077c [wpilib] Add link to MotorSafety article (#4720)
f40de0c120 [commands] Add C++ factory templates (#4686)
51fa3e851f [build] cmake: Use FetchContent instead of ExternalProject (#4714)
1da84b2255 [wpigui] Reload fonts to scale rather than preloading (#4712)
e43e2fbc84 [wpiutil] StringExtras: Add UnescapeCString (#4707)
5804d8fa84 [ntcore] Server: Properly handle multiple subscribers (#4717)
169ef5fabf [glass] Update NT view for topicsOnly and sendAll changes (#4718)
148759ef54 [examples] CANPDP: Expand properties shown (#4687)
58ed112b51 [commands] RepeatCommand: restart on following iteration (#4706)
dd1da77d20 [readme] Fix broken CI badge (#4710)
7cda85df20 [build] Check Gradle plugin repo last to fix CI (#4711)
7ed9b13277 [build] Bump version plugin to fix null tag (#4705)
6b4f26225d [apriltag] Fix pluralization of apriltag artifacts (#4671)
b2d2924b72 [cscore] Add Y16 image support (#4702)
34ec89c041 [wpilibc] Shuffleboard SimpleWidget: Return pointer instead of reference (#4703)
e15200068d [ci] Disable HW testbench runs (#4704)
d5200db6cd [wpimath] Rename HolonomicDriveController.calculate params (#4683)
2ee3d86de4 [wpimath] Clarify Rotation3d roll-pitch-yaw direction (#4699)
9f0a8b930f [cscore] Use MFVideoFormat_L8 for Gray on Windows (#4701)
2bca43779e [cscore] Add UYVY image support (#4700)
4307d0ee8b [glass] Plot: allow for more than 11 plots (#4685)
3fe8d355a1 [examples] StateSpaceDifferentialDriveSimulation: Use encoder reversed constants (#4682)
b44034dadc [ntcore] Allow duplicate client IDs on server (#4676)
52d2c53888 [commands] Rename Java factory wait() to waitSeconds() (#4684)
76e918f71e [build] Fix JNI artifacts linking to incorrect libraries (#4680)
0bee875aff [commands] Change C++ CommandPtr to use CommandBase (#4677)
98e922313b [glass] Don't check IsConnected for NT widgets (#4674)
9a36373b8f [apriltag] Switch 2022 apriltag layout length and width values (#4670)
cf8faa9e67 [wpilib] Update values on controllable sendables (#4667)
5ec067c1f8 [ntcore] Implement keep duplicates pub/sub flag (#4666)
e962fd2916 [ntcore] Allow numeric-compatible value sets (#4620)
88bd67e7de [ci] Update clang repositories to jammy (#4665)
902e8686d3 [wpimath] Rework odometry APIs to improve feature parity (#4645)
e2d49181da Update to native utils 2023.8.0 (#4664)
149bac55b1 [cscore] Add Arducam OV9281 exposure quirk (#4663)
88f7a3ccb9 [wpimath] Fix Pose relativeTo documentation (#4661)
8acce443f0 [examples] Fix swerve examples to use getDistance for turning encoder (#4652)
295a1f8f3b [ntcore] Fix WaitForListenerQueue (#4662)
388e7a4265 [ntcore] Provide mechanism to reset internals of NT instance (#4653)
13aceea8dc [apriltag] Fix FieldDimensions argument order (#4659)
c203f3f0a9 [apriltag] Fix documentation for AprilTagFieldLayout (#4657)
f54d495c90 Fix non initialized hal functionality during motor safety init (#4658)
e6392a1570 [cmd] Change factories return type to CommandBase (#4655)
53904e7cf4 [apriltag] Split AprilTag functionality to a separate library (#4578)
2e88a496c2 [wpimath] Add support for swerve joystick normalization (#4516)
ce4c45df13 [wpimath] Rework function signatures for Pose Estimation / Odometry (#4642)
0401597d3b [readme] Add wpinet to MavenArtifacts.md (#4651)
2e5f9e45bb [wpimath] Remove encoder reset comments on Swerve, Mecanum Odometry and Pose Estimation (#4643)
e4b5795fc7 [docs] Disable Doxygen for memory to fix search (#4636)
03d0ea188c [build] cmake: Add missing wpinet to installed config file (#4637)
3082bd236b [build] Move version file to its own source set (#4638)
b7ca860417 [build] Use build cache for sign step (#4635)
64838e6367 [commands] Remove unsafe default command isFinished check (#4411)
1269d2b901 [myRobot] Disable spotbugs (#4565)
14d8506b72 [wpimath] Fix units docs for LinearSystemId::IdentifyDrivetrainSystem() (#4600)
d1d458db2b [wpimath] Constrain Rotation2d range to -pi to pi (#4611)
f656e99245 [readme] Add links to development build documentation (#4481)
6dd937cef7 [commands] Fix Trigger API docs (NFC) (#4599)
49047c85b9 [commands] Report error on C++ CommandPtr use-after-move (#4575)
d07267fed1 [ci] Upgrade containers to Ubuntu 22.04 and remove libclang installation (#4633)
b53ce1d3f0 [build, wpiutil] Switch macos to universal binaries (#4628)
5a320c326b [upstream_util, wpiutil] Refactor python scripts (#4614)
c4e526d315 [glass] Fix NT Mechanism2D (#4626)
d122e4254f [ci] Run spotlessApply after wpiformat in comment command (#4623)
5a1e7ea036 [wpilibj] FieldObject2d: Add null check to close() (#4619)
179f569113 [ntcore] Notify locally on SetDefault (#4617)
b0f6dc199d [wpilibc] ShuffleboardComponent.WithProperties: Update type (#4615)
7836f661cd [wpimath] Add missing open curly brace to units/base.h (#4613)
dbcc1de37f [wpimath] Add DifferentialDriveFeedforward classes which wrap LinearPlantInversionFeedforward (#4598)
93890c528b [wpimath] Add additional angular acceleration units (#4610)
3d8d5936f9 [wpimath] Add macro for disabling units fmt support (#4609)
2b04159dec [wpimath] Update units/base.h license header (#4608)
2764004fad [wpinet] Fix incorrect jni definitions (#4605)
85f1bb8f2b [wpiutil] Reenable jni check task (#4606)
231ae2c353 [glass] Plot: Fix Y-axis not being saved (#4594)
e92b6dd5f9 [wpilib] Fix AprilTagFieldLayout JSON property name typos (#4597)
2a8e0e1cc8 Update all dependencies that use grgit (#4596)
7d06e517e9 [commands] Move SelectCommand factory impl to header (#4581)
323524fed6 [wpimath] Remove deprecated units/units.h header (#4572)
d426873ed1 [commands] Add missing PS4 triangle methods (#4576)
5be5869b2f [apriltags] Use map as internal data model (#4577)
b1b4c1e9e7 [wpimath] Fix Pose3d transformBy rotation type (#4545)
a4054d702f [commands] Allow composing two triggers directly (#4580)
0190301e09 [wpilibc] Explicitly mark EventLoop as non-copyable/non-movable (#4579)
9d1ce6a6d9 [ntcore] Catch file open error when saving preferences (#4571)
5005e2ca04 [ntcore] Change Java event mask to EnumSet (#4564)
fa44a07938 [upstream-utils][mpack] Add upstream util for mpack (#4500)
4ba16db645 [ntcore] Various fixes and cleanups (#4544)
837415abfd [hal] Fix joysticks either crashing or returning 0 (#4570)
2c20fd0d09 [wpilib] SingleJointedArmSim: Check angle equals limit on wouldHit (#4567)
64a7136e08 [wpimath] SwerveDrivePoseEstimator: Restore comment about encoder reset (#4569)
b2b473b24a [wpilib] Add AprilTag and AprilTagFieldLayout (#4421)
7aab8fa93a [build] Update to Native Utils 2023.6.0 (#4563)
12c2851856 [commands] WrapperCommand: inherit from CommandBase (#4561)
0da169dd84 [wpimath] Remove template argument from ElevatorFeedforward (#4554)
2416827c25 [wpimath] Fix docs for pose estimator local measurement models (#4558)
1177a3522e [wpilib] Fix Xbox/PS4 POV sim for port number constructors (#4548)
102344e27a [commands] HID classes: Add missing methods, tweak return types (#4557)
1831ef3e19 [wpilib] Fix Shuffleboard SuppliedValueWidget (#4559)
a9606ce870 [wpilib] Fix Xbox/PS4 POV sim (#4546)
6c80d5eab3 [wpimath] Remove unused SymbolExports.h include from units/base.h (#4541)
b114006543 [ntcore] Unify listeners (#4536)
32fbfb7da6 [build] cmake: Install ntcore generated include files (#4540)
02465920fb [build] Update native utils to 2023.4.0 (#4539)
3a5a376465 [wpimath] Increase constexpr support in geometry data types (#4231)
1c3c86e9f1 [ntcore] Cache GetEntry(name) values (#4531)
dcda09f90a [command] Rename trigger methods (#4210)
66157397c1 [wpilib] Make drive classes follow NWU axes convention (#4079)
9e22ffbebf [ntcore] Fix null deref in NT3 client (#4530)
648ab6115c [wpigui,dlt,glass,ov] Support arm in GUI tools (#4527)
8bc3b04f5b [wpimath] Make ComputerVisionUtil use 3D geometry classes (#4528)
cfb84a6083 [wpilibc] Don't hang waiting for NT server to start (#4524)
02c47726e1 [wpimath] Remove unused odometry instance from DifferentialDrivePoseEstimator test (#4522)
b2a0093294 [ci] Revert upgrade of github-pages-deploy-action (#4521)
2a98d6b5d7 [wpimath] PIDController: Add getters for position & velocity tolerances (#4458)
9f36301dc8 [ci] Write wpiformat patch to job summary (#4519)
901fc555f4 [wpimath] Position Delta Odometry for Mecanum (#4514)
4170ec6107 [wpimath] Position Delta Odometry for Swerve (#4493)
fe400f68c5 [docs] Add wpinet to docs build (#4517)
794669b346 [ntcore] Revamp listeners (#4511)
dcfa85a5d5 [ci] Build sanitizers with clang-14 (#4518)
15ad855f1d [ntcore] Add UnitTopic<T> (C++ only) (#4497)
11244a49d9 [wpilib] Add IsConnected function to all gyros (#4465)
1d2e8eb153 [build] Update myRobot deployment (#4515)
ad53fb19b4 [hal] Use new HMB api for addressable LED (#4479)
ba850bac3b [hal] Add more shutdown checks and motor safety shutdown (#4510)
023a5989f8 [ntcore] Fix typo in NetworkServer client connect message (#4512)
c970011ccc [docs] Add Doxygen aliases used by Foonathan memory (#4509)
07a43c3d9a [readme] Document clang-format version and /wpiformat (#4503)
a05b212b04 [ci] Revert changes to wpiformat task from #4501 (#4508)
09faf31b67 [commands] Replace Command HID inheritance with delegation (#4470)
9e1f9c1133 [commands] Add command factories (#4476)
f19d2b9b84 [ci] Add NUMBER environment variable to comment command commit script (#4507)
a28f93863c [ci] Push comment command commit directly to PR (#4506)
c9f61669b8 [ci] Fix comment command commit push (#4505)
dcce5ad3b3 [ci] Update github-script API usage (#4504)
6836e5923d [wpilibc] Restore get duty cycle scale factor (#4502)
335188c652 [dlt] Add deselect/select all buttons to download view (#4499)
60a29dcb99 [glass] Field2D: Add "hidden" option for objects (#4498)
b55d5b3034 [ci] Update deprecated github actions (#4501)
10ed4b3969 [ntcore] Various NT4 fixes (#4474)
4a401b89d7 [hal, wpilib] New DS thread model and implementation (#3787)
c195b4fc46 [wpimath] Clean up PoseEstimator nominal dt docs (#4496)
8f2e34c6a3 [build] Remove wpilib prefix from CMake flat install (#4492)
150d692df7 [wpimath] Remove unused private PoseEstimator function (#4495)
3e5bfff1b5 [wpimath] FromFieldRelativeSpeeds: Add ChassisSpeeds overload (#4494)
9c7e66a27d [commands] C++: Add CommandPtr overload for SetDefaultCommand (#4488)
0ca274866b [build] Fix CMake system library opt-ins (#4487)
dc037f8d41 [commands] Remove EndlessCommand (#4483)
16cdc741cf [wpimath] Add Pose3d(Pose2d) constructor (#4485)
9d5055176d [build] cmake: Allow disabling ntcore build (#4486)
d1e66e1296 [build] Compile all java code with inline string concatenation (#4490)
1fc098e696 Enable log macros to work with no args (#4475)
878cc8defb [wpilib] LiveWindow: Add enableAllTelemetry() (#4480)
8153911160 [build] Fix MSVC runtime archiver to grab default runtime (#4478)
fbdc810887 Upgrade to C++20 (#4239)
396143004c [ntcore] Add ntcoreffi binary (#4471)
1f45732700 [build] Update to 2023.2.4 native-utils and new dependencies (#4473)
574cb41c18 [ntcore] Various fixes (#4469)
d9d6c425e7 [build] Force Java 11 source compatibility (#4472)
58b6484dbe Switch away from NI interrupt manager to custom implementation (#3705)
ca43fe2798 [wpimath] Use Units conversions in ComputerVisionUtil docs (NFC) (#4464)
87a64ccedc [hal] Convert DutyCycle Raw output to be a high time measurement (#4466)
89a3d00297 [commands] Add FinallyDo and HandleInterrupt decorators (#4412)
1497665f96 [commands] Add C++ versions of Java-only decorators (#4457)
27b173374e [wpimath] Add minLinearAccel parameter to DifferentialDriveAccelerationLimiter (#4422)
2a13dba8ac [wpilib] TrajectoryUtil: Fix ambiguous documentation (NFC) (#4461)
77301b126c [ntcore] NetworkTables 4 (#3217)
90cfa00115 [build] cmake: Fix libssh include directory order (#4459)
5cf961edb9 [commands] Refactor lambda-based commands to inherit FunctionalCommand (#4451)
b2276e47de [wpimath] Enable continuous angle input for HolonomicDriveController (#4453)
893b46139a [fieldImages] Add utilities to simplify loading of fields (#4456)
60e29627c0 [commands] C++ unique_ptr migration (#4319)
3b81cf6c35 [wpilib] Improve Color.toString (#4450)
5c067d30a0 [wpinet] WebSocket: Add SendFrames() (#4445)
ceaf493811 [wpiutil] MakeJByteArray: Use span<uint8> instead of string_view (#4446)
10e04e2b13 [examples] FrisbeeBot: Fix reference capture (#4449)
726f67c64b [build] Add exeSplitSetup (#4444)
c7b7624c1c [wpiutil] Add MessagePack utility functions (#4448)
d600529ec0 [wpinet] uv::Async: Add UnsafeSend() (#4447)
b53b3526a2 [wpimath] Add CoordinateSystem conversion for Transform3d (#4443)
38bb23eb18 [wpimath] Add scalar multiply and divide operators to all geometry classes (#4438)
3937ff8221 [wpilib] Remove deprecated Controller class (#4440)
abbfe244b5 [wpilib] Improve Color FromHSV (#4439)
4ddb8aa0dd [sim] Provide function that resets all simulation data (#4016)
a791470de7 Clean up Java warning suppressions (#4433)
17f504f548 [hal,wpilib] Fix SPI Mode Setting (#4434)
773198537c [wpiutil] Add wpi::scope_exit (#4432)
5ac658c8f0 [wpiutil] Logger: Conditionalize around WPI_LOG (#4431)
8767e4a941 [wpiutil] DataLog: Fix SetMetadata output (#4430)
8c4af073f4 [wpiutil] Synchronization: shutdown race protection (#4429)
c79f38584a [build] Fix Java integration tests (#4428)
36c08dd97c [build] Fix cmake install of fmtlib (#4426)
69b7b3dd7d [ci] Remove the Windows cmake job (#4425)
738c75fed8 [readme] Fix formatting/linting link (#4423)
4eb1d03fb3 [wpimath] Document C++ LinearFilter exception (#4417)
ba4ec6c967 [build] Fix clang-tidy false positive on Linux (#4406)
97836f0e55 [commands] Fix ProfiledPIDSubsystem setGoal behavior (#4414)
fdfb85f695 [wpimath] Remove Java LQR constructor that takes a controller gain matrix (#4419)
ab1baf4832 [wpimath] Add rotation matrix constructor to Rotation3d (#4413)
9730032866 [wpimath] Document LQR and KalmanFilter exceptions (#4418)
5b656eecf6 [wpimath] Fix HTML5 entity (#4420)
9ae38eaa7c [commands] Add owning overload to ProxyScheduleCommand (#4405)
cb33bd71df [commands] deprecate withInterrupt decorator (#4407)
d9b4e7b8bf [commands] Revert "Change grouping decorator impl to flatten nested group structures (#3335)" (#4402)
0389bf5214 [hal] REVPH: Improve handling of disconnected CAN Bus (#4169)
4267fa08d1 [wpilibc] ADIS IMUs: Fix memory leak (#4170)
65c8fbd452 [wpilib] MotorControllerGroup: Override setVoltage (#4403)
f36162fddc [wpimath] Improve Discretization internal docs (#4400)
5149f7d894 [wpimath] Add two-vector Rotation3d constructor (#4398)
20b5bed1cb [wpimath] Clean up Java Quaternion class (#4399)
f18dd1905d [build] Include all thirdparty sources in distribution (#4397)
aa9d7f1cdc [wpiutil] Import foonathan memory (#4306)
2742662254 [ci] Remove a couple of obsolete clang-tidy checks (#4396)
a5df391166 [hal, wpilib] Fix up DIO pulse API (#4387)
59e6706b75 [glass] Turn on docking by default
8461bb1e03 [glass] Add support for saving docking info
b873e208b4 [wpigui] Add support for imgui config flags
873e72df8c [build] Update imgui to 1.88 docking branch
c8bd6fc5b4 [ci] Fix comment-command (take 2) (#4395)
fed68b83b4 [ci] Fix comment-command action not running runners (#4393)
0ef8a4e1df [wpimath] Support formatting more Eigen types (#4391)
c393b3b367 [build] Update to native utils 2023.1.0 and Gradle 7.5.1 (#4392)
b5a17f762c [wpimath] Add direction to slew rate limiter (#4377)
fafc81ed1a [wpiutil] Upgrade to fmt 9.1.0 (#4389)
cc56bdc787 [wpiutil] SafeThread: Add Synchronization object variant (#4382)
4254438d8d [commands] Mark command group lifecycle methods as final (#4385)
97c15af238 [wpimath] LinearSystemId: Fix docs, move C++ impls out of header (#4388)
d22ff8a158 [wpiutil] Add JNI access to C++ stderr (#4381)
fdb5a2791f [wpiutil] jni_util: Add Mac-friendly MakeJLongArray/JArrayRef (#4383)
c3a93fb995 [commands] Revamp Interruptible (#4192)
f2a8d38d2a [commands] Rename Command.repeat to repeatedly (#4379)
9e24c6eac0 [wpiutil] Logger: paren-protect instance usage in macro (#4384)
fe4d12ce22 [wpimath] Add LTV controller derivations and make enums private (#4380)
eb08486039 [build] Fix MacOS binary rpath generation (#4376)
ccf83c634a [build] Use native-utils platform names instead of raw strings (#4375)
3fd69749e7 [docs] Upgrade to doxygen 1.9.4 (#4370)
594df5fc08 [wpinet] uv/util.h: Pull in ws2_32.lib on Windows for ntohs (#4371)
539070820d [ci] Enable asan for wpinet and wpiutil (#4369)
564a56d99b [wpinet] Fix memory leak in WorkerThreadTest (#4368)
5adf50d93c [upstream_utils] Refactor upstream_utils scripts (#4367)
d80e8039d7 [wpiutil] Suppress fmtlib clang-tidy warning in C++20 consteval contexts (#4364)
0e6d67b23b [upstream_utils] Remove yapf format disable comment (#4366)
be5270697a [build] Suppress enum-enum deprecation warning in OpenCV (#4365)
8d28851263 Add Rosetta install command to build requirements (#4363)
3d2115c93e [wpinet] include-what-you-use in MulticastTest (#4360)
91002ae3cc [wpimath] Upgrade to Drake 1.6.0 (#4361)
148c18e658 [wpinet] Upgrade to libuv 1.44.2 (#4362)
a2a5c926b6 Fix clang-tidy warnings (#4359)
ea6b1d8449 [wpiutil] Remove unused ManagedStatic class (#4358)
ac9be78e27 Use stricter C++ type conversions (#4357)
151dabb2af [wpiutil] Upgrade to fmt 9.0.0 (#4337)
340465c929 [ci] Upgrade to clang-format and clang-tidy 14 (NFC) (#4347)
d45bcddd15 [examples] Add comments to StateSpaceDifferentialDrive (#4341)
0e0786331a Update LLVM libraries to 14.0.6 (#4350)
c5db23f296 [wpimath] Add Eigen sparse matrix and iterative solver support (#4349)
44abc8dfa6 [upstream_utils] Remove git version from upstream patches (#4351)
3fdb2f767d [wpimath] Add comments with Ramsete equations (#4348)
0485f05da9 [wpilibjExamples] Upgrade jacoco to match allwpilib (#4346)
0a5eb65231 [wpinet] Handle empty txt block for mdns announcer (#4072)
19ffebaf3e [wpilib] Add reference to I2C Lockup to API Docs (NFC) (#4340)
ce1a90d639 [hal] Replace SerialHelper "goto done" with continue (#4342)
d25af48797 [ci] Make upstream_utils CI fail on untracked files (#4339)
ebb836dacb [examples] Fix negations in event loop examples (#4334)
d83e202f00 [upstream_utils] Update paths in update_fmt.py (#4338)
3ccf806064 [wpimath] Remove redundant LinearFilter.finiteDifference() argument (#4335)
6f1e01f8bd [wpimath] Document example of online filtering for LinearFilter.finiteDifference() (#4336)
1023c34b1c [readme] Update location of ni-libraries (#4333)
faa29d596c [wpilib] Improve Notifier docs (NFC) (#4326)
add00a96ed [wpimath] Improve DifferentialDriveAccelerationLimiter docs (NFC) (#4323)
82fac41244 [wpimath] Better document trackwidth parameters (NFC) (#4324)
5eb44e22a9 Format Python scripts with black (NFC) (#4325)
2e09fa7325 [build] Fix mpack cmake (#4322)
fe3c24b1ee [command] Add ignoringDisable decorator (#4305)
aa221597bc [build] Add M1 builds, change arm name, update to 2023 deps (#4315)
579a8ee229 [ci] Use one worker for Windows release Gradle build (#4318)
5105c5eab6 [wpilibj] Change "final" to "exit" in the IterativeRobotBase JavaDoc (NFC) (#4317)
787fe6e7a5 [wpiutil] Separate third party libraries (#4190)
6671f8d099 [wpigui] Update portable file dialogs (#4316)
9ac9b69aa2 [command] Reorder Scheduler operations (#4261)
e61028cb18 [build] halsim_gui: Add wpinet dependency (#4313)
661d23eaf5 [glass] Add precision setting for NetworkTable view (#4311)
666040e3e5 [hal] Throw exceptions for invalid sizes in I2C and SPI JNI (#4312)
aebc272449 [build] Upgrade to spotbugs Gradle plugin 5.0.8 (#4310)
fd884581e4 [wpilib] Add BooleanEvent/Trigger factories on HID classes (#4247)
9b1bf5c7f1 [wpimath] Move Drake and Eigen to thirdparty folders (#4307)
c9e620a920 [wpilibc] Change EventLoop data structure to vector (#4304)
41d40dd62f [wpinet] Fix libuv unused variable warning on Mac (#4299)
30f5b68264 [wpinet] Fix JNI loading error (#4295)
f7b3f4b90e [examples] Getting Started: Change Joystick to XboxController (#4194)
a99c11c14c [wpimath] Replace UKF implementation with square root form (#4168)
45b7fc445b [wpilib] Add EventLoop (#4104)
16a4888c52 [wpilib] Default off LiveWindow telemetry (#4301)
17752f1337 [ci] Split debug and release Windows builds (#4277)
abb45a68db [commands] Remove custom test wrappers (#4296)
1280a54ef3 [upstream_utils]: Make work with Python 3.8 (#4298)
f2d243fa68 [build] Change defaults for Java lints (#4300)
a4787130f4 Update using development build to work with 2023 gradlerio (#4294)
af7985e46c [wpiutil] Use invoke_result_t instead of result_of in future.h (#4293)
e9d1b5c2d0 [hal] Remove deprecated SimDevice functions (#4209)
45b598d236 [wpilibj] Add toString() methods to Color and Color8Bit (#4286)
fc37265da5 [wpimath] Add angle measurement convention to ArmFeedforward docs (NFC) (#4285)
a4ec13eb0e [wpilibjexamples] Remove unnecessary voltage desaturation
2fa52007af [wpilibc] Use GetBatteryVoltage() in MotorController::SetVoltage
d9f9cd1140 [wpimath] Reset prev_time on pose estimator reset (#4283)
8b6df88783 [wpilibj] Tachometer.getFrequency(): Fix bug (#4281)
345cff08c0 [wpiutil] Make wpi::array constexpr (#4278)
57428112ac [wpimath] Upgrade to Drake v1.3.0 (#4279)
a18d4ff154 [build] Fix tools not being copied when built with -Ponly* (#4276)
d1cd07b9f3 [wpigui] Add OpenURL (#4273)
e67f8e917a [glass] Use glfwSetKeyCallback for Enter key remap (#4275)
be2fedfe50 [wpimath] Add stdexcept include for std::invalid_argument (IWYU) (#4274)
7ad2be172e [build] Update native-utils to 2023.0.1 (#4272)
abc605c9c9 [ci] Update workflows to 20.04 base image (#4271)
3e94805220 [wpiutil] Reduce llvm collections patches (#4268)
db2e1d170e [upstream_utils] Document how to update thirdparty libraries (#4253)
96ebdcaf16 [wpimath] Remove unused Eigen AutoDiff module (#4267)
553b2a3b12 [upstream_utils] Fix stackwalker (#4265)
3e13ef42eb [wpilibc] Add missing std::array #include (include-what-you-use) (#4266)
d651a1fcec Fix internal deprecation warnings (#4257)
b193b318c1 [commands] Add unless() decorator (#4244)
ef3714223b [commands] Remove docs reference to obsolete interrupted() method (NFC) (#4262)
3d8dbbbac3 [readme] Add quickstart (#4225)
013efdde25 [wpinet] Wrap a number of newer libuv features (#4260)
816aa4e465 [wpilib] Add Pneumatics sim classes (#4033)
046c2c8972 [wpilibc] Rename SpeedControllerGroupTest.cpp (#4258)
d80e9cdf64 [upstream_utils] Use shallow clones for thirdparty repos (#4255)
7576136b4a [upstream_utils] Make update_llvm.py executable (#4254)
c3b223ce60 [wpiutil] Vendor llvm and update to 13.0.0 (#4224)
5aa67f56e6 [wpimath] Clean up math comments (#4252)
fff4d1f44e [wpimath] Extend Eigen warning suppression to GCC 12 (#4251)
0d9956273c [wpimath] Add CoordinateSystem.convert() translation and rotation overloads (#4227)
3fada4e0b4 [wpinet] Update to libuv 1.44.1 (#4232)
65b23ac45e [wpilibc] Fix return value of DriverStation::GetJoystickAxisType() (#4230)
4ac34c0141 [upstream_utils] Cleanup update_libuv.py (#4249)
8bd614bb1e [upstream_utils] Use "git am" instead of "git apply" for patches (#4248)
4253d6d5f0 [upstream_utils] Apply "git am" patches individually (#4250)
6a4752dcdc Fix GCC 12.1 warning false positives (#4246)
5876b40f08 [wpimath] Memoize CoordinateSystem and CoordinateAxis statics (#4241)
5983434a70 [cameraserver] Replace IterativeRobot in comment sample code with TimedRobot (#4238)
a3d44a1e69 [wpimath] Add Translation2d.getAngle() (#4217)
d364bbd5a7 [upstream_utils] Give vendor update scripts execute permissions (#4226)
f341e1b2be [wpimath] Document standard coordinate systems better (NFC) (#4228)
9af389b200 [wpinet] AddrToName: Initialize name (#4229)
2ae4adf2d7 [ci] Add wpiformat command to PRs (#4223)
178b2a1e88 Contributing.md: Correct version of clang-format used (#4222)
18db343cdc [wpiutil, wpinet] Vendor libuv, stack walker (#4219)
f0c821282a [build] Use artifactory mirror (#4220)
d673ead481 [wpinet] Move network portions of wpiutil into new wpinet library (#4077)
b33715db15 [wpimath] Add CoordinateSystem class (#4214)
99424ad562 [sim] Allow creating a PWMSim object from a PWMMotorController (#4039)
dc6f641fd2 [wpimath] PIDController: Reset position and velocity error when reset() is called. (#4064)
f20a20f3f1 [wpimath] Add 3D geometry classes (#4175)
708a4bc3bc [wpimath] Conserve previously calculated swerve module angles when updating states for stationary ChassisSpeeds (#4208)
ef7ed21a9d [wpimath] Improve accuracy of ComputerVisionUtil.calculateDistanceToTarget() (#4215)
b1abf455c1 [wpimath] LTVUnicycleController: Use LUT, provide default hyperparameters (#4213)
d5456cf278 [wpimath] LTVDifferentialDriveController: Remove unused variable (#4212)
99343d40ba [command] Remove old command-based framework (#4211)
ee03a7ad3b Remove most 2022 deprecations (#4205)
ce1a7d698a [wpimath] Refactor WheelVoltages inner class to a separate file (#4203)
87bf70fa8e [wpimath] Add LTV controllers (#4094)
ebd2a303bf [wpimath] Remove deprecated MakeMatrix() function (#4202)
e28776d361 [wpimath] LinearSystemLoop: Add extern templates for common cases
dac1429aa9 [wpimath] LQR: Use extern template instead of Impl class
e767605e94 [wpimath] Add typedefs for common types
97c493241f [wpimath] UnscentedKalmanFilter: Move implementation out-of-line
8ea90d8bc9 [wpimath] ExtendedKalmanFilter: Move implementation out-of-line
ae7b1851ec [wpimath] KalmanFilter: Use extern template instead of Impl class
e3d62c22d3 [wpimath] Add extern templates for common cases
7200c4951d [wpiutil] SymbolExports: Add WPILIB_IMPORTS for dllimport
84056c9347 [wpiutil] SymbolExports: Add EXPORT_TEMPLATE_DECLARE/DEFINE
09cf6eeecb [wpimath] ApplyDeadband: add a scale param (#3865)
03230fc842 [build,ci] Enable artifactory build cache (#4200)
63cf3aaa3f [examples] Don't square ArcadeDrive inputs in auto (#4201)
18ff694f02 [wpimath] Add Rotation2d.fromRadians factory (#4178)
4f79ceedd9 [wpilibc] Add missing #include (#4198)
f7ca72fb41 [command] Rename PerpetualCommand to EndlessCommand (#4177)
a06b3f0307 [hal] Correct documentation on updateNotifierAlarm (#4156)
d926dd1610 [wpimath] Fix pose estimator performance (#4111)
51bc893bc5 [wpiutil] CircularBuffer: Change Java package-private methods to public (#4181)
fbe761f7f6 [build] Increase Gradle JVM heap size (#4172)
5ebe911933 [wpimath] Add DifferentialDriveAccelerationLimiter (#4091)
3919250da2 [wpilibj] Remove finalizers (#4158)
b3aee28388 [commands] Allow BooleanSupplier for Trigger operations (#4103)
9d20ab3024 [wpilib] Allow disabling ElevatorSim gravity (#4145)
aaa69f6717 [ci] Remove 32-bit Windows builds (#4078)
355a11a414 Update Java linters and fix new PMD errors (#4157)
ffc69d406c [examples] Reduce suggested acceleration in Ramsete example (#4171)
922d50079a [wpimath] Units: fix comment in degreesToRotations (NFC) (#4159)
dd163b62ae [wpimath] Rotation2d: Add factory method that uses rotations (#4166)
bd80e220b9 [ci] Upgrade CMake actions (#4161)
aef4b16d4c [wpimath] Remove unnecessary NOLINT in LinearPlantInversionFeedforward (NFC) (#4155)
975171609e [wpilib] Compressor: Rename enabled to isEnabled (#4147)
5bf46a9093 [wpimath] Add ComputerVisionUtil (#4124)
f27a1f9bfb [commands] Fix JoystickButton.getAsBoolean (#4131)
1b26e2d5da [commands] Add RepeatCommand (#4009)
88222daa3d [hal] Fix misspelling in AnalogInput/Output docs (NFC) (#4153)
81c5b41ce1 [wpilibj] Document MechanismLigament2d angle unit (NFC) (#4142)
9650e6733e [wpiutil] DataLog: Document finish and thread safety (NFC) (#4140)
c8905ec29a [wpimath] Remove ImplicitModelFollower dt argument (#4119)
b4620f01f9 [wpimath] Fix Rotation2d interpolation in Java (#4125)
2e462a19d3 [wpimath] Constexprify units unary operators (#4138)
069f932e59 [build] Fix gl3w cmake build (#4139)
126e3de91a [wpilibc] Remove unused SetPriority() call from Ultrasonic (#4123)
ba0dccaae4 [wpimath] Fix reference to Rotation2d.fromRadians() (#4118)
e1b6e5f212 [wpilib] Improve MotorSafety documentation (NFC) (#4120)
8d79dc8738 [wpimath] Add ImplicitModelFollower (#4056)
78108c2aba [wpimath] Fix PIDController having incorrect error after calling SetSetpoint() (#4070)
cdafc723fb [examples] Remove unused LinearPlantInversionFeedforward includes (#4069)
0d70884dce [wpimath] Add InterpolatedTreeMap (#4073)
765efa325e [wpimath] Remove redundant column index from vectors (#4116)
89ffcbbe41 [wpimath] Update TrapezoidProfile class name in comment (NFC) (#4107)
95ae23b0e7 [wpimath] Improve EKF numerical stability (#4093)
d5cb6fed67 [wpimath] Support zero cost entries in MakeCostMatrix() (#4100)
d0fef18378 [wpimath] Remove redundant `this.` from ExtendedKalmanFilter.java (#4115)
d640c0f41f [wpimath] Fix pose estimator local measurement standard deviation docs (NFC) (#4113)
a2fa5e3ff7 [wpilibc] BatterySim: Provide non-initializer list versions of Calculate (#4076)
a3eea9958e [hal] Add link to FRC CAN Spec (NFC) (#4086)
db27331d7b [wpilib] Update DifferentialDrive docs (NFC) (#4085)
fdfb31f164 [dlt] Export boolean[] values (#4082)
f93c3331b3 [wpigui] disable changing directory when initializing on MacOS (#4092)
ab7ac4fbb9 [build] Fix various warnings in cmake builds (#4081)
bc39a1a293 [wpilibc] Fix moved pneumatics objects not destructing properly (#4068)
2668130e70 [wpimath] Remove SwerveDrivePoseEstimator encoder reset warning (#4066)
d27ed3722b [ci] Set actions workflow concurrency (#4060)
dae18308c9 [wpimath] Minor fixes to Rotation2d docs (NFC) (#4055)
d66555e42f [datalogtool] Add datalogtool
9f52d8a3b1 [wpilib] DriverStation: Add DataLog support for modes and joystick data
757ea91932 [wpilib] Add DataLogManager
02a804f1c5 [ntcore] Add DataLog support
9b500df0d9 [wpiutil] Add high speed data logging
5a89575b3a [wpiutil] Import customized LLVM MemoryBuffer
b8c4d7527b [wpiutil] Add MappedFileRegion
ac5d46cfa7 [wpilibc] Fix ProfiledPID SetTolerance default velocity value (#4054)
bc9e96e86f [wpilib] Absolute Encoder API and behavior fixes (#4052)
f88c435dd0 [hal] Add mechanism to cancel all periodic callbacks (#4049)

Change-Id: I49aa5b08abbefc7a045e99e19d48ce2cd8fc4d1b
git-subtree-dir: third_party/allwpilib
git-subtree-split: 83f1860047c86aa3330fcb41caf3b2047e074804
Signed-off-by: James Kuszmaul <jabukuszmaul+collab@gmail.com>
diff --git a/upstream_utils/llvm_patches/0002-Remove-StringRef-ArrayRef-and-Optional.patch b/upstream_utils/llvm_patches/0002-Remove-StringRef-ArrayRef-and-Optional.patch
new file mode 100644
index 0000000..eb5b759
--- /dev/null
+++ b/upstream_utils/llvm_patches/0002-Remove-StringRef-ArrayRef-and-Optional.patch
@@ -0,0 +1,1894 @@
+From afca62cd2f1616bcf2e648dc121a057d59168424 Mon Sep 17 00:00:00 2001
+From: PJ Reiniger <pj.reiniger@gmail.com>
+Date: Sat, 7 May 2022 22:09:18 -0400
+Subject: [PATCH 02/28] Remove StringRef, ArrayRef, and Optional
+
+---
+ llvm/include/llvm/ADT/PointerUnion.h          |  1 -
+ llvm/include/llvm/ADT/SmallSet.h              | 13 ++--
+ llvm/include/llvm/ADT/SmallString.h           | 77 ++++++++++---------
+ llvm/include/llvm/ADT/StringMap.h             | 34 ++++----
+ llvm/include/llvm/ADT/StringMapEntry.h        | 25 +++---
+ llvm/include/llvm/Support/Chrono.h            | 10 +--
+ llvm/include/llvm/Support/Compiler.h          |  2 +-
+ llvm/include/llvm/Support/ConvertUTF.h        | 28 ++++---
+ llvm/include/llvm/Support/DJB.h               |  6 +-
+ llvm/include/llvm/Support/ErrorHandling.h     |  9 +--
+ .../llvm/Support/SmallVectorMemoryBuffer.h    |  6 +-
+ llvm/include/llvm/Support/VersionTuple.h      | 20 ++---
+ .../llvm/Support/Windows/WindowsSupport.h     |  4 +-
+ llvm/include/llvm/Support/raw_ostream.h       | 51 ++++++------
+ llvm/lib/Support/ConvertUTFWrapper.cpp        | 32 ++++----
+ llvm/lib/Support/ErrorHandling.cpp            | 13 ++--
+ llvm/lib/Support/SmallVector.cpp              |  5 +-
+ llvm/lib/Support/StringMap.cpp                | 12 +--
+ llvm/lib/Support/raw_ostream.cpp              | 25 +++---
+ llvm/unittests/ADT/DenseMapTest.cpp           | 25 ------
+ llvm/unittests/ADT/FunctionExtrasTest.cpp     | 12 +--
+ llvm/unittests/ADT/HashingTest.cpp            |  2 +-
+ llvm/unittests/ADT/SmallPtrSetTest.cpp        |  1 -
+ llvm/unittests/ADT/SmallStringTest.cpp        | 50 ++++++------
+ llvm/unittests/ADT/SmallVectorTest.cpp        | 20 +----
+ llvm/unittests/ADT/StringMapTest.cpp          | 32 ++++----
+ llvm/unittests/Support/ConvertUTFTest.cpp     | 37 +++++----
+ 27 files changed, 248 insertions(+), 304 deletions(-)
+
+diff --git a/llvm/include/llvm/ADT/PointerUnion.h b/llvm/include/llvm/ADT/PointerUnion.h
+index 04d566bbc..1d4cc747c 100644
+--- a/llvm/include/llvm/ADT/PointerUnion.h
++++ b/llvm/include/llvm/ADT/PointerUnion.h
+@@ -17,7 +17,6 @@
+ 
+ #include "llvm/ADT/DenseMapInfo.h"
+ #include "llvm/ADT/PointerIntPair.h"
+-#include "llvm/ADT/STLExtras.h"
+ #include "llvm/Support/PointerLikeTypeTraits.h"
+ #include <algorithm>
+ #include <cassert>
+diff --git a/llvm/include/llvm/ADT/SmallSet.h b/llvm/include/llvm/ADT/SmallSet.h
+index 0eed85449..bfe93e997 100644
+--- a/llvm/include/llvm/ADT/SmallSet.h
++++ b/llvm/include/llvm/ADT/SmallSet.h
+@@ -14,15 +14,14 @@
+ #ifndef LLVM_ADT_SMALLSET_H
+ #define LLVM_ADT_SMALLSET_H
+ 
+-#include "llvm/ADT/None.h"
+ #include "llvm/ADT/SmallPtrSet.h"
+ #include "llvm/ADT/SmallVector.h"
+-#include "llvm/ADT/STLExtras.h"
+ #include "llvm/ADT/iterator.h"
+ #include "llvm/Support/Compiler.h"
+ #include "llvm/Support/type_traits.h"
+ #include <cstddef>
+ #include <functional>
++#include <optional>
+ #include <set>
+ #include <type_traits>
+ #include <utility>
+@@ -179,16 +178,16 @@ public:
+   /// concept.
+   // FIXME: Add iterators that abstract over the small and large form, and then
+   // return those here.
+-  std::pair<NoneType, bool> insert(const T &V) {
++  std::pair<std::nullopt_t, bool> insert(const T &V) {
+     if (!isSmall())
+-      return std::make_pair(None, Set.insert(V).second);
++      return std::make_pair(std::nullopt, Set.insert(V).second);
+ 
+     VIterator I = vfind(V);
+     if (I != Vector.end())    // Don't reinsert if it already exists.
+-      return std::make_pair(None, false);
++      return std::make_pair(std::nullopt, false);
+     if (Vector.size() < N) {
+       Vector.push_back(V);
+-      return std::make_pair(None, true);
++      return std::make_pair(std::nullopt, true);
+     }
+ 
+     // Otherwise, grow from vector to set.
+@@ -197,7 +196,7 @@ public:
+       Vector.pop_back();
+     }
+     Set.insert(V);
+-    return std::make_pair(None, true);
++    return std::make_pair(std::nullopt, true);
+   }
+ 
+   template <typename IterT>
+diff --git a/llvm/include/llvm/ADT/SmallString.h b/llvm/include/llvm/ADT/SmallString.h
+index 874968f0a..50cbdade4 100644
+--- a/llvm/include/llvm/ADT/SmallString.h
++++ b/llvm/include/llvm/ADT/SmallString.h
+@@ -15,8 +15,9 @@
+ #define LLVM_ADT_SMALLSTRING_H
+ 
+ #include "llvm/ADT/SmallVector.h"
+-#include "llvm/ADT/StringRef.h"
+ #include <cstddef>
++#include <string>
++#include <string_view>
+ 
+ namespace llvm {
+ 
+@@ -28,11 +29,11 @@ public:
+   /// Default ctor - Initialize to empty.
+   SmallString() = default;
+ 
+-  /// Initialize from a StringRef.
+-  SmallString(StringRef S) : SmallVector<char, InternalLen>(S.begin(), S.end()) {}
++  /// Initialize from a std::string_view.
++  SmallString(std::string_view S) : SmallVector<char, InternalLen>(S.begin(), S.end()) {}
+ 
+-  /// Initialize by concatenating a list of StringRefs.
+-  SmallString(std::initializer_list<StringRef> Refs)
++  /// Initialize by concatenating a list of std::string_views.
++  SmallString(std::initializer_list<std::string_view> Refs)
+       : SmallVector<char, InternalLen>() {
+     this->append(Refs);
+   }
+@@ -47,13 +48,13 @@ public:
+ 
+   using SmallVector<char, InternalLen>::assign;
+ 
+-  /// Assign from a StringRef.
+-  void assign(StringRef RHS) {
++  /// Assign from a std::string_view.
++  void assign(std::string_view RHS) {
+     SmallVectorImpl<char>::assign(RHS.begin(), RHS.end());
+   }
+ 
+-  /// Assign from a list of StringRefs.
+-  void assign(std::initializer_list<StringRef> Refs) {
++  /// Assign from a list of std::string_views.
++  void assign(std::initializer_list<std::string_view> Refs) {
+     this->clear();
+     append(Refs);
+   }
+@@ -64,19 +65,19 @@ public:
+ 
+   using SmallVector<char, InternalLen>::append;
+ 
+-  /// Append from a StringRef.
+-  void append(StringRef RHS) {
++  /// Append from a std::string_view.
++  void append(std::string_view RHS) {
+     SmallVectorImpl<char>::append(RHS.begin(), RHS.end());
+   }
+ 
+-  /// Append from a list of StringRefs.
+-  void append(std::initializer_list<StringRef> Refs) {
++  /// Append from a list of std::string_views.
++  void append(std::initializer_list<std::string_view> Refs) {
+     size_t CurrentSize = this->size();
+     size_t SizeNeeded = CurrentSize;
+-    for (const StringRef &Ref : Refs)
++    for (const std::string_view &Ref : Refs)
+       SizeNeeded += Ref.size();
+     this->resize_for_overwrite(SizeNeeded);
+-    for (const StringRef &Ref : Refs) {
++    for (const std::string_view &Ref : Refs) {
+       std::copy(Ref.begin(), Ref.end(), this->begin() + CurrentSize);
+       CurrentSize += Ref.size();
+     }
+@@ -89,29 +90,29 @@ public:
+ 
+   /// Check for string equality.  This is more efficient than compare() when
+   /// the relative ordering of inequal strings isn't needed.
+-  bool equals(StringRef RHS) const {
++  bool equals(std::string_view RHS) const {
+     return str().equals(RHS);
+   }
+ 
+   /// Check for string equality, ignoring case.
+-  bool equals_insensitive(StringRef RHS) const {
++  bool equals_insensitive(std::string_view RHS) const {
+     return str().equals_insensitive(RHS);
+   }
+ 
+   /// Compare two strings; the result is -1, 0, or 1 if this string is
+   /// lexicographically less than, equal to, or greater than the \p RHS.
+-  int compare(StringRef RHS) const {
++  int compare(std::string_view RHS) const {
+     return str().compare(RHS);
+   }
+ 
+   /// compare_insensitive - Compare two strings, ignoring case.
+-  int compare_insensitive(StringRef RHS) const {
++  int compare_insensitive(std::string_view RHS) const {
+     return str().compare_insensitive(RHS);
+   }
+ 
+   /// compare_numeric - Compare two strings, treating sequences of digits as
+   /// numbers.
+-  int compare_numeric(StringRef RHS) const {
++  int compare_numeric(std::string_view RHS) const {
+     return str().compare_numeric(RHS);
+   }
+ 
+@@ -120,12 +121,12 @@ public:
+   /// @{
+ 
+   /// startswith - Check if this string starts with the given \p Prefix.
+-  bool startswith(StringRef Prefix) const {
++  bool startswith(std::string_view Prefix) const {
+     return str().startswith(Prefix);
+   }
+ 
+   /// endswith - Check if this string ends with the given \p Suffix.
+-  bool endswith(StringRef Suffix) const {
++  bool endswith(std::string_view Suffix) const {
+     return str().endswith(Suffix);
+   }
+ 
+@@ -145,7 +146,7 @@ public:
+   ///
+   /// \returns The index of the first occurrence of \p Str, or npos if not
+   /// found.
+-  size_t find(StringRef Str, size_t From = 0) const {
++  size_t find(std::string_view Str, size_t From = 0) const {
+     return str().find(Str, From);
+   }
+ 
+@@ -153,7 +154,7 @@ public:
+   ///
+   /// \returns The index of the last occurrence of \p C, or npos if not
+   /// found.
+-  size_t rfind(char C, size_t From = StringRef::npos) const {
++  size_t rfind(char C, size_t From = std::string_view::npos) const {
+     return str().rfind(C, From);
+   }
+ 
+@@ -161,7 +162,7 @@ public:
+   ///
+   /// \returns The index of the last occurrence of \p Str, or npos if not
+   /// found.
+-  size_t rfind(StringRef Str) const {
++  size_t rfind(std::string_view Str) const {
+     return str().rfind(Str);
+   }
+ 
+@@ -175,7 +176,7 @@ public:
+   /// not found.
+   ///
+   /// Complexity: O(size() + Chars.size())
+-  size_t find_first_of(StringRef Chars, size_t From = 0) const {
++  size_t find_first_of(std::string_view Chars, size_t From = 0) const {
+     return str().find_first_of(Chars, From);
+   }
+ 
+@@ -189,13 +190,13 @@ public:
+   /// \p Chars, or npos if not found.
+   ///
+   /// Complexity: O(size() + Chars.size())
+-  size_t find_first_not_of(StringRef Chars, size_t From = 0) const {
++  size_t find_first_not_of(std::string_view Chars, size_t From = 0) const {
+     return str().find_first_not_of(Chars, From);
+   }
+ 
+   /// Find the last character in the string that is \p C, or npos if not
+   /// found.
+-  size_t find_last_of(char C, size_t From = StringRef::npos) const {
++  size_t find_last_of(char C, size_t From = std::string_view::npos) const {
+     return str().find_last_of(C, From);
+   }
+ 
+@@ -204,7 +205,7 @@ public:
+   ///
+   /// Complexity: O(size() + Chars.size())
+   size_t find_last_of(
+-      StringRef Chars, size_t From = StringRef::npos) const {
++      std::string_view Chars, size_t From = std::string_view::npos) const {
+     return str().find_last_of(Chars, From);
+   }
+ 
+@@ -219,7 +220,7 @@ public:
+ 
+   /// Return the number of non-overlapped occurrences of \p Str in the
+   /// string.
+-  size_t count(StringRef Str) const {
++  size_t count(std::string_view Str) const {
+     return str().count(Str);
+   }
+ 
+@@ -236,7 +237,7 @@ public:
+   /// \param N The number of characters to included in the substring. If \p N
+   /// exceeds the number of characters remaining in the string, the string
+   /// suffix (starting with \p Start) will be returned.
+-  StringRef substr(size_t Start, size_t N = StringRef::npos) const {
++  std::string_view substr(size_t Start, size_t N = std::string_view::npos) const {
+     return str().substr(Start, N);
+   }
+ 
+@@ -250,14 +251,14 @@ public:
+   /// substring. If this is npos, or less than \p Start, or exceeds the
+   /// number of characters remaining in the string, the string suffix
+   /// (starting with \p Start) will be returned.
+-  StringRef slice(size_t Start, size_t End) const {
++  std::string_view slice(size_t Start, size_t End) const {
+     return str().slice(Start, End);
+   }
+ 
+   // Extra methods.
+ 
+-  /// Explicit conversion to StringRef.
+-  StringRef str() const { return StringRef(this->data(), this->size()); }
++  /// Explicit conversion to std::string_view.
++  std::string_view str() const { return std::string_view(this->begin(), this->size()); }
+ 
+   // TODO: Make this const, if it's safe...
+   const char* c_str() {
+@@ -266,20 +267,20 @@ public:
+     return this->data();
+   }
+ 
+-  /// Implicit conversion to StringRef.
+-  operator StringRef() const { return str(); }
++  /// Implicit conversion to std::string_view.
++  operator std::string_view() const { return str(); }
+ 
+   explicit operator std::string() const {
+     return std::string(this->data(), this->size());
+   }
+ 
+   // Extra operators.
+-  SmallString &operator=(StringRef RHS) {
++  SmallString &operator=(std::string_view RHS) {
+     this->assign(RHS);
+     return *this;
+   }
+ 
+-  SmallString &operator+=(StringRef RHS) {
++  SmallString &operator+=(std::string_view RHS) {
+     this->append(RHS.begin(), RHS.end());
+     return *this;
+   }
+diff --git a/llvm/include/llvm/ADT/StringMap.h b/llvm/include/llvm/ADT/StringMap.h
+index 23248093c..8747cdb35 100644
+--- a/llvm/include/llvm/ADT/StringMap.h
++++ b/llvm/include/llvm/ADT/StringMap.h
+@@ -60,12 +60,12 @@ protected:
+   /// specified bucket will be non-null.  Otherwise, it will be null.  In either
+   /// case, the FullHashValue field of the bucket will be set to the hash value
+   /// of the string.
+-  unsigned LookupBucketFor(StringRef Key);
++  unsigned LookupBucketFor(std::string_view Key);
+ 
+   /// FindKey - Look up the bucket that contains the specified key. If it exists
+   /// in the map, return the bucket number of the key.  Otherwise return -1.
+   /// This does not modify the map.
+-  int FindKey(StringRef Key) const;
++  int FindKey(std::string_view Key) const;
+ 
+   /// RemoveKey - Remove the specified StringMapEntry from the table, but do not
+   /// delete it.  This aborts if the value isn't in the table.
+@@ -73,7 +73,7 @@ protected:
+ 
+   /// RemoveKey - Remove the StringMapEntry for the specified key from the
+   /// table, returning it.  If the key is not in the table, this returns null.
+-  StringMapEntryBase *RemoveKey(StringRef Key);
++  StringMapEntryBase *RemoveKey(std::string_view Key);
+ 
+   /// Allocate the table with the specified number of buckets and otherwise
+   /// setup the map as empty.
+@@ -126,7 +126,7 @@ public:
+       : StringMapImpl(InitialSize, static_cast<unsigned>(sizeof(MapEntryTy))),
+         Allocator(A) {}
+ 
+-  StringMap(std::initializer_list<std::pair<StringRef, ValueTy>> List)
++  StringMap(std::initializer_list<std::pair<std::string_view, ValueTy>> List)
+       : StringMapImpl(List.size(), static_cast<unsigned>(sizeof(MapEntryTy))) {
+     insert(List);
+   }
+@@ -215,14 +215,14 @@ public:
+                       StringMapKeyIterator<ValueTy>(end()));
+   }
+ 
+-  iterator find(StringRef Key) {
++  iterator find(std::string_view Key) {
+     int Bucket = FindKey(Key);
+     if (Bucket == -1)
+       return end();
+     return iterator(TheTable + Bucket, true);
+   }
+ 
+-  const_iterator find(StringRef Key) const {
++  const_iterator find(std::string_view Key) const {
+     int Bucket = FindKey(Key);
+     if (Bucket == -1)
+       return end();
+@@ -231,7 +231,7 @@ public:
+ 
+   /// lookup - Return the entry for the specified key, or a default
+   /// constructed value if no such entry exists.
+-  ValueTy lookup(StringRef Key) const {
++  ValueTy lookup(std::string_view Key) const {
+     const_iterator it = find(Key);
+     if (it != end())
+       return it->second;
+@@ -240,10 +240,10 @@ public:
+ 
+   /// Lookup the ValueTy for the \p Key, or create a default constructed value
+   /// if the key is not in the map.
+-  ValueTy &operator[](StringRef Key) { return try_emplace(Key).first->second; }
++  ValueTy &operator[](std::string_view Key) { return try_emplace(Key).first->second; }
+ 
+   /// count - Return 1 if the element is in the map, 0 otherwise.
+-  size_type count(StringRef Key) const { return find(Key) == end() ? 0 : 1; }
++  size_type count(std::string_view Key) const { return find(Key) == end() ? 0 : 1; }
+ 
+   template <typename InputTy>
+   size_type count(const StringMapEntry<InputTy> &MapEntry) const {
+@@ -293,7 +293,7 @@ public:
+   /// isn't already in the map. The bool component of the returned pair is true
+   /// if and only if the insertion takes place, and the iterator component of
+   /// the pair points to the element with key equivalent to the key of the pair.
+-  std::pair<iterator, bool> insert(std::pair<StringRef, ValueTy> KV) {
++  std::pair<iterator, bool> insert(std::pair<std::string_view, ValueTy> KV) {
+     return try_emplace(KV.first, std::move(KV.second));
+   }
+ 
+@@ -308,14 +308,14 @@ public:
+   ///  Inserts elements from initializer list ilist. If multiple elements in
+   /// the range have keys that compare equivalent, it is unspecified which
+   /// element is inserted
+-  void insert(std::initializer_list<std::pair<StringRef, ValueTy>> List) {
++  void insert(std::initializer_list<std::pair<std::string_view, ValueTy>> List) {
+     insert(List.begin(), List.end());
+   }
+ 
+   /// Inserts an element or assigns to the current element if the key already
+   /// exists. The return type is the same as try_emplace.
+   template <typename V>
+-  std::pair<iterator, bool> insert_or_assign(StringRef Key, V &&Val) {
++  std::pair<iterator, bool> insert_or_assign(std::string_view Key, V &&Val) {
+     auto Ret = try_emplace(Key, std::forward<V>(Val));
+     if (!Ret.second)
+       Ret.first->second = std::forward<V>(Val);
+@@ -327,7 +327,7 @@ public:
+   /// if and only if the insertion takes place, and the iterator component of
+   /// the pair points to the element with key equivalent to the key of the pair.
+   template <typename... ArgsTy>
+-  std::pair<iterator, bool> try_emplace(StringRef Key, ArgsTy &&... Args) {
++  std::pair<iterator, bool> try_emplace(std::string_view Key, ArgsTy &&... Args) {
+     unsigned BucketNo = LookupBucketFor(Key);
+     StringMapEntryBase *&Bucket = TheTable[BucketNo];
+     if (Bucket && Bucket != getTombstoneVal())
+@@ -373,7 +373,7 @@ public:
+     V.Destroy(Allocator);
+   }
+ 
+-  bool erase(StringRef Key) {
++  bool erase(std::string_view Key) {
+     iterator I = find(Key);
+     if (I == end())
+       return false;
+@@ -470,17 +470,17 @@ template <typename ValueTy>
+ class StringMapKeyIterator
+     : public iterator_adaptor_base<StringMapKeyIterator<ValueTy>,
+                                    StringMapConstIterator<ValueTy>,
+-                                   std::forward_iterator_tag, StringRef> {
++                                   std::forward_iterator_tag, std::string_view> {
+   using base = iterator_adaptor_base<StringMapKeyIterator<ValueTy>,
+                                      StringMapConstIterator<ValueTy>,
+-                                     std::forward_iterator_tag, StringRef>;
++                                     std::forward_iterator_tag, std::string_view>;
+ 
+ public:
+   StringMapKeyIterator() = default;
+   explicit StringMapKeyIterator(StringMapConstIterator<ValueTy> Iter)
+       : base(std::move(Iter)) {}
+ 
+-  StringRef operator*() const { return this->wrapped()->getKey(); }
++  std::string_view operator*() const { return this->wrapped()->getKey(); }
+ };
+ 
+ } // end namespace llvm
+diff --git a/llvm/include/llvm/ADT/StringMapEntry.h b/llvm/include/llvm/ADT/StringMapEntry.h
+index 6e13c8618..39976a02b 100644
+--- a/llvm/include/llvm/ADT/StringMapEntry.h
++++ b/llvm/include/llvm/ADT/StringMapEntry.h
+@@ -16,9 +16,8 @@
+ #ifndef LLVM_ADT_STRINGMAPENTRY_H
+ #define LLVM_ADT_STRINGMAPENTRY_H
+ 
+-#include "llvm/ADT/None.h"
+-#include "llvm/ADT/StringRef.h"
+-#include "llvm/ADT/STLFunctionalExtras.h"
++#include <optional>
++#include <string_view>
+ 
+ namespace llvm {
+ 
+@@ -37,13 +36,13 @@ protected:
+   /// type-erase the allocator and put it in a source file.
+   template <typename AllocatorTy>
+   static void *allocateWithKey(size_t EntrySize, size_t EntryAlign,
+-                               StringRef Key, AllocatorTy &Allocator);
++                               std::string_view Key, AllocatorTy &Allocator);
+ };
+ 
+ // Define out-of-line to dissuade inlining.
+ template <typename AllocatorTy>
+ void *StringMapEntryBase::allocateWithKey(size_t EntrySize, size_t EntryAlign,
+-                                          StringRef Key,
++                                          std::string_view Key,
+                                           AllocatorTy &Allocator) {
+   size_t KeyLength = Key.size();
+ 
+@@ -85,13 +84,13 @@ public:
+   void setValue(const ValueTy &V) { second = V; }
+ };
+ 
+-template <> class StringMapEntryStorage<NoneType> : public StringMapEntryBase {
++template <> class StringMapEntryStorage<std::nullopt_t> : public StringMapEntryBase {
+ public:
+-  explicit StringMapEntryStorage(size_t keyLength, NoneType = None)
++  explicit StringMapEntryStorage(size_t keyLength, std::nullopt_t = std::nullopt)
+       : StringMapEntryBase(keyLength) {}
+   StringMapEntryStorage(StringMapEntryStorage &entry) = delete;
+ 
+-  NoneType getValue() const { return None; }
++  std::nullopt_t getValue() const { return std::nullopt; }
+ };
+ 
+ /// StringMapEntry - This is used to represent one value that is inserted into
+@@ -102,8 +101,8 @@ class StringMapEntry final : public StringMapEntryStorage<ValueTy> {
+ public:
+   using StringMapEntryStorage<ValueTy>::StringMapEntryStorage;
+ 
+-  StringRef getKey() const {
+-    return StringRef(getKeyData(), this->getKeyLength());
++  std::string_view getKey() const {
++    return std::string_view(getKeyData(), this->getKeyLength());
+   }
+ 
+   /// getKeyData - Return the start of the string data that is the key for this
+@@ -113,14 +112,14 @@ public:
+     return reinterpret_cast<const char *>(this + 1);
+   }
+ 
+-  StringRef first() const {
+-    return StringRef(getKeyData(), this->getKeyLength());
++  std::string_view first() const {
++    return std::string_view(getKeyData(), this->getKeyLength());
+   }
+ 
+   /// Create a StringMapEntry for the specified key construct the value using
+   /// \p InitiVals.
+   template <typename AllocatorTy, typename... InitTy>
+-  static StringMapEntry *Create(StringRef key, AllocatorTy &allocator,
++  static StringMapEntry *Create(std::string_view key, AllocatorTy &allocator,
+                                 InitTy &&... initVals) {
+     return new (StringMapEntryBase::allocateWithKey(
+         sizeof(StringMapEntry), alignof(StringMapEntry), key, allocator))
+diff --git a/llvm/include/llvm/Support/Chrono.h b/llvm/include/llvm/Support/Chrono.h
+index 9c2bd45d2..a7dea19d9 100644
+--- a/llvm/include/llvm/Support/Chrono.h
++++ b/llvm/include/llvm/Support/Chrono.h
+@@ -70,7 +70,7 @@ raw_ostream &operator<<(raw_ostream &OS, sys::TimePoint<> TP);
+ template <>
+ struct format_provider<sys::TimePoint<>> {
+   static void format(const sys::TimePoint<> &TP, llvm::raw_ostream &OS,
+-                     StringRef Style);
++                     std::string_view Style);
+ };
+ 
+ namespace detail {
+@@ -122,7 +122,7 @@ private:
+     return duration_cast<duration<InternalRep, AsPeriod>>(D).count();
+   }
+ 
+-  static std::pair<InternalRep, StringRef> consumeUnit(StringRef &Style,
++  static std::pair<InternalRep, std::string_view> consumeUnit(std::string_view &Style,
+                                                         const Dur &D) {
+     using namespace std::chrono;
+     if (Style.consume_front("ns"))
+@@ -140,7 +140,7 @@ private:
+     return {D.count(), detail::unit<Period>::value};
+   }
+ 
+-  static bool consumeShowUnit(StringRef &Style) {
++  static bool consumeShowUnit(std::string_view &Style) {
+     if (Style.empty())
+       return true;
+     if (Style.consume_front("-"))
+@@ -152,9 +152,9 @@ private:
+   }
+ 
+ public:
+-  static void format(const Dur &D, llvm::raw_ostream &Stream, StringRef Style) {
++  static void format(const Dur &D, llvm::raw_ostream &Stream, std::string_view Style) {
+     InternalRep count;
+-    StringRef unit;
++    std::string_view unit;
+     std::tie(count, unit) = consumeUnit(Style, D);
+     bool show_unit = consumeShowUnit(Style);
+ 
+diff --git a/llvm/include/llvm/Support/Compiler.h b/llvm/include/llvm/Support/Compiler.h
+index 80b2dfaec..f5d726ec8 100644
+--- a/llvm/include/llvm/Support/Compiler.h
++++ b/llvm/include/llvm/Support/Compiler.h
+@@ -312,7 +312,7 @@
+ #endif
+ 
+ /// LLVM_GSL_POINTER - Apply this to non-owning classes like
+-/// StringRef to enable lifetime warnings.
++/// std::string_view to enable lifetime warnings.
+ #if LLVM_HAS_CPP_ATTRIBUTE(gsl::Pointer)
+ #define LLVM_GSL_POINTER [[gsl::Pointer]]
+ #else
+diff --git a/llvm/include/llvm/Support/ConvertUTF.h b/llvm/include/llvm/Support/ConvertUTF.h
+index 374cdb907..7f1527f51 100644
+--- a/llvm/include/llvm/Support/ConvertUTF.h
++++ b/llvm/include/llvm/Support/ConvertUTF.h
+@@ -89,12 +89,12 @@
+ #ifndef LLVM_SUPPORT_CONVERTUTF_H
+ #define LLVM_SUPPORT_CONVERTUTF_H
+ 
++#include "wpi/span.h"
++
+ #include <cstddef>
+ #include <string>
+-
+-#if defined(_WIN32)
++#include <string_view>
+ #include <system_error>
+-#endif
+ 
+ // Wrap everything in namespace llvm so that programs can link with llvm and
+ // their own version of the unicode libraries.
+@@ -183,12 +183,10 @@ unsigned getNumBytesForUTF8(UTF8 firstByte);
+ /*************************************************************************/
+ /* Below are LLVM-specific wrappers of the functions above. */
+ 
+-template <typename T> class ArrayRef;
+ template <typename T> class SmallVectorImpl;
+-class StringRef;
+ 
+ /**
+- * Convert an UTF8 StringRef to UTF8, UTF16, or UTF32 depending on
++ * Convert an UTF8 string_view to UTF8, UTF16, or UTF32 depending on
+  * WideCharWidth. The converted data is written to ResultPtr, which needs to
+  * point to at least WideCharWidth * (Source.Size() + 1) bytes. On success,
+  * ResultPtr will point one after the end of the copied string. On failure,
+@@ -196,14 +194,14 @@ class StringRef;
+  * the first character which could not be converted.
+  * \return true on success.
+  */
+-bool ConvertUTF8toWide(unsigned WideCharWidth, llvm::StringRef Source,
++bool ConvertUTF8toWide(unsigned WideCharWidth, std::string_view Source,
+                        char *&ResultPtr, const UTF8 *&ErrorPtr);
+ 
+ /**
+-* Converts a UTF-8 StringRef to a std::wstring.
++* Converts a UTF-8 string_view to a std::wstring.
+ * \return true on success.
+ */
+-bool ConvertUTF8toWide(llvm::StringRef Source, std::wstring &Result);
++bool ConvertUTF8toWide(std::string_view Source, std::wstring &Result);
+ 
+ /**
+ * Converts a UTF-8 C-string to a std::wstring.
+@@ -261,7 +259,7 @@ inline ConversionResult convertUTF8Sequence(const UTF8 **source,
+  * Returns true if a blob of text starts with a UTF-16 big or little endian byte
+  * order mark.
+  */
+-bool hasUTF16ByteOrderMark(ArrayRef<char> SrcBytes);
++bool hasUTF16ByteOrderMark(span<const char> SrcBytes);
+ 
+ /**
+  * Converts a stream of raw bytes assumed to be UTF16 into a UTF8 std::string.
+@@ -270,7 +268,7 @@ bool hasUTF16ByteOrderMark(ArrayRef<char> SrcBytes);
+  * \param [out] Out Converted UTF-8 is stored here on success.
+  * \returns true on success
+  */
+-bool convertUTF16ToUTF8String(ArrayRef<char> SrcBytes, std::string &Out);
++bool convertUTF16ToUTF8String(span<const char> SrcBytes, std::string &Out);
+ 
+ /**
+ * Converts a UTF16 string into a UTF8 std::string.
+@@ -279,22 +277,22 @@ bool convertUTF16ToUTF8String(ArrayRef<char> SrcBytes, std::string &Out);
+ * \param [out] Out Converted UTF-8 is stored here on success.
+ * \returns true on success
+ */
+-bool convertUTF16ToUTF8String(ArrayRef<UTF16> Src, std::string &Out);
++bool convertUTF16ToUTF8String(span<const UTF16> Src, std::string &Out);
+ 
+ /**
+  * Converts a UTF-8 string into a UTF-16 string with native endianness.
+  *
+  * \returns true on success
+  */
+-bool convertUTF8ToUTF16String(StringRef SrcUTF8,
++bool convertUTF8ToUTF16String(std::string_view SrcUTF8,
+                               SmallVectorImpl<UTF16> &DstUTF16);
+ 
+ #if defined(_WIN32)
+ namespace sys {
+ namespace windows {
+-std::error_code UTF8ToUTF16(StringRef utf8, SmallVectorImpl<wchar_t> &utf16);
++std::error_code UTF8ToUTF16(std::string_view utf8, SmallVectorImpl<wchar_t> &utf16);
+ /// Convert to UTF16 from the current code page used in the system
+-std::error_code CurCPToUTF16(StringRef utf8, SmallVectorImpl<wchar_t> &utf16);
++std::error_code CurCPToUTF16(std::string_view utf8, SmallVectorImpl<wchar_t> &utf16);
+ std::error_code UTF16ToUTF8(const wchar_t *utf16, size_t utf16_len,
+                             SmallVectorImpl<char> &utf8);
+ /// Convert from UTF16 to the current code page used in the system
+diff --git a/llvm/include/llvm/Support/DJB.h b/llvm/include/llvm/Support/DJB.h
+index 8a04a324a..8737cd144 100644
+--- a/llvm/include/llvm/Support/DJB.h
++++ b/llvm/include/llvm/Support/DJB.h
+@@ -13,13 +13,13 @@
+ #ifndef LLVM_SUPPORT_DJB_H
+ #define LLVM_SUPPORT_DJB_H
+ 
+-#include "llvm/ADT/StringRef.h"
++#include <string_view>
+ 
+ namespace llvm {
+ 
+ /// The Bernstein hash function used by the DWARF accelerator tables.
+-inline uint32_t djbHash(StringRef Buffer, uint32_t H = 5381) {
+-  for (unsigned char C : Buffer.bytes())
++inline uint32_t djbHash(std::string_view Buffer, uint32_t H = 5381) {
++  for (unsigned char C : Buffer)
+     H = (H << 5) + H + C;
+   return H;
+ }
+diff --git a/llvm/include/llvm/Support/ErrorHandling.h b/llvm/include/llvm/Support/ErrorHandling.h
+index 6791df6be..3f726d40b 100644
+--- a/llvm/include/llvm/Support/ErrorHandling.h
++++ b/llvm/include/llvm/Support/ErrorHandling.h
+@@ -15,10 +15,10 @@
+ #define LLVM_SUPPORT_ERRORHANDLING_H
+ 
+ #include "llvm/Support/Compiler.h"
++#include <string>
++#include <string_view>
+ 
+ namespace llvm {
+-  class StringRef;
+-  class Twine;
+ 
+   /// An error handler callback.
+   typedef void (*fatal_error_handler_t)(void *user_data,
+@@ -67,12 +67,11 @@ namespace llvm {
+ /// standard error, followed by a newline.
+ /// After the error handler is called this function will call abort(), it
+ /// does not return.
+-/// NOTE: The std::string variant was removed to avoid a <string> dependency.
+ [[noreturn]] void report_fatal_error(const char *reason,
+                                      bool gen_crash_diag = true);
+-[[noreturn]] void report_fatal_error(StringRef reason,
++[[noreturn]] void report_fatal_error(const std::string &reason,
+                                      bool gen_crash_diag = true);
+-[[noreturn]] void report_fatal_error(const Twine &reason,
++[[noreturn]] void report_fatal_error(std::string_view reason,
+                                      bool gen_crash_diag = true);
+ 
+ /// Installs a new bad alloc error handler that should be used whenever a
+diff --git a/llvm/include/llvm/Support/SmallVectorMemoryBuffer.h b/llvm/include/llvm/Support/SmallVectorMemoryBuffer.h
+index f7f2d4e54..b5e321b5f 100644
+--- a/llvm/include/llvm/Support/SmallVectorMemoryBuffer.h
++++ b/llvm/include/llvm/Support/SmallVectorMemoryBuffer.h
+@@ -35,8 +35,8 @@ public:
+                                 RequiresNullTerminator) {}
+ 
+   /// Construct a named SmallVectorMemoryBuffer from the given SmallVector
+-  /// r-value and StringRef.
+-  SmallVectorMemoryBuffer(SmallVectorImpl<char> &&SV, StringRef Name,
++  /// r-value and std::string_view.
++  SmallVectorMemoryBuffer(SmallVectorImpl<char> &&SV, std::string_view Name,
+                           bool RequiresNullTerminator = true)
+       : SV(std::move(SV)), BufferName(std::string(Name)) {
+     if (RequiresNullTerminator) {
+@@ -49,7 +49,7 @@ public:
+   // Key function.
+   ~SmallVectorMemoryBuffer() override;
+ 
+-  StringRef getBufferIdentifier() const override { return BufferName; }
++  std::string_view getBufferIdentifier() const override { return BufferName; }
+ 
+   BufferKind getBufferKind() const override { return MemoryBuffer_Malloc; }
+ 
+diff --git a/llvm/include/llvm/Support/VersionTuple.h b/llvm/include/llvm/Support/VersionTuple.h
+index 1a1072d22..3d6573bf5 100644
+--- a/llvm/include/llvm/Support/VersionTuple.h
++++ b/llvm/include/llvm/Support/VersionTuple.h
+@@ -16,14 +16,13 @@
+ 
+ #include "llvm/ADT/DenseMapInfo.h"
+ #include "llvm/ADT/Hashing.h"
+-#include "llvm/ADT/Optional.h"
+ #include "llvm/Support/HashBuilder.h"
++#include <optional>
+ #include <string>
+ #include <tuple>
+ 
+ namespace llvm {
+ class raw_ostream;
+-class StringRef;
+ 
+ /// Represents a version number in the form major[.minor[.subminor[.build]]].
+ class VersionTuple {
+@@ -70,23 +69,23 @@ public:
+   unsigned getMajor() const { return Major; }
+ 
+   /// Retrieve the minor version number, if provided.
+-  Optional<unsigned> getMinor() const {
++  std::optional<unsigned> getMinor() const {
+     if (!HasMinor)
+-      return None;
++      return std::nullopt;
+     return Minor;
+   }
+ 
+   /// Retrieve the subminor version number, if provided.
+-  Optional<unsigned> getSubminor() const {
++  std::optional<unsigned> getSubminor() const {
+     if (!HasSubminor)
+-      return None;
++      return std::nullopt;
+     return Subminor;
+   }
+ 
+   /// Retrieve the build version number, if provided.
+-  Optional<unsigned> getBuild() const {
++  std::optional<unsigned> getBuild() const {
+     if (!HasBuild)
+-      return None;
++      return std::nullopt;
+     return Build;
+   }
+ 
+@@ -173,11 +172,6 @@ public:
+ 
+   /// Retrieve a string representation of the version number.
+   std::string getAsString() const;
+-
+-  /// Try to parse the given string as a version number.
+-  /// \returns \c true if the string does not match the regular expression
+-  ///   [0-9]+(\.[0-9]+){0,3}
+-  bool tryParse(StringRef string);
+ };
+ 
+ /// Print a version number.
+diff --git a/llvm/include/llvm/Support/Windows/WindowsSupport.h b/llvm/include/llvm/Support/Windows/WindowsSupport.h
+index 917822678..180803fbd 100644
+--- a/llvm/include/llvm/Support/Windows/WindowsSupport.h
++++ b/llvm/include/llvm/Support/Windows/WindowsSupport.h
+@@ -35,8 +35,6 @@
+ 
+ #include "llvm/ADT/SmallVector.h"
+ #include "llvm/ADT/StringExtras.h"
+-#include "llvm/ADT/StringRef.h"
+-#include "llvm/ADT/Twine.h"
+ #include "llvm/Config/llvm-config.h" // Get build system configuration settings
+ #include "llvm/Support/Allocator.h"
+ #include "llvm/Support/Chrono.h"
+@@ -71,7 +69,7 @@ bool MakeErrMsg(std::string *ErrMsg, const std::string &prefix);
+ [[noreturn]] inline void ReportLastErrorFatal(const char *Msg) {
+   std::string ErrMsg;
+   MakeErrMsg(&ErrMsg, Msg);
+-  llvm::report_fatal_error(Twine(ErrMsg));
++  llvm::report_fatal_error(ErrMsg);
+ }
+ 
+ template <typename HandleTraits>
+diff --git a/llvm/include/llvm/Support/raw_ostream.h b/llvm/include/llvm/Support/raw_ostream.h
+index 58adb41cb..9a1dd7a60 100644
+--- a/llvm/include/llvm/Support/raw_ostream.h
++++ b/llvm/include/llvm/Support/raw_ostream.h
+@@ -14,9 +14,7 @@
+ #define LLVM_SUPPORT_RAW_OSTREAM_H
+ 
+ #include "llvm/ADT/SmallVector.h"
+-#include "llvm/ADT/StringRef.h"
+-#include "llvm/ADT/Optional.h"
+-#include "llvm/Support/DataTypes.h"
++#include "llvm/ADT/span.h"
+ #include <cassert>
+ #include <cstddef>
+ #include <cstdint>
+@@ -210,7 +208,22 @@ public:
+     return *this;
+   }
+ 
+-  raw_ostream &operator<<(StringRef Str) {
++  raw_ostream &operator<<(span<const uint8_t> Arr) {
++    // Inline fast path, particularly for arrays with a known length.
++    size_t Size = Arr.size();
++
++    // Make sure we can use the fast path.
++    if (Size > (size_t)(OutBufEnd - OutBufCur))
++      return write(Arr.data(), Size);
++
++    if (Size) {
++      memcpy(OutBufCur, Arr.data(), Size);
++      OutBufCur += Size;
++    }
++    return *this;
++  }
++
++  raw_ostream &operator<<(std::string_view Str) {
+     // Inline fast path, particularly for strings with a known length.
+     size_t Size = Str.size();
+ 
+@@ -229,7 +242,7 @@ public:
+     // Inline fast path, particularly for constant strings where a sufficiently
+     // smart compiler will simplify strlen.
+ 
+-    return this->operator<<(StringRef(Str));
++    return this->operator<<(std::string_view(Str));
+   }
+ 
+   raw_ostream &operator<<(const std::string &Str) {
+@@ -237,12 +250,6 @@ public:
+     return write(Str.data(), Str.length());
+   }
+ 
+-#if __cplusplus > 201402L
+-  raw_ostream &operator<<(const std::string_view &Str) {
+-    return write(Str.data(), Str.length());
+-  }
+-#endif
+-
+   raw_ostream &operator<<(const SmallVectorImpl<char> &Str) {
+     return write(Str.data(), Str.size());
+   }
+@@ -275,7 +282,7 @@ public:
+ 
+   /// Output \p Str, turning '\\', '\t', '\n', '"', and anything that doesn't
+   /// satisfy llvm::isPrint into an escape sequence.
+-  raw_ostream &write_escaped(StringRef Str, bool UseHexEscapes = false);
++  raw_ostream &write_escaped(std::string_view Str, bool UseHexEscapes = false);
+ 
+   raw_ostream &write(unsigned char C);
+   raw_ostream &write(const char *Ptr, size_t Size);
+@@ -446,7 +453,7 @@ class raw_fd_ostream : public raw_pwrite_stream {
+   bool ShouldClose;
+   bool SupportsSeeking = false;
+   bool IsRegularFile = false;
+-  mutable Optional<bool> HasColors;
++  mutable std::optional<bool> HasColors;
+ 
+ #ifdef _WIN32
+   /// True if this fd refers to a Windows console device. Mintty and other
+@@ -491,14 +498,14 @@ public:
+   /// As a special case, if Filename is "-", then the stream will use
+   /// STDOUT_FILENO instead of opening a file. This will not close the stdout
+   /// descriptor.
+-  raw_fd_ostream(StringRef Filename, std::error_code &EC);
+-  raw_fd_ostream(StringRef Filename, std::error_code &EC,
++  raw_fd_ostream(std::string_view Filename, std::error_code &EC);
++  raw_fd_ostream(std::string_view Filename, std::error_code &EC,
+                  sys::fs::CreationDisposition Disp);
+-  raw_fd_ostream(StringRef Filename, std::error_code &EC,
++  raw_fd_ostream(std::string_view Filename, std::error_code &EC,
+                  sys::fs::FileAccess Access);
+-  raw_fd_ostream(StringRef Filename, std::error_code &EC,
++  raw_fd_ostream(std::string_view Filename, std::error_code &EC,
+                  sys::fs::OpenFlags Flags);
+-  raw_fd_ostream(StringRef Filename, std::error_code &EC,
++  raw_fd_ostream(std::string_view Filename, std::error_code &EC,
+                  sys::fs::CreationDisposition Disp, sys::fs::FileAccess Access,
+                  sys::fs::OpenFlags Flags);
+ 
+@@ -603,7 +610,7 @@ public:
+   /// Open the specified file for reading/writing/seeking. If an error occurs,
+   /// information about the error is put into EC, and the stream should be
+   /// immediately destroyed.
+-  raw_fd_stream(StringRef Filename, std::error_code &EC);
++  raw_fd_stream(std::string_view Filename, std::error_code &EC);
+ 
+   /// This reads the \p Size bytes into a buffer pointed by \p Ptr.
+   ///
+@@ -683,8 +690,8 @@ public:
+ 
+   void flush() = delete;
+ 
+-  /// Return a StringRef for the vector contents.
+-  StringRef str() const { return StringRef(OS.data(), OS.size()); }
++  /// Return a std::string_view for the vector contents.
++  std::string_view str() const { return std::string_view(OS.data(), OS.size()); }
+ 
+   void reserveExtraSpace(uint64_t ExtraSize) override {
+     OS.reserve(tell() + ExtraSize);
+@@ -741,7 +748,7 @@ class Error;
+ /// for other names. For raw_fd_ostream instances, the stream writes to
+ /// a temporary file. The final output file is atomically replaced with the
+ /// temporary file after the \p Write function is finished.
+-Error writeToOutput(StringRef OutputFileName,
++Error writeToOutput(std::string_view OutputFileName,
+                     std::function<Error(raw_ostream &)> Write);
+ 
+ } // end namespace llvm
+diff --git a/llvm/lib/Support/ConvertUTFWrapper.cpp b/llvm/lib/Support/ConvertUTFWrapper.cpp
+index 392c4c489..396ab0c65 100644
+--- a/llvm/lib/Support/ConvertUTFWrapper.cpp
++++ b/llvm/lib/Support/ConvertUTFWrapper.cpp
+@@ -6,24 +6,24 @@
+ //
+ //===----------------------------------------------------------------------===//
+ 
+-#include "llvm/ADT/ArrayRef.h"
+-#include "llvm/ADT/StringRef.h"
++#include "llvm/ADT/span.h"
+ #include "llvm/Support/ConvertUTF.h"
+ #include "llvm/Support/ErrorHandling.h"
+ #include "llvm/Support/SwapByteOrder.h"
+ #include <string>
++#include <string_view>
+ #include <vector>
+ 
+ namespace llvm {
+ 
+-bool ConvertUTF8toWide(unsigned WideCharWidth, llvm::StringRef Source,
++bool ConvertUTF8toWide(unsigned WideCharWidth, std::string_view Source,
+                        char *&ResultPtr, const UTF8 *&ErrorPtr) {
+   assert(WideCharWidth == 1 || WideCharWidth == 2 || WideCharWidth == 4);
+   ConversionResult result = conversionOK;
+   // Copy the character span over.
+   if (WideCharWidth == 1) {
+-    const UTF8 *Pos = reinterpret_cast<const UTF8*>(Source.begin());
+-    if (!isLegalUTF8String(&Pos, reinterpret_cast<const UTF8*>(Source.end()))) {
++    const UTF8 *Pos = reinterpret_cast<const UTF8*>(Source.data());
++    if (!isLegalUTF8String(&Pos, reinterpret_cast<const UTF8*>(Source.data() + Source.size()))) {
+       result = sourceIllegal;
+       ErrorPtr = Pos;
+     } else {
+@@ -77,13 +77,13 @@ bool ConvertCodePointToUTF8(unsigned Source, char *&ResultPtr) {
+   return true;
+ }
+ 
+-bool hasUTF16ByteOrderMark(ArrayRef<char> S) {
++bool hasUTF16ByteOrderMark(span<const char> S) {
+   return (S.size() >= 2 &&
+           ((S[0] == '\xff' && S[1] == '\xfe') ||
+            (S[0] == '\xfe' && S[1] == '\xff')));
+ }
+ 
+-bool convertUTF16ToUTF8String(ArrayRef<char> SrcBytes, std::string &Out) {
++bool convertUTF16ToUTF8String(span<const char> SrcBytes, std::string &Out) {
+   assert(Out.empty());
+ 
+   // Error out on an uneven byte count.
+@@ -134,14 +134,14 @@ bool convertUTF16ToUTF8String(ArrayRef<char> SrcBytes, std::string &Out) {
+   return true;
+ }
+ 
+-bool convertUTF16ToUTF8String(ArrayRef<UTF16> Src, std::string &Out)
++bool convertUTF16ToUTF8String(span<const UTF16> Src, std::string &Out)
+ {
+   return convertUTF16ToUTF8String(
+-      llvm::ArrayRef<char>(reinterpret_cast<const char *>(Src.data()),
++      span<const char>(reinterpret_cast<const char *>(Src.data()),
+       Src.size() * sizeof(UTF16)), Out);
+ }
+ 
+-bool convertUTF8ToUTF16String(StringRef SrcUTF8,
++bool convertUTF8ToUTF16String(std::string_view SrcUTF8,
+                               SmallVectorImpl<UTF16> &DstUTF16) {
+   assert(DstUTF16.empty());
+ 
+@@ -152,8 +152,8 @@ bool convertUTF8ToUTF16String(StringRef SrcUTF8,
+     return true;
+   }
+ 
+-  const UTF8 *Src = reinterpret_cast<const UTF8 *>(SrcUTF8.begin());
+-  const UTF8 *SrcEnd = reinterpret_cast<const UTF8 *>(SrcUTF8.end());
++  const UTF8 *Src = reinterpret_cast<const UTF8 *>(SrcUTF8.data());
++  const UTF8 *SrcEnd = reinterpret_cast<const UTF8 *>(SrcUTF8.data() + SrcUTF8.size());
+ 
+   // Allocate the same number of UTF-16 code units as UTF-8 code units. Encoding
+   // as UTF-16 should always require the same amount or less code units than the
+@@ -184,7 +184,7 @@ static_assert(sizeof(wchar_t) == 1 || sizeof(wchar_t) == 2 ||
+               "Expected wchar_t to be 1, 2, or 4 bytes");
+ 
+ template <typename TResult>
+-static inline bool ConvertUTF8toWideInternal(llvm::StringRef Source,
++static inline bool ConvertUTF8toWideInternal(std::string_view Source,
+                                              TResult &Result) {
+   // Even in the case of UTF-16, the number of bytes in a UTF-8 string is
+   // at least as large as the number of elements in the resulting wide
+@@ -200,7 +200,7 @@ static inline bool ConvertUTF8toWideInternal(llvm::StringRef Source,
+   return true;
+ }
+ 
+-bool ConvertUTF8toWide(llvm::StringRef Source, std::wstring &Result) {
++bool ConvertUTF8toWide(std::string_view Source, std::wstring &Result) {
+   return ConvertUTF8toWideInternal(Source, Result);
+ }
+ 
+@@ -209,7 +209,7 @@ bool ConvertUTF8toWide(const char *Source, std::wstring &Result) {
+     Result.clear();
+     return true;
+   }
+-  return ConvertUTF8toWide(llvm::StringRef(Source), Result);
++  return ConvertUTF8toWide(std::string_view(Source), Result);
+ }
+ 
+ bool convertWideToUTF8(const std::wstring &Source, std::string &Result) {
+@@ -224,7 +224,7 @@ bool convertWideToUTF8(const std::wstring &Source, std::string &Result) {
+     return true;
+   } else if (sizeof(wchar_t) == 2) {
+     return convertUTF16ToUTF8String(
+-        llvm::ArrayRef<UTF16>(reinterpret_cast<const UTF16 *>(Source.data()),
++        span<const UTF16>(reinterpret_cast<const UTF16 *>(Source.data()),
+                               Source.size()),
+         Result);
+   } else if (sizeof(wchar_t) == 4) {
+diff --git a/llvm/lib/Support/ErrorHandling.cpp b/llvm/lib/Support/ErrorHandling.cpp
+index 80c0e0043..8ae8fb8b4 100644
+--- a/llvm/lib/Support/ErrorHandling.cpp
++++ b/llvm/lib/Support/ErrorHandling.cpp
+@@ -14,7 +14,6 @@
+ #include "llvm/Support/ErrorHandling.h"
+ #include "llvm-c/ErrorHandling.h"
+ #include "llvm/ADT/SmallVector.h"
+-#include "llvm/ADT/Twine.h"
+ #include "llvm/Config/config.h"
+ #include "llvm/Support/Debug.h"
+ #include "llvm/Support/Errc.h"
+@@ -80,14 +79,14 @@ void llvm::remove_fatal_error_handler() {
+ }
+ 
+ void llvm::report_fatal_error(const char *Reason, bool GenCrashDiag) {
+-  report_fatal_error(Twine(Reason), GenCrashDiag);
++  report_fatal_error(std::string_view(Reason), GenCrashDiag);
+ }
+ 
+-void llvm::report_fatal_error(StringRef Reason, bool GenCrashDiag) {
+-  report_fatal_error(Twine(Reason), GenCrashDiag);
++void llvm::report_fatal_error(const std::string &Reason, bool GenCrashDiag) {
++  report_fatal_error(std::string_view(Reason), GenCrashDiag);
+ }
+ 
+-void llvm::report_fatal_error(const Twine &Reason, bool GenCrashDiag) {
++void llvm::report_fatal_error(std::string_view Reason, bool GenCrashDiag) {
+   llvm::fatal_error_handler_t handler = nullptr;
+   void* handlerData = nullptr;
+   {
+@@ -101,7 +100,7 @@ void llvm::report_fatal_error(const Twine &Reason, bool GenCrashDiag) {
+   }
+ 
+   if (handler) {
+-    handler(handlerData, Reason.str().c_str(), GenCrashDiag);
++    handler(handlerData, std::string{Reason}.c_str(), GenCrashDiag);
+   } else {
+     // Blast the result out to stderr.  We don't try hard to make sure this
+     // succeeds (e.g. handling EINTR) and we can't use errs() here because
+@@ -109,7 +108,7 @@ void llvm::report_fatal_error(const Twine &Reason, bool GenCrashDiag) {
+     SmallVector<char, 64> Buffer;
+     raw_svector_ostream OS(Buffer);
+     OS << "LLVM ERROR: " << Reason << "\n";
+-    StringRef MessageStr = OS.str();
++    std::string_view MessageStr = OS.str();
+     ssize_t written = ::write(2, MessageStr.data(), MessageStr.size());
+     (void)written; // If something went wrong, we deliberately just give up.
+   }
+diff --git a/llvm/lib/Support/SmallVector.cpp b/llvm/lib/Support/SmallVector.cpp
+index 8cafbc7fa..8bad715e4 100644
+--- a/llvm/lib/Support/SmallVector.cpp
++++ b/llvm/lib/Support/SmallVector.cpp
+@@ -11,7 +11,6 @@
+ //===----------------------------------------------------------------------===//
+ 
+ #include "llvm/ADT/SmallVector.h"
+-#include "llvm/ADT/Twine.h"
+ #include "llvm/Support/MemAlloc.h"
+ #include <cstdint>
+ #ifdef LLVM_ENABLE_EXCEPTIONS
+@@ -67,7 +66,7 @@ static void report_size_overflow(size_t MinSize, size_t MaxSize) {
+ #ifdef LLVM_ENABLE_EXCEPTIONS
+   throw std::length_error(Reason);
+ #else
+-  report_fatal_error(Twine(Reason));
++  report_fatal_error(Reason);
+ #endif
+ }
+ 
+@@ -81,7 +80,7 @@ static void report_at_maximum_capacity(size_t MaxSize) {
+ #ifdef LLVM_ENABLE_EXCEPTIONS
+   throw std::length_error(Reason);
+ #else
+-  report_fatal_error(Twine(Reason));
++  report_fatal_error(Reason);
+ #endif
+ }
+ 
+diff --git a/llvm/lib/Support/StringMap.cpp b/llvm/lib/Support/StringMap.cpp
+index 012c785b4..317f4ee43 100644
+--- a/llvm/lib/Support/StringMap.cpp
++++ b/llvm/lib/Support/StringMap.cpp
+@@ -70,7 +70,7 @@ void StringMapImpl::init(unsigned InitSize) {
+ /// specified bucket will be non-null.  Otherwise, it will be null.  In either
+ /// case, the FullHashValue field of the bucket will be set to the hash value
+ /// of the string.
+-unsigned StringMapImpl::LookupBucketFor(StringRef Name) {
++unsigned StringMapImpl::LookupBucketFor(std::string_view Name) {
+   unsigned HTSize = NumBuckets;
+   if (HTSize == 0) { // Hash table unallocated so far?
+     init(16);
+@@ -110,7 +110,7 @@ unsigned StringMapImpl::LookupBucketFor(StringRef Name) {
+       // Do the comparison like this because Name isn't necessarily
+       // null-terminated!
+       char *ItemStr = (char *)BucketItem + ItemSize;
+-      if (Name == StringRef(ItemStr, BucketItem->getKeyLength())) {
++      if (Name == std::string_view(ItemStr, BucketItem->getKeyLength())) {
+         // We found a match!
+         return BucketNo;
+       }
+@@ -128,7 +128,7 @@ unsigned StringMapImpl::LookupBucketFor(StringRef Name) {
+ /// FindKey - Look up the bucket that contains the specified key. If it exists
+ /// in the map, return the bucket number of the key.  Otherwise return -1.
+ /// This does not modify the map.
+-int StringMapImpl::FindKey(StringRef Key) const {
++int StringMapImpl::FindKey(std::string_view Key) const {
+   unsigned HTSize = NumBuckets;
+   if (HTSize == 0)
+     return -1; // Really empty table?
+@@ -154,7 +154,7 @@ int StringMapImpl::FindKey(StringRef Key) const {
+       // Do the comparison like this because NameStart isn't necessarily
+       // null-terminated!
+       char *ItemStr = (char *)BucketItem + ItemSize;
+-      if (Key == StringRef(ItemStr, BucketItem->getKeyLength())) {
++      if (Key == std::string_view(ItemStr, BucketItem->getKeyLength())) {
+         // We found a match!
+         return BucketNo;
+       }
+@@ -173,14 +173,14 @@ int StringMapImpl::FindKey(StringRef Key) const {
+ /// delete it.  This aborts if the value isn't in the table.
+ void StringMapImpl::RemoveKey(StringMapEntryBase *V) {
+   const char *VStr = (char *)V + ItemSize;
+-  StringMapEntryBase *V2 = RemoveKey(StringRef(VStr, V->getKeyLength()));
++  StringMapEntryBase *V2 = RemoveKey(std::string_view(VStr, V->getKeyLength()));
+   (void)V2;
+   assert(V == V2 && "Didn't find key?");
+ }
+ 
+ /// RemoveKey - Remove the StringMapEntry for the specified key from the
+ /// table, returning it.  If the key is not in the table, this returns null.
+-StringMapEntryBase *StringMapImpl::RemoveKey(StringRef Key) {
++StringMapEntryBase *StringMapImpl::RemoveKey(std::string_view Key) {
+   int Bucket = FindKey(Key);
+   if (Bucket == -1)
+     return nullptr;
+diff --git a/llvm/lib/Support/raw_ostream.cpp b/llvm/lib/Support/raw_ostream.cpp
+index 69d4fe96b..e4c318eb8 100644
+--- a/llvm/lib/Support/raw_ostream.cpp
++++ b/llvm/lib/Support/raw_ostream.cpp
+@@ -159,7 +159,7 @@ raw_ostream &raw_ostream::write_uuid(const uuid_t UUID) {
+ }
+ 
+ 
+-raw_ostream &raw_ostream::write_escaped(StringRef Str,
++raw_ostream &raw_ostream::write_escaped(std::string_view Str,
+                                         bool UseHexEscapes) {
+   for (unsigned char c : Str) {
+     switch (c) {
+@@ -563,7 +563,7 @@ void format_object_base::home() {
+ //  raw_fd_ostream
+ //===----------------------------------------------------------------------===//
+ 
+-static int getFD(StringRef Filename, std::error_code &EC,
++static int getFD(std::string_view Filename, std::error_code &EC,
+                  sys::fs::CreationDisposition Disp, sys::fs::FileAccess Access,
+                  sys::fs::OpenFlags Flags) {
+   assert((Access & sys::fs::FA_Write) &&
+@@ -589,25 +589,25 @@ static int getFD(StringRef Filename, std::error_code &EC,
+   return FD;
+ }
+ 
+-raw_fd_ostream::raw_fd_ostream(StringRef Filename, std::error_code &EC)
++raw_fd_ostream::raw_fd_ostream(std::string_view Filename, std::error_code &EC)
+     : raw_fd_ostream(Filename, EC, sys::fs::CD_CreateAlways, sys::fs::FA_Write,
+                      sys::fs::OF_None) {}
+ 
+-raw_fd_ostream::raw_fd_ostream(StringRef Filename, std::error_code &EC,
++raw_fd_ostream::raw_fd_ostream(std::string_view Filename, std::error_code &EC,
+                                sys::fs::CreationDisposition Disp)
+     : raw_fd_ostream(Filename, EC, Disp, sys::fs::FA_Write, sys::fs::OF_None) {}
+ 
+-raw_fd_ostream::raw_fd_ostream(StringRef Filename, std::error_code &EC,
++raw_fd_ostream::raw_fd_ostream(std::string_view Filename, std::error_code &EC,
+                                sys::fs::FileAccess Access)
+     : raw_fd_ostream(Filename, EC, sys::fs::CD_CreateAlways, Access,
+                      sys::fs::OF_None) {}
+ 
+-raw_fd_ostream::raw_fd_ostream(StringRef Filename, std::error_code &EC,
++raw_fd_ostream::raw_fd_ostream(std::string_view Filename, std::error_code &EC,
+                                sys::fs::OpenFlags Flags)
+     : raw_fd_ostream(Filename, EC, sys::fs::CD_CreateAlways, sys::fs::FA_Write,
+                      Flags) {}
+ 
+-raw_fd_ostream::raw_fd_ostream(StringRef Filename, std::error_code &EC,
++raw_fd_ostream::raw_fd_ostream(std::string_view Filename, std::error_code &EC,
+                                sys::fs::CreationDisposition Disp,
+                                sys::fs::FileAccess Access,
+                                sys::fs::OpenFlags Flags)
+@@ -679,8 +679,7 @@ raw_fd_ostream::~raw_fd_ostream() {
+   // has_error() and clear the error flag with clear_error() before
+   // destructing raw_ostream objects which may have errors.
+   if (has_error())
+-    report_fatal_error(Twine("IO failure on output stream: ") +
+-                           error().message(),
++    report_fatal_error("IO failure on output stream: " + error().message(),
+                        /*gen_crash_diag=*/false);
+ }
+ 
+@@ -699,7 +698,7 @@ raw_fd_ostream::~raw_fd_ostream() {
+ // the input is UTF-8 or transcode from the local codepage to UTF-8 before
+ // quoting it. If they don't, this may mess up the encoding, but this is still
+ // probably the best compromise we can make.
+-static bool write_console_impl(int FD, StringRef Data) {
++static bool write_console_impl(int FD, std::string_view Data) {
+   SmallVector<wchar_t, 256> WideText;
+ 
+   // Fall back to ::write if it wasn't valid UTF-8.
+@@ -742,7 +741,7 @@ void raw_fd_ostream::write_impl(const char *Ptr, size_t Size) {
+   // If this is a Windows console device, try re-encoding from UTF-8 to UTF-16
+   // and using WriteConsoleW. If that fails, fall back to plain write().
+   if (IsWindowsConsole)
+-    if (write_console_impl(FD, StringRef(Ptr, Size)))
++    if (write_console_impl(FD, std::string_view(Ptr, Size)))
+       return;
+ #endif
+ 
+@@ -906,7 +905,7 @@ raw_ostream &llvm::nulls() {
+ // File Streams
+ //===----------------------------------------------------------------------===//
+ 
+-raw_fd_stream::raw_fd_stream(StringRef Filename, std::error_code &EC)
++raw_fd_stream::raw_fd_stream(std::string_view Filename, std::error_code &EC)
+     : raw_fd_ostream(getFD(Filename, EC, sys::fs::CD_CreateAlways,
+                            sys::fs::FA_Write | sys::fs::FA_Read,
+                            sys::fs::OF_None),
+@@ -984,7 +983,7 @@ void buffer_ostream::anchor() {}
+ 
+ void buffer_unique_ostream::anchor() {}
+ 
+-Error llvm::writeToOutput(StringRef OutputFileName,
++Error llvm::writeToOutput(std::string_view OutputFileName,
+                           std::function<Error(raw_ostream &)> Write) {
+   if (OutputFileName == "-")
+     return Write(outs());
+diff --git a/llvm/unittests/ADT/DenseMapTest.cpp b/llvm/unittests/ADT/DenseMapTest.cpp
+index 4dd314c5c..e505b1907 100644
+--- a/llvm/unittests/ADT/DenseMapTest.cpp
++++ b/llvm/unittests/ADT/DenseMapTest.cpp
+@@ -481,31 +481,6 @@ TEST(DenseMapCustomTest, ReserveTest) {
+   }
+ }
+ 
+-// Make sure DenseMap works with StringRef keys.
+-TEST(DenseMapCustomTest, StringRefTest) {
+-  DenseMap<StringRef, int> M;
+-
+-  M["a"] = 1;
+-  M["b"] = 2;
+-  M["c"] = 3;
+-
+-  EXPECT_EQ(3u, M.size());
+-  EXPECT_EQ(1, M.lookup("a"));
+-  EXPECT_EQ(2, M.lookup("b"));
+-  EXPECT_EQ(3, M.lookup("c"));
+-
+-  EXPECT_EQ(0, M.lookup("q"));
+-
+-  // Test the empty string, spelled various ways.
+-  EXPECT_EQ(0, M.lookup(""));
+-  EXPECT_EQ(0, M.lookup(StringRef()));
+-  EXPECT_EQ(0, M.lookup(StringRef("a", 0)));
+-  M[""] = 42;
+-  EXPECT_EQ(42, M.lookup(""));
+-  EXPECT_EQ(42, M.lookup(StringRef()));
+-  EXPECT_EQ(42, M.lookup(StringRef("a", 0)));
+-}
+-
+ // Key traits that allows lookup with either an unsigned or char* key;
+ // In the latter case, "a" == 0, "b" == 1 and so on.
+ struct TestDenseMapInfo {
+diff --git a/llvm/unittests/ADT/FunctionExtrasTest.cpp b/llvm/unittests/ADT/FunctionExtrasTest.cpp
+index fc856a976..aff9d61c7 100644
+--- a/llvm/unittests/ADT/FunctionExtrasTest.cpp
++++ b/llvm/unittests/ADT/FunctionExtrasTest.cpp
+@@ -249,23 +249,23 @@ TEST(UniqueFunctionTest, Const) {
+ 
+   // Overloaded call operator correctly resolved.
+   struct ChooseCorrectOverload {
+-    StringRef operator()() { return "non-const"; }
+-    StringRef operator()() const { return "const"; }
++    std::string_view operator()() { return "non-const"; }
++    std::string_view operator()() const { return "const"; }
+   };
+-  unique_function<StringRef()> ChooseMutable = ChooseCorrectOverload();
++  unique_function<std::string_view()> ChooseMutable = ChooseCorrectOverload();
+   ChooseCorrectOverload A;
+   EXPECT_EQ("non-const", ChooseMutable());
+   EXPECT_EQ("non-const", A());
+-  unique_function<StringRef() const> ChooseConst = ChooseCorrectOverload();
++  unique_function<std::string_view() const> ChooseConst = ChooseCorrectOverload();
+   const ChooseCorrectOverload &X = A;
+   EXPECT_EQ("const", ChooseConst());
+   EXPECT_EQ("const", X());
+ }
+ 
+ // Test that overloads on unique_functions are resolved as expected.
+-std::string returns(StringRef) { return "not a function"; }
++std::string returns(std::string_view) { return "not a function"; }
+ std::string returns(unique_function<double()> F) { return "number"; }
+-std::string returns(unique_function<StringRef()> F) { return "string"; }
++std::string returns(unique_function<std::string_view()> F) { return "string"; }
+ 
+ TEST(UniqueFunctionTest, SFINAE) {
+   EXPECT_EQ("not a function", returns("boo!"));
+diff --git a/llvm/unittests/ADT/HashingTest.cpp b/llvm/unittests/ADT/HashingTest.cpp
+index bb19a5699..0634767a4 100644
+--- a/llvm/unittests/ADT/HashingTest.cpp
++++ b/llvm/unittests/ADT/HashingTest.cpp
+@@ -277,7 +277,7 @@ TEST(HashingTest, HashCombineRangeGoldenTest) {
+ #endif
+   };
+   for (unsigned i = 0; i < sizeof(golden_data)/sizeof(*golden_data); ++i) {
+-    StringRef str = golden_data[i].s;
++    std::string_view str = golden_data[i].s;
+     hash_code hash = hash_combine_range(str.begin(), str.end());
+ #if 0 // Enable this to generate paste-able text for the above structure.
+     std::string member_str = "\"" + str.str() + "\",";
+diff --git a/llvm/unittests/ADT/SmallPtrSetTest.cpp b/llvm/unittests/ADT/SmallPtrSetTest.cpp
+index 414298c4e..6f3c94eed 100644
+--- a/llvm/unittests/ADT/SmallPtrSetTest.cpp
++++ b/llvm/unittests/ADT/SmallPtrSetTest.cpp
+@@ -12,7 +12,6 @@
+ 
+ #include "llvm/ADT/SmallPtrSet.h"
+ #include "llvm/ADT/PointerIntPair.h"
+-#include "llvm/ADT/STLExtras.h"
+ #include "llvm/Support/PointerLikeTypeTraits.h"
+ #include "gtest/gtest.h"
+ 
+diff --git a/llvm/unittests/ADT/SmallStringTest.cpp b/llvm/unittests/ADT/SmallStringTest.cpp
+index b207f582e..bee3875d1 100644
+--- a/llvm/unittests/ADT/SmallStringTest.cpp
++++ b/llvm/unittests/ADT/SmallStringTest.cpp
+@@ -50,43 +50,43 @@ TEST_F(SmallStringTest, AssignRepeated) {
+ }
+ 
+ TEST_F(SmallStringTest, AssignIterPair) {
+-  StringRef abc = "abc";
++  std::string_view abc = "abc";
+   theString.assign(abc.begin(), abc.end());
+   EXPECT_EQ(3u, theString.size());
+   EXPECT_STREQ("abc", theString.c_str());
+ }
+ 
+-TEST_F(SmallStringTest, AssignStringRef) {
+-  StringRef abc = "abc";
++TEST_F(SmallStringTest, AssignStringView) {
++  std::string_view abc = "abc";
+   theString.assign(abc);
+   EXPECT_EQ(3u, theString.size());
+   EXPECT_STREQ("abc", theString.c_str());
+ }
+ 
+ TEST_F(SmallStringTest, AssignSmallVector) {
+-  StringRef abc = "abc";
++  std::string_view abc = "abc";
+   SmallVector<char, 10> abcVec(abc.begin(), abc.end());
+   theString.assign(abcVec);
+   EXPECT_EQ(3u, theString.size());
+   EXPECT_STREQ("abc", theString.c_str());
+ }
+ 
+-TEST_F(SmallStringTest, AssignStringRefs) {
++TEST_F(SmallStringTest, AssignStringViews) {
+   theString.assign({"abc", "def", "ghi"});
+   EXPECT_EQ(9u, theString.size());
+   EXPECT_STREQ("abcdefghi", theString.c_str());
+ }
+ 
+ TEST_F(SmallStringTest, AppendIterPair) {
+-  StringRef abc = "abc";
++  std::string_view abc = "abc";
+   theString.append(abc.begin(), abc.end());
+   theString.append(abc.begin(), abc.end());
+   EXPECT_EQ(6u, theString.size());
+   EXPECT_STREQ("abcabc", theString.c_str());
+ }
+ 
+-TEST_F(SmallStringTest, AppendStringRef) {
+-  StringRef abc = "abc";
++TEST_F(SmallStringTest, AppendStringView) {
++  std::string_view abc = "abc";
+   theString.append(abc);
+   theString.append(abc);
+   EXPECT_EQ(6u, theString.size());
+@@ -94,7 +94,7 @@ TEST_F(SmallStringTest, AppendStringRef) {
+ }
+ 
+ TEST_F(SmallStringTest, AppendSmallVector) {
+-  StringRef abc = "abc";
++  std::string_view abc = "abc";
+   SmallVector<char, 10> abcVec(abc.begin(), abc.end());
+   theString.append(abcVec);
+   theString.append(abcVec);
+@@ -102,11 +102,11 @@ TEST_F(SmallStringTest, AppendSmallVector) {
+   EXPECT_STREQ("abcabc", theString.c_str());
+ }
+ 
+-TEST_F(SmallStringTest, AppendStringRefs) {
++TEST_F(SmallStringTest, AppendStringViews) {
+   theString.append({"abc", "def", "ghi"});
+   EXPECT_EQ(9u, theString.size());
+   EXPECT_STREQ("abcdefghi", theString.c_str());
+-  StringRef Jkl = "jkl";
++  std::string_view Jkl = "jkl";
+   std::string Mno = "mno";
+   SmallString<4> Pqr("pqr");
+   const char *Stu = "stu";
+@@ -115,15 +115,15 @@ TEST_F(SmallStringTest, AppendStringRefs) {
+   EXPECT_STREQ("abcdefghijklmnopqrstu", theString.c_str());
+ }
+ 
+-TEST_F(SmallStringTest, StringRefConversion) {
+-  StringRef abc = "abc";
++TEST_F(SmallStringTest, StringViewConversion) {
++  std::string_view abc = "abc";
+   theString.assign(abc.begin(), abc.end());
+-  StringRef theStringRef = theString;
+-  EXPECT_EQ("abc", theStringRef);
++  std::string_view theStringView = theString;
++  EXPECT_EQ("abc", theStringView);
+ }
+ 
+ TEST_F(SmallStringTest, StdStringConversion) {
+-  StringRef abc = "abc";
++  std::string_view abc = "abc";
+   theString.assign(abc.begin(), abc.end());
+   std::string theStdString = std::string(theString);
+   EXPECT_EQ("abc", theStdString);
+@@ -149,29 +149,29 @@ TEST_F(SmallStringTest, Slice) {
+ TEST_F(SmallStringTest, Find) {
+   theString = "hello";
+   EXPECT_EQ(2U, theString.find('l'));
+-  EXPECT_EQ(StringRef::npos, theString.find('z'));
+-  EXPECT_EQ(StringRef::npos, theString.find("helloworld"));
++  EXPECT_EQ(std::string_view::npos, theString.find('z'));
++  EXPECT_EQ(std::string_view::npos, theString.find("helloworld"));
+   EXPECT_EQ(0U, theString.find("hello"));
+   EXPECT_EQ(1U, theString.find("ello"));
+-  EXPECT_EQ(StringRef::npos, theString.find("zz"));
++  EXPECT_EQ(std::string_view::npos, theString.find("zz"));
+   EXPECT_EQ(2U, theString.find("ll", 2));
+-  EXPECT_EQ(StringRef::npos, theString.find("ll", 3));
++  EXPECT_EQ(std::string_view::npos, theString.find("ll", 3));
+   EXPECT_EQ(0U, theString.find(""));
+ 
+   EXPECT_EQ(3U, theString.rfind('l'));
+-  EXPECT_EQ(StringRef::npos, theString.rfind('z'));
+-  EXPECT_EQ(StringRef::npos, theString.rfind("helloworld"));
++  EXPECT_EQ(std::string_view::npos, theString.rfind('z'));
++  EXPECT_EQ(std::string_view::npos, theString.rfind("helloworld"));
+   EXPECT_EQ(0U, theString.rfind("hello"));
+   EXPECT_EQ(1U, theString.rfind("ello"));
+-  EXPECT_EQ(StringRef::npos, theString.rfind("zz"));
++  EXPECT_EQ(std::string_view::npos, theString.rfind("zz"));
+ 
+   EXPECT_EQ(2U, theString.find_first_of('l'));
+   EXPECT_EQ(1U, theString.find_first_of("el"));
+-  EXPECT_EQ(StringRef::npos, theString.find_first_of("xyz"));
++  EXPECT_EQ(std::string_view::npos, theString.find_first_of("xyz"));
+ 
+   EXPECT_EQ(1U, theString.find_first_not_of('h'));
+   EXPECT_EQ(4U, theString.find_first_not_of("hel"));
+-  EXPECT_EQ(StringRef::npos, theString.find_first_not_of("hello"));
++  EXPECT_EQ(std::string_view::npos, theString.find_first_not_of("hello"));
+ 
+   theString = "hellx xello hell ello world foo bar hello";
+   EXPECT_EQ(36U, theString.find("hello"));
+diff --git a/llvm/unittests/ADT/SmallVectorTest.cpp b/llvm/unittests/ADT/SmallVectorTest.cpp
+index 3fbea5299..fe827546a 100644
+--- a/llvm/unittests/ADT/SmallVectorTest.cpp
++++ b/llvm/unittests/ADT/SmallVectorTest.cpp
+@@ -11,7 +11,7 @@
+ //===----------------------------------------------------------------------===//
+ 
+ #include "llvm/ADT/SmallVector.h"
+-#include "llvm/ADT/ArrayRef.h"
++#include "llvm/ADT/span.h"
+ #include "llvm/Support/Compiler.h"
+ #include "gtest/gtest.h"
+ #include <list>
+@@ -1070,24 +1070,6 @@ TEST(SmallVectorTest, DefaultInlinedElements) {
+   EXPECT_EQ(NestedV[0][0][0], 42);
+ }
+ 
+-TEST(SmallVectorTest, InitializerList) {
+-  SmallVector<int, 2> V1 = {};
+-  EXPECT_TRUE(V1.empty());
+-  V1 = {0, 0};
+-  EXPECT_TRUE(makeArrayRef(V1).equals({0, 0}));
+-  V1 = {-1, -1};
+-  EXPECT_TRUE(makeArrayRef(V1).equals({-1, -1}));
+-
+-  SmallVector<int, 2> V2 = {1, 2, 3, 4};
+-  EXPECT_TRUE(makeArrayRef(V2).equals({1, 2, 3, 4}));
+-  V2.assign({4});
+-  EXPECT_TRUE(makeArrayRef(V2).equals({4}));
+-  V2.append({3, 2});
+-  EXPECT_TRUE(makeArrayRef(V2).equals({4, 3, 2}));
+-  V2.insert(V2.begin() + 1, 5);
+-  EXPECT_TRUE(makeArrayRef(V2).equals({4, 5, 3, 2}));
+-}
+-
+ template <class VectorT>
+ class SmallVectorReferenceInvalidationTest : public SmallVectorTestBase {
+ protected:
+diff --git a/llvm/unittests/ADT/StringMapTest.cpp b/llvm/unittests/ADT/StringMapTest.cpp
+index 817fec6c3..86907ab61 100644
+--- a/llvm/unittests/ADT/StringMapTest.cpp
++++ b/llvm/unittests/ADT/StringMapTest.cpp
+@@ -7,8 +7,6 @@
+ //===----------------------------------------------------------------------===//
+ 
+ #include "llvm/ADT/StringMap.h"
+-#include "llvm/ADT/STLExtras.h"
+-#include "llvm/ADT/Twine.h"
+ #include "llvm/Support/DataTypes.h"
+ #include "gtest/gtest.h"
+ #include <limits>
+@@ -38,10 +36,10 @@ protected:
+ 
+     // Lookup tests
+     EXPECT_EQ(0u, testMap.count(testKey));
+-    EXPECT_EQ(0u, testMap.count(StringRef(testKeyFirst, testKeyLength)));
++    EXPECT_EQ(0u, testMap.count(std::string_view(testKeyFirst, testKeyLength)));
+     EXPECT_EQ(0u, testMap.count(testKeyStr));
+     EXPECT_TRUE(testMap.find(testKey) == testMap.end());
+-    EXPECT_TRUE(testMap.find(StringRef(testKeyFirst, testKeyLength)) == 
++    EXPECT_TRUE(testMap.find(std::string_view(testKeyFirst, testKeyLength)) == 
+                 testMap.end());
+     EXPECT_TRUE(testMap.find(testKeyStr) == testMap.end());
+   }
+@@ -61,10 +59,10 @@ protected:
+ 
+     // Lookup tests
+     EXPECT_EQ(1u, testMap.count(testKey));
+-    EXPECT_EQ(1u, testMap.count(StringRef(testKeyFirst, testKeyLength)));
++    EXPECT_EQ(1u, testMap.count(std::string_view(testKeyFirst, testKeyLength)));
+     EXPECT_EQ(1u, testMap.count(testKeyStr));
+     EXPECT_TRUE(testMap.find(testKey) == testMap.begin());
+-    EXPECT_TRUE(testMap.find(StringRef(testKeyFirst, testKeyLength)) == 
++    EXPECT_TRUE(testMap.find(std::string_view(testKeyFirst, testKeyLength)) == 
+                 testMap.begin());
+     EXPECT_TRUE(testMap.find(testKeyStr) == testMap.begin());
+   }
+@@ -104,10 +102,10 @@ TEST_F(StringMapTest, ConstEmptyMapTest) {
+ 
+   // Lookup tests
+   EXPECT_EQ(0u, constTestMap.count(testKey));
+-  EXPECT_EQ(0u, constTestMap.count(StringRef(testKeyFirst, testKeyLength)));
++  EXPECT_EQ(0u, constTestMap.count(std::string_view(testKeyFirst, testKeyLength)));
+   EXPECT_EQ(0u, constTestMap.count(testKeyStr));
+   EXPECT_TRUE(constTestMap.find(testKey) == constTestMap.end());
+-  EXPECT_TRUE(constTestMap.find(StringRef(testKeyFirst, testKeyLength)) ==
++  EXPECT_TRUE(constTestMap.find(std::string_view(testKeyFirst, testKeyLength)) ==
+               constTestMap.end());
+   EXPECT_TRUE(constTestMap.find(testKeyStr) == constTestMap.end());
+ }
+@@ -235,7 +233,7 @@ TEST_F(StringMapTest, StringMapEntryTest) {
+   MallocAllocator Allocator;
+   StringMap<uint32_t>::value_type *entry =
+       StringMap<uint32_t>::value_type::Create(
+-          StringRef(testKeyFirst, testKeyLength), Allocator, 1u);
++          std::string_view(testKeyFirst, testKeyLength), Allocator, 1u);
+   EXPECT_STREQ(testKey, entry->first().data());
+   EXPECT_EQ(1u, entry->second);
+   entry->Destroy(Allocator);
+@@ -246,7 +244,7 @@ TEST_F(StringMapTest, InsertTest) {
+   SCOPED_TRACE("InsertTest");
+   testMap.insert(
+       StringMap<uint32_t>::value_type::Create(
+-          StringRef(testKeyFirst, testKeyLength),
++          std::string_view(testKeyFirst, testKeyLength),
+           testMap.getAllocator(), 1u));
+   assertSingleItemMap();
+ }
+@@ -316,10 +314,10 @@ TEST_F(StringMapTest, IterMapKeysVector) {
+   Map["C"] = 3;
+   Map["D"] = 3;
+ 
+-  std::vector<StringRef> Keys{Map.keys().begin(), Map.keys().end()};
++  std::vector<std::string_view> Keys{Map.keys().begin(), Map.keys().end()};
+   llvm::sort(Keys);
+ 
+-  std::vector<StringRef> Expected{{"A", "B", "C", "D"}};
++  std::vector<std::string_view> Expected{{"A", "B", "C", "D"}};
+   EXPECT_EQ(Expected, Keys);
+ }
+ 
+@@ -333,7 +331,7 @@ TEST_F(StringMapTest, IterMapKeysSmallVector) {
+   auto Keys = to_vector<4>(Map.keys());
+   llvm::sort(Keys);
+ 
+-  SmallVector<StringRef, 4> Expected = {"A", "B", "C", "D"};
++  SmallVector<std::string_view, 4> Expected = {"A", "B", "C", "D"};
+   EXPECT_EQ(Expected, Keys);
+ }
+ 
+@@ -375,13 +373,13 @@ private:
+ TEST_F(StringMapTest, MoveOnly) {
+   StringMap<MoveOnly> t;
+   t.insert(std::make_pair("Test", MoveOnly(42)));
+-  StringRef Key = "Test";
++  std::string_view Key = "Test";
+   StringMapEntry<MoveOnly>::Create(Key, t.getAllocator(), MoveOnly(42))
+       ->Destroy(t.getAllocator());
+ }
+ 
+ TEST_F(StringMapTest, CtorArg) {
+-  StringRef Key = "Test";
++  std::string_view Key = "Test";
+   MallocAllocator Allocator;
+   StringMapEntry<MoveOnly>::Create(Key, Allocator, Immovable())
+       ->Destroy(Allocator);
+@@ -556,7 +554,7 @@ TEST(StringMapCustomTest, InitialSizeTest) {
+     CountCtorCopyAndMove::Copy = 0;
+     for (int i = 0; i < Size; ++i)
+       Map.insert(std::pair<std::string, CountCtorCopyAndMove>(
+-          std::piecewise_construct, std::forward_as_tuple(Twine(i).str()),
++          std::piecewise_construct, std::forward_as_tuple(std::to_string(i)),
+           std::forward_as_tuple(i)));
+     // After the initial move, the map will move the Elts in the Entry.
+     EXPECT_EQ((unsigned)Size * 2, CountCtorCopyAndMove::Move);
+@@ -625,7 +623,7 @@ TEST(StringMapCustomTest, StringMapEntrySize) {
+   else
+     LargeValue = std::numeric_limits<unsigned>::max() + 1ULL;
+   StringMapEntry<int> LargeEntry(LargeValue);
+-  StringRef Key = LargeEntry.getKey();
++  std::string_view Key = LargeEntry.getKey();
+   EXPECT_EQ(LargeValue, Key.size());
+ 
+   // Test that the entry can hold at least max size_t.
+diff --git a/llvm/unittests/Support/ConvertUTFTest.cpp b/llvm/unittests/Support/ConvertUTFTest.cpp
+index 7bda6ea28..9c798437a 100644
+--- a/llvm/unittests/Support/ConvertUTFTest.cpp
++++ b/llvm/unittests/Support/ConvertUTFTest.cpp
+@@ -7,7 +7,6 @@
+ //===----------------------------------------------------------------------===//
+ 
+ #include "llvm/Support/ConvertUTF.h"
+-#include "llvm/ADT/ArrayRef.h"
+ #include "gtest/gtest.h"
+ #include <string>
+ #include <vector>
+@@ -17,7 +16,7 @@ using namespace llvm;
+ TEST(ConvertUTFTest, ConvertUTF16LittleEndianToUTF8String) {
+   // Src is the look of disapproval.
+   alignas(UTF16) static const char Src[] = "\xff\xfe\xa0\x0c_\x00\xa0\x0c";
+-  ArrayRef<char> Ref(Src, sizeof(Src) - 1);
++  span<const char> Ref(Src, sizeof(Src) - 1);
+   std::string Result;
+   bool Success = convertUTF16ToUTF8String(Ref, Result);
+   EXPECT_TRUE(Success);
+@@ -28,7 +27,7 @@ TEST(ConvertUTFTest, ConvertUTF16LittleEndianToUTF8String) {
+ TEST(ConvertUTFTest, ConvertUTF16BigEndianToUTF8String) {
+   // Src is the look of disapproval.
+   alignas(UTF16) static const char Src[] = "\xfe\xff\x0c\xa0\x00_\x0c\xa0";
+-  ArrayRef<char> Ref(Src, sizeof(Src) - 1);
++  span<const char> Ref(Src, sizeof(Src) - 1);
+   std::string Result;
+   bool Success = convertUTF16ToUTF8String(Ref, Result);
+   EXPECT_TRUE(Success);
+@@ -39,7 +38,7 @@ TEST(ConvertUTFTest, ConvertUTF16BigEndianToUTF8String) {
+ TEST(ConvertUTFTest, ConvertUTF8ToUTF16String) {
+   // Src is the look of disapproval.
+   static const char Src[] = "\xe0\xb2\xa0_\xe0\xb2\xa0";
+-  StringRef Ref(Src, sizeof(Src) - 1);
++  std::string_view Ref(Src, sizeof(Src) - 1);
+   SmallVector<UTF16, 5> Result;
+   bool Success = convertUTF8ToUTF16String(Ref, Result);
+   EXPECT_TRUE(Success);
+@@ -51,37 +50,37 @@ TEST(ConvertUTFTest, ConvertUTF8ToUTF16String) {
+ 
+ TEST(ConvertUTFTest, OddLengthInput) {
+   std::string Result;
+-  bool Success = convertUTF16ToUTF8String(makeArrayRef("xxxxx", 5), Result);
++  bool Success = convertUTF16ToUTF8String(span<const char>("xxxxx", 5), Result);
+   EXPECT_FALSE(Success);
+ }
+ 
+ TEST(ConvertUTFTest, Empty) {
+   std::string Result;
+-  bool Success = convertUTF16ToUTF8String(llvm::ArrayRef<char>(None), Result);
++  bool Success = convertUTF16ToUTF8String(span<const char>(), Result);
+   EXPECT_TRUE(Success);
+   EXPECT_TRUE(Result.empty());
+ }
+ 
+ TEST(ConvertUTFTest, HasUTF16BOM) {
+-  bool HasBOM = hasUTF16ByteOrderMark(makeArrayRef("\xff\xfe", 2));
++  bool HasBOM = hasUTF16ByteOrderMark("\xff\xfe");
+   EXPECT_TRUE(HasBOM);
+-  HasBOM = hasUTF16ByteOrderMark(makeArrayRef("\xfe\xff", 2));
++  HasBOM = hasUTF16ByteOrderMark("\xfe\xff");
+   EXPECT_TRUE(HasBOM);
+-  HasBOM = hasUTF16ByteOrderMark(makeArrayRef("\xfe\xff ", 3));
++  HasBOM = hasUTF16ByteOrderMark("\xfe\xff ");
+   EXPECT_TRUE(HasBOM); // Don't care about odd lengths.
+-  HasBOM = hasUTF16ByteOrderMark(makeArrayRef("\xfe\xff\x00asdf", 6));
++  HasBOM = hasUTF16ByteOrderMark("\xfe\xff\x00asdf");
+   EXPECT_TRUE(HasBOM);
+ 
+-  HasBOM = hasUTF16ByteOrderMark(None);
++  HasBOM = hasUTF16ByteOrderMark("");
+   EXPECT_FALSE(HasBOM);
+-  HasBOM = hasUTF16ByteOrderMark(makeArrayRef("\xfe", 1));
++  HasBOM = hasUTF16ByteOrderMark("\xfe");
+   EXPECT_FALSE(HasBOM);
+ }
+ 
+ TEST(ConvertUTFTest, UTF16WrappersForConvertUTF16ToUTF8String) {
+   // Src is the look of disapproval.
+   alignas(UTF16) static const char Src[] = "\xff\xfe\xa0\x0c_\x00\xa0\x0c";
+-  ArrayRef<UTF16> SrcRef = makeArrayRef((const UTF16 *)Src, 4);
++  span<const UTF16> SrcRef((const UTF16 *)Src, 4);
+   std::string Result;
+   bool Success = convertUTF16ToUTF8String(SrcRef, Result);
+   EXPECT_TRUE(Success);
+@@ -98,7 +97,7 @@ TEST(ConvertUTFTest, ConvertUTF8toWide) {
+   std::wstring Expected(L"\x0ca0_\x0ca0");
+   EXPECT_EQ(Expected, Result);
+   Result.clear();
+-  Success = ConvertUTF8toWide(StringRef(Src, 7), Result);
++  Success = ConvertUTF8toWide(Src, Result);
+   EXPECT_TRUE(Success);
+   EXPECT_EQ(Expected, Result);
+ }
+@@ -147,7 +146,7 @@ struct ConvertUTFResultContainer {
+ };
+ 
+ std::pair<ConversionResult, std::vector<unsigned>>
+-ConvertUTF8ToUnicodeScalarsLenient(StringRef S) {
++ConvertUTF8ToUnicodeScalarsLenient(std::string_view S) {
+   const UTF8 *SourceStart = reinterpret_cast<const UTF8 *>(S.data());
+ 
+   const UTF8 *SourceNext = SourceStart;
+@@ -164,7 +163,7 @@ ConvertUTF8ToUnicodeScalarsLenient(StringRef S) {
+ }
+ 
+ std::pair<ConversionResult, std::vector<unsigned>>
+-ConvertUTF8ToUnicodeScalarsPartialLenient(StringRef S) {
++ConvertUTF8ToUnicodeScalarsPartialLenient(std::string_view S) {
+   const UTF8 *SourceStart = reinterpret_cast<const UTF8 *>(S.data());
+ 
+   const UTF8 *SourceNext = SourceStart;
+@@ -182,7 +181,7 @@ ConvertUTF8ToUnicodeScalarsPartialLenient(StringRef S) {
+ 
+ ::testing::AssertionResult
+ CheckConvertUTF8ToUnicodeScalars(ConvertUTFResultContainer Expected,
+-                                 StringRef S, bool Partial = false) {
++                                 std::string_view S, bool Partial = false) {
+   ConversionResult ErrorCode;
+   std::vector<unsigned> Decoded;
+   if (!Partial)
+@@ -277,7 +276,7 @@ TEST(ConvertUTFTest, UTF8ToUTF32Lenient) {
+   // U+0000 NULL
+   EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
+       ConvertUTFResultContainer(conversionOK).withScalars(0x0000),
+-      StringRef("\x00", 1)));
++      std::string_view("\x00", 1)));
+ 
+   // U+0080 PADDING CHARACTER
+   EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
+@@ -1051,7 +1050,7 @@ TEST(ConvertUTFTest, UTF8ToUTF32Lenient) {
+   // U+0000 NULL
+   EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(
+       ConvertUTFResultContainer(conversionOK).withScalars(0x0000),
+-      StringRef("\x00", 1)));
++      std::string_view("\x00", 1)));
+ 
+   // Overlong sequences of the above.
+   EXPECT_TRUE(CheckConvertUTF8ToUnicodeScalars(