Add Array semantic model.
Add Array semantic model.

This unblocks work on bounds and mutable check hoisting. Pete is also
tuning -O3 Array performance, which should be done on top of this
patch.

Overall, this significantly improves performance, but there is one
issue that causes regressions on Hash and QuickSort at -O3 only. This
patch does not cause the performance issue. It is already a serious
problem that needs to be fixed. This patch just adds a level of benign
function calls that further exposes the existing performance problem.
We are independently working on fixing this: <rdar://problem/17634697>
Array access forces retain/release of storage object for each inlined
call.

-O3
| benchmark    | baserun0 | baserun1 | baserun2 |  optrun0 |  optrun1 |  optrun2 |   delta | speedup |
| Dictionary   |  1072.00 |  1087.00 |  1099.00 |  1060.00 |  1132.00 |  1172.00 |   12.00 |    1.1% |
| EditDistance |  1602.00 |  1612.00 |  1611.00 |  1646.00 |  1652.00 |  1678.00 |   44.00 |   -2.7% |
| ForLoops     |  1511.00 |  1506.00 |  1519.00 |  1519.00 |  1521.00 |  1614.00 |   13.00 |   -0.9% |
| Forest       |  1245.00 |  1233.00 |  1252.00 |  1233.00 |  1248.00 |  1245.00 |    0.00 |    0.0% |
| GlobalClass  |  3624.00 |  3571.00 |  3569.00 |  3533.00 |  3540.00 |  3548.00 |   36.00 |    1.0% |
| Hash         |  1855.00 |  1760.00 |  1796.00 |  2085.00 |  2160.00 |  2075.00 |  315.00 |  -15.2% |
| Histogram    |  1695.00 |  1714.00 |  1763.00 |  1802.00 |  1865.00 |  1987.00 |  107.00 |   -5.9% |
| LinkedList   |  1584.00 |  1594.00 |  1587.00 |  1576.00 |  1598.00 |  1652.00 |    8.00 |    0.5% |
| NBody        |   700.00 |   698.00 |   691.00 |   480.00 |   479.00 |   484.00 |  212.00 |   44.3% |
| Phonebook    |  1886.00 |  1814.00 |  1849.00 |  1823.00 |  1801.00 |  1836.00 |   13.00 |    0.7% |
| QuickSort    |   248.00 |   245.00 |   237.00 |   265.00 |   287.00 |   291.00 |   28.00 |  -10.6% |
| R17315246    |   541.00 |   545.00 |   549.00 |   551.00 |   561.00 |   578.00 |   10.00 |   -1.8% |
| RC4          |  1664.00 |  1781.00 |  1776.00 |   953.00 |   961.00 |   974.00 |  711.00 |   74.6% |
| Rectangles   |   739.00 |   725.00 |   734.00 |   724.00 |   719.00 |   729.00 |    6.00 |    0.8% |
| SmallPT      |  1421.00 |  1429.00 |  1406.00 |   574.00 |   589.00 |   599.00 |  832.00 |  144.9% |
| StringWalk   |   651.00 |   647.00 |   653.00 |   645.00 |   633.00 |   673.00 |   14.00 |    2.2% |
| Total        | 26525.00 | 26445.00 | 26593.00 | 24908.00 | 25227.00 | 25793.00 | 1537.00 |    6.2% |
-Ofast
| benchmark    | baserun0 | baserun1 | baserun2 |  optrun0 |  optrun1 |  optrun2 |  delta | speedup |
| Dictionary   |  1103.00 |  1051.00 |  1047.00 |  1051.00 |  1033.00 |  1036.00 |  14.00 |    1.4% |
| EditDistance |  1554.00 |  1493.00 |  1512.00 |  1524.00 |  1511.00 |  1524.00 |  18.00 |   -1.2% |
| ForLoops     |  1644.00 |  1610.00 |  1612.00 |  1638.00 |  1628.00 |  1630.00 |  18.00 |   -1.1% |
| Forest       |  1118.00 |  1066.00 |  1105.00 |  1062.00 |  1079.00 |  1076.00 |   4.00 |    0.4% |
| GlobalClass  |  2226.00 |  2204.00 |  2194.00 |  2248.00 |  2227.00 |  2234.00 |  33.00 |   -1.5% |
| Hash         |  1006.00 |   967.00 |   975.00 |   998.00 |   996.00 |  1011.00 |  29.00 |   -2.9% |
| Histogram    |  1324.00 |  1173.00 |  1225.00 |  1197.00 |  1183.00 |  1217.00 |  10.00 |   -0.8% |
| LinkedList   |  1558.00 |  1552.00 |  1558.00 |  1560.00 |  1571.00 |  1558.00 |   6.00 |   -0.4% |
| NBody        |   910.00 |   906.00 |   903.00 |   796.00 |   790.00 |   789.00 | 114.00 |   14.4% |
| Phonebook    |  1659.00 |  1649.00 |  1638.00 |  1846.00 |  1713.00 |  1613.00 |  25.00 |    1.5% |
| QuickSort    |   699.00 |   700.00 |   689.00 |   686.00 |   679.00 |   679.00 |  10.00 |    1.5% |
| R17315246    |     0.00 |     0.00 |     0.00 |     0.00 |     0.00 |     0.00 |   0.00 |       * |
| RC4          |  1281.00 |  1227.00 |  1234.00 |  1056.00 |  1051.00 |  1066.00 | 176.00 |   16.7% |
| Rectangles   |   726.00 |   772.00 |   738.00 |   737.00 |   727.00 |   721.00 |   5.00 |    0.7% |
| SmallPT      |   978.00 |   963.00 |   971.00 |   629.00 |   623.00 |   631.00 | 340.00 |   54.6% |
| StringWalk   |   456.00 |   462.00 |   450.00 |   467.00 |   461.00 |   445.00 |   5.00 |    1.1% |
| Total        | 22315.00 | 21688.00 | 21716.00 | 21589.00 | 21342.00 | 21294.00 | 394.00 |    1.9% |

Swift SVN r19849

ben-ng/swift,cbrentharris/swift,LeoShimonaka/swift,allevato/swift,LeoShimonaka/swift,hughbe/swift,return/swift,johnno1962d/swift,xwu/swift,jtbandes/swift,shahmishal/swift,frootloops/swift,jtbandes/swift,CodaFi/swift,swiftix/swift,MukeshKumarS/Swift,harlanhaskins/swift,sschiau/swift,airspeedswift/swift,kstaring/swift,dduan/swift,devincoughlin/swift,khizkhiz/swift,ken0nek/swift,mightydeveloper/swift,OscarSwanros/swift,MukeshKumarS/Swift,alblue/swift,swiftix/swift.old,jckarter/swift,gregomni/swift,glessard/swift,glessard/swift,therealbnut/swift,ken0nek/swift,mightydeveloper/swift,rudkx/swift,slavapestov/swift,aschwaighofer/swift,jtbandes/swift,jmgc/swift,khizkhiz/swift,kentya6/swift,swiftix/swift,swiftix/swift,alblue/swift,sdulal/swift,codestergit/swift,xedin/swift,adrfer/swift,alblue/swift,CodaFi/swift,harlanhaskins/swift,gmilos/swift,benlangmuir/swift,rudkx/swift,uasys/swift,therealbnut/swift,johnno1962d/swift,sdulal/swift,practicalswift/swift,return/swift,cbrentharris/swift,roambotics/swift,amraboelela/swift,tinysun212/swift-windows,johnno1962d/swift,deyton/swift,parkera/swift,atrick/swift,frootloops/swift,emilstahl/swift,JaSpa/swift,tkremenek/swift,emilstahl/swift,modocache/swift,OscarSwanros/swift,swiftix/swift.old,uasys/swift,modocache/swift,gottesmm/swift,Jnosh/swift,sdulal/swift,kusl/swift,tkremenek/swift,huonw/swift,manavgabhawala/swift,kusl/swift,MukeshKumarS/Swift,jtbandes/swift,swiftix/swift.old,kperryua/swift,hughbe/swift,amraboelela/swift,Jnosh/swift,LeoShimonaka/swift,therealbnut/swift,jmgc/swift,kentya6/swift,allevato/swift,jckarter/swift,swiftix/swift.old,dreamsxin/swift,tinysun212/swift-windows,xedin/swift,shahmishal/swift,alblue/swift,manavgabhawala/swift,gribozavr/swift,gmilos/swift,nathawes/swift,CodaFi/swift,atrick/swift,allevato/swift,ahoppen/swift,mightydeveloper/swift,deyton/swift,therealbnut/swift,SwiftAndroid/swift,shajrawi/swift,kstaring/swift,harlanhaskins/swift,tinysun212/swift-windows,felix91gr/swift,aschwaighofer/swift,hughbe/swift,codestergit/swift,zisko/swift,kentya6/swift,djwbrown/swift,IngmarStein/swift,tardieu/swift,felix91gr/swift,parkera/swift,SwiftAndroid/swift,frootloops/swift,hughbe/swift,ken0nek/swift,jmgc/swift,swiftix/swift.old,djwbrown/swift,Jnosh/swift,parkera/swift,brentdax/swift,danielmartin/swift,karwa/swift,KrishMunot/swift,kentya6/swift,uasys/swift,return/swift,russbishop/swift,johnno1962d/swift,allevato/swift,uasys/swift,milseman/swift,airspeedswift/swift,slavapestov/swift,austinzheng/swift,LeoShimonaka/swift,milseman/swift,Jnosh/swift,sschiau/swift,airspeedswift/swift,hughbe/swift,emilstahl/swift,gmilos/swift,benlangmuir/swift,kstaring/swift,deyton/swift,emilstahl/swift,arvedviehweger/swift,tjw/swift,gribozavr/swift,dduan/swift,gottesmm/swift,gottesmm/swift,zisko/swift,KrishMunot/swift,return/swift,nathawes/swift,kstaring/swift,cbrentharris/swift,deyton/swift,jckarter/swift,xwu/swift,danielmartin/swift,lorentey/swift,felix91gr/swift,tjw/swift,bitjammer/swift,modocache/swift,kusl/swift,mightydeveloper/swift,shajrawi/swift,adrfer/swift,arvedviehweger/swift,shajrawi/swift,shajrawi/swift,devincoughlin/swift,shajrawi/swift,xwu/swift,jopamer/swift,sschiau/swift,adrfer/swift,rudkx/swift,gribozavr/swift,slavapestov/swift,milseman/swift,stephentyrone/swift,aschwaighofer/swift,djwbrown/swift,atrick/swift,felix91gr/swift,tinysun212/swift-windows,jtbandes/swift,ahoppen/swift,hughbe/swift,brentdax/swift,gregomni/swift,karwa/swift,milseman/swift,karwa/swift,dduan/swift,harlanhaskins/swift,benlangmuir/swift,austinzheng/swift,sschiau/swift,OscarSwanros/swift,felix91gr/swift,huonw/swift,jmgc/swift,JaSpa/swift,tjw/swift,aschwaighofer/swift,gmilos/swift,Ivacker/swift,kusl/swift,mightydeveloper/swift,devincoughlin/swift,kusl/swift,hooman/swift,benlangmuir/swift,nathawes/swift,modocache/swift,tkremenek/swift,xedin/swift,adrfer/swift,IngmarStein/swift,alblue/swift,tardieu/swift,alblue/swift,tjw/swift,dduan/swift,Ivacker/swift,karwa/swift,austinzheng/swift,cbrentharris/swift,practicalswift/swift,JGiola/swift,lorentey/swift,JGiola/swift,sschiau/swift,codestergit/swift,gribozavr/swift,hooman/swift,kperryua/swift,huonw/swift,JaSpa/swift,sschiau/swift,frootloops/swift,ben-ng/swift,swiftix/swift.old,zisko/swift,hooman/swift,natecook1000/swift,apple/swift,mightydeveloper/swift,parkera/swift,kstaring/swift,huonw/swift,Jnosh/swift,hooman/swift,IngmarStein/swift,Ivacker/swift,djwbrown/swift,CodaFi/swift,aschwaighofer/swift,adrfer/swift,shahmishal/swift,tkremenek/swift,jopamer/swift,shahmishal/swift,codestergit/swift,kstaring/swift,lorentey/swift,xwu/swift,huonw/swift,jopamer/swift,russbishop/swift,slavapestov/swift,brentdax/swift,harlanhaskins/swift,JGiola/swift,karwa/swift,jckarter/swift,amraboelela/swift,swiftix/swift.old,harlanhaskins/swift,tkremenek/swift,emilstahl/swift,roambotics/swift,gmilos/swift,shajrawi/swift,ken0nek/swift,gottesmm/swift,danielmartin/swift,SwiftAndroid/swift,stephentyrone/swift,jopamer/swift,glessard/swift,glessard/swift,lorentey/swift,Ivacker/swift,devincoughlin/swift,uasys/swift,OscarSwanros/swift,mightydeveloper/swift,shajrawi/swift,ahoppen/swift,Ivacker/swift,jopamer/swift,dduan/swift,slavapestov/swift,swiftix/swift,ken0nek/swift,manavgabhawala/swift,tardieu/swift,kstaring/swift,practicalswift/swift,kentya6/swift,frootloops/swift,MukeshKumarS/Swift,bitjammer/swift,arvedviehweger/swift,xedin/swift,felix91gr/swift,sschiau/swift,tkremenek/swift,calebd/swift,ben-ng/swift,ben-ng/swift,ahoppen/swift,devincoughlin/swift,hooman/swift,gottesmm/swift,natecook1000/swift,Ivacker/swift,Ivacker/swift,dreamsxin/swift,adrfer/swift,austinzheng/swift,sdulal/swift,hughbe/swift,swiftix/swift,shajrawi/swift,stephentyrone/swift,jopamer/swift,emilstahl/swift,russbishop/swift,xedin/swift,huonw/swift,tjw/swift,gmilos/swift,adrfer/swift,modocache/swift,ken0nek/swift,benlangmuir/swift,manavgabhawala/swift,uasys/swift,austinzheng/swift,shahmishal/swift,milseman/swift,ben-ng/swift,stephentyrone/swift,emilstahl/swift,codestergit/swift,kperryua/swift,codestergit/swift,practicalswift/swift,KrishMunot/swift,rudkx/swift,bitjammer/swift,IngmarStein/swift,Jnosh/swift,xedin/swift,roambotics/swift,parkera/swift,xwu/swift,nathawes/swift,kentya6/swift,gregomni/swift,bitjammer/swift,ahoppen/swift,OscarSwanros/swift,cbrentharris/swift,ben-ng/swift,zisko/swift,tardieu/swift,milseman/swift,jtbandes/swift,SwiftAndroid/swift,practicalswift/swift,airspeedswift/swift,glessard/swift,sdulal/swift,aschwaighofer/swift,sschiau/swift,atrick/swift,kentya6/swift,natecook1000/swift,austinzheng/swift,kusl/swift,practicalswift/swift,natecook1000/swift,ben-ng/swift,johnno1962d/swift,tkremenek/swift,gottesmm/swift,cbrentharris/swift,arvedviehweger/swift,brentdax/swift,airspeedswift/swift,calebd/swift,tjw/swift,manavgabhawala/swift,parkera/swift,amraboelela/swift,stephentyrone/swift,LeoShimonaka/swift,devincoughlin/swift,manavgabhawala/swift,JGiola/swift,arvedviehweger/swift,brentdax/swift,bitjammer/swift,cbrentharris/swift,stephentyrone/swift,CodaFi/swift,jmgc/swift,therealbnut/swift,benlangmuir/swift,kusl/swift,tjw/swift,JaSpa/swift,shahmishal/swift,KrishMunot/swift,xwu/swift,parkera/swift,nathawes/swift,sdulal/swift,calebd/swift,dduan/swift,shahmishal/swift,karwa/swift,calebd/swift,calebd/swift,LeoShimonaka/swift,johnno1962d/swift,SwiftAndroid/swift,KrishMunot/swift,amraboelela/swift,CodaFi/swift,devincoughlin/swift,modocache/swift,kperryua/swift,nathawes/swift,amraboelela/swift,sdulal/swift,allevato/swift,brentdax/swift,xedin/swift,djwbrown/swift,xwu/swift,roambotics/swift,khizkhiz/swift,jopamer/swift,JGiola/swift,zisko/swift,ken0nek/swift,gregomni/swift,russbishop/swift,KrishMunot/swift,karwa/swift,Jnosh/swift,kperryua/swift,LeoShimonaka/swift,nathawes/swift,rudkx/swift,Ivacker/swift,danielmartin/swift,zisko/swift,apple/swift,tinysun212/swift-windows,return/swift,russbishop/swift,tardieu/swift,bitjammer/swift,glessard/swift,KrishMunot/swift,khizkhiz/swift,felix91gr/swift,austinzheng/swift,apple/swift,JaSpa/swift,practicalswift/swift,frootloops/swift,return/swift,apple/swift,SwiftAndroid/swift,lorentey/swift,stephentyrone/swift,codestergit/swift,therealbnut/swift,lorentey/swift,OscarSwanros/swift,swiftix/swift,lorentey/swift,kentya6/swift,emilstahl/swift,MukeshKumarS/Swift,jmgc/swift,jckarter/swift,IngmarStein/swift,parkera/swift,deyton/swift,swiftix/swift.old,khizkhiz/swift,gregomni/swift,JaSpa/swift,danielmartin/swift,CodaFi/swift,slavapestov/swift,russbishop/swift,LeoShimonaka/swift,IngmarStein/swift,djwbrown/swift,xedin/swift,huonw/swift,apple/swift,natecook1000/swift,ahoppen/swift,khizkhiz/swift,brentdax/swift,gribozavr/swift,JaSpa/swift,allevato/swift,milseman/swift,zisko/swift,dduan/swift,khizkhiz/swift,russbishop/swift,cbrentharris/swift,JGiola/swift,tinysun212/swift-windows,calebd/swift,airspeedswift/swift,gottesmm/swift,atrick/swift,gmilos/swift,kusl/swift,jckarter/swift,sdulal/swift,shahmishal/swift,roambotics/swift,jckarter/swift,johnno1962d/swift,tardieu/swift,amraboelela/swift,karwa/swift,MukeshKumarS/Swift,natecook1000/swift,allevato/swift,natecook1000/swift,kperryua/swift,SwiftAndroid/swift,bitjammer/swift,calebd/swift,arvedviehweger/swift,deyton/swift,hooman/swift,frootloops/swift,roambotics/swift,aschwaighofer/swift,tinysun212/swift-windows,arvedviehweger/swift,lorentey/swift,hooman/swift,slavapestov/swift,devincoughlin/swift,IngmarStein/swift,modocache/swift,swiftix/swift,rudkx/swift,practicalswift/swift,alblue/swift,djwbrown/swift,tardieu/swift,therealbnut/swift,harlanhaskins/swift,airspeedswift/swift,mightydeveloper/swift,gribozavr/swift,return/swift,MukeshKumarS/Swift,gregomni/swift,gribozavr/swift,danielmartin/swift,deyton/swift,kperryua/swift,apple/swift,jtbandes/swift,atrick/swift,OscarSwanros/swift,danielmartin/swift,manavgabhawala/swift,gribozavr/swift,jmgc/swift,uasys/swift