1dd48c0beSbipmis; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 23b49a9fcSbipmis; RUN: opt < %s -passes=aggressive-instcombine -mtriple x86_64-none-eabi -mattr=avx2 -data-layout="e-n64" -S | FileCheck %s --check-prefixes=ALL,LE 33b49a9fcSbipmis; RUN: opt < %s -passes=aggressive-instcombine -mtriple x86_64-none-eabi -mattr=avx2 -data-layout="E-n64" -S | FileCheck %s --check-prefixes=ALL,BE 4dd48c0beSbipmis 5dd48c0beSbipmisdefine i16 @loadCombine_2consecutive(ptr %p) { 6dd48c0beSbipmis; 73b49a9fcSbipmis; LE-LABEL: @loadCombine_2consecutive( 83b49a9fcSbipmis; LE-NEXT: [[L1:%.*]] = load i16, ptr [[P:%.*]], align 1 93b49a9fcSbipmis; LE-NEXT: ret i16 [[L1]] 103b49a9fcSbipmis; 113b49a9fcSbipmis; BE-LABEL: @loadCombine_2consecutive( 123b49a9fcSbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 133b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 143b49a9fcSbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 153b49a9fcSbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i16 163b49a9fcSbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i16 173b49a9fcSbipmis; BE-NEXT: [[S2:%.*]] = shl i16 [[E2]], 8 183b49a9fcSbipmis; BE-NEXT: [[O1:%.*]] = or i16 [[E1]], [[S2]] 193b49a9fcSbipmis; BE-NEXT: ret i16 [[O1]] 20dd48c0beSbipmis; 21dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 22dd48c0beSbipmis %l1 = load i8, ptr %p 23dd48c0beSbipmis %l2 = load i8, ptr %p1 24dd48c0beSbipmis %e1 = zext i8 %l1 to i16 25dd48c0beSbipmis %e2 = zext i8 %l2 to i16 26dd48c0beSbipmis %s2 = shl i16 %e2, 8 27dd48c0beSbipmis %o1 = or i16 %e1, %s2 28dd48c0beSbipmis ret i16 %o1 29dd48c0beSbipmis} 30dd48c0beSbipmis 31dd48c0beSbipmisdefine i16 @loadCombine_2consecutive_BE(ptr %p) { 323b49a9fcSbipmis; LE-LABEL: @loadCombine_2consecutive_BE( 333b49a9fcSbipmis; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 343b49a9fcSbipmis; LE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 353b49a9fcSbipmis; LE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 363b49a9fcSbipmis; LE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i16 373b49a9fcSbipmis; LE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i16 383b49a9fcSbipmis; LE-NEXT: [[S1:%.*]] = shl i16 [[E1]], 8 393b49a9fcSbipmis; LE-NEXT: [[O1:%.*]] = or i16 [[S1]], [[E2]] 403b49a9fcSbipmis; LE-NEXT: ret i16 [[O1]] 413b49a9fcSbipmis; 423b49a9fcSbipmis; BE-LABEL: @loadCombine_2consecutive_BE( 433b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i16, ptr [[P:%.*]], align 1 443b49a9fcSbipmis; BE-NEXT: ret i16 [[L1]] 45dd48c0beSbipmis; 46dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 47dd48c0beSbipmis %l1 = load i8, ptr %p 48dd48c0beSbipmis %l2 = load i8, ptr %p1 49dd48c0beSbipmis %e1 = zext i8 %l1 to i16 50dd48c0beSbipmis %e2 = zext i8 %l2 to i16 51dd48c0beSbipmis %s1 = shl i16 %e1, 8 52dd48c0beSbipmis %o1 = or i16 %s1, %e2 53dd48c0beSbipmis ret i16 %o1 54dd48c0beSbipmis} 55dd48c0beSbipmis 56dd48c0beSbipmisdefine i32 @loadCombine_4consecutive(ptr %p) { 573b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive( 583b49a9fcSbipmis; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1 593b49a9fcSbipmis; LE-NEXT: ret i32 [[L1]] 603b49a9fcSbipmis; 613b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive( 623b49a9fcSbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 633b49a9fcSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 643b49a9fcSbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 653b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 663b49a9fcSbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 673b49a9fcSbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 683b49a9fcSbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 693b49a9fcSbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 703b49a9fcSbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 713b49a9fcSbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 723b49a9fcSbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 733b49a9fcSbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 743b49a9fcSbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 753b49a9fcSbipmis; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 763b49a9fcSbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 773b49a9fcSbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 783b49a9fcSbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 793b49a9fcSbipmis; BE-NEXT: ret i32 [[O3]] 80dd48c0beSbipmis; 81dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 82dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 83dd48c0beSbipmis %p3 = getelementptr i8, ptr %p, i32 3 84dd48c0beSbipmis %l1 = load i8, ptr %p 85dd48c0beSbipmis %l2 = load i8, ptr %p1 86dd48c0beSbipmis %l3 = load i8, ptr %p2 87dd48c0beSbipmis %l4 = load i8, ptr %p3 88dd48c0beSbipmis 89dd48c0beSbipmis %e1 = zext i8 %l1 to i32 90dd48c0beSbipmis %e2 = zext i8 %l2 to i32 91dd48c0beSbipmis %e3 = zext i8 %l3 to i32 92dd48c0beSbipmis %e4 = zext i8 %l4 to i32 93dd48c0beSbipmis 94dd48c0beSbipmis %s2 = shl i32 %e2, 8 95dd48c0beSbipmis %s3 = shl i32 %e3, 16 96dd48c0beSbipmis %s4 = shl i32 %e4, 24 97dd48c0beSbipmis 98dd48c0beSbipmis %o1 = or i32 %e1, %s2 99dd48c0beSbipmis %o2 = or i32 %o1, %s3 100dd48c0beSbipmis %o3 = or i32 %o2, %s4 101dd48c0beSbipmis ret i32 %o3 102dd48c0beSbipmis} 103dd48c0beSbipmis 104dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_BE(ptr %p) { 1053b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive_BE( 1063b49a9fcSbipmis; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 1073b49a9fcSbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 1083b49a9fcSbipmis; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 1093b49a9fcSbipmis; LE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 1103b49a9fcSbipmis; LE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 1113b49a9fcSbipmis; LE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 1123b49a9fcSbipmis; LE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 1133b49a9fcSbipmis; LE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 1143b49a9fcSbipmis; LE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 1153b49a9fcSbipmis; LE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 1163b49a9fcSbipmis; LE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 1173b49a9fcSbipmis; LE-NEXT: [[S1:%.*]] = shl i32 [[E1]], 24 1183b49a9fcSbipmis; LE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 16 1193b49a9fcSbipmis; LE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 8 1203b49a9fcSbipmis; LE-NEXT: [[O1:%.*]] = or i32 [[S1]], [[S2]] 1213b49a9fcSbipmis; LE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 1223b49a9fcSbipmis; LE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[E4]] 1233b49a9fcSbipmis; LE-NEXT: ret i32 [[O3]] 1243b49a9fcSbipmis; 1253b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive_BE( 1263b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1 1273b49a9fcSbipmis; BE-NEXT: ret i32 [[L1]] 128dd48c0beSbipmis; 129dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 130dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 131dd48c0beSbipmis %p3 = getelementptr i8, ptr %p, i32 3 132dd48c0beSbipmis %l1 = load i8, ptr %p 133dd48c0beSbipmis %l2 = load i8, ptr %p1 134dd48c0beSbipmis %l3 = load i8, ptr %p2 135dd48c0beSbipmis %l4 = load i8, ptr %p3 136dd48c0beSbipmis 137dd48c0beSbipmis %e1 = zext i8 %l1 to i32 138dd48c0beSbipmis %e2 = zext i8 %l2 to i32 139dd48c0beSbipmis %e3 = zext i8 %l3 to i32 140dd48c0beSbipmis %e4 = zext i8 %l4 to i32 141dd48c0beSbipmis 142dd48c0beSbipmis %s1 = shl i32 %e1, 24 143dd48c0beSbipmis %s2 = shl i32 %e2, 16 144dd48c0beSbipmis %s3 = shl i32 %e3, 8 145dd48c0beSbipmis 146dd48c0beSbipmis %o1 = or i32 %s1, %s2 147dd48c0beSbipmis %o2 = or i32 %o1, %s3 148dd48c0beSbipmis %o3 = or i32 %o2, %e4 149dd48c0beSbipmis ret i32 %o3 150dd48c0beSbipmis} 151dd48c0beSbipmis 152dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_alias(ptr %p) { 153e9393789Sbipmis; LE-LABEL: @loadCombine_4consecutive_alias( 154e9393789Sbipmis; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1 155e9393789Sbipmis; LE-NEXT: store i8 10, ptr [[P]], align 1 156e9393789Sbipmis; LE-NEXT: ret i32 [[L1]] 157e9393789Sbipmis; 158e9393789Sbipmis; BE-LABEL: @loadCombine_4consecutive_alias( 159e9393789Sbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 160e9393789Sbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 161e9393789Sbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 162e9393789Sbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 163e9393789Sbipmis; BE-NEXT: store i8 10, ptr [[P]], align 1 164e9393789Sbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 165e9393789Sbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 166e9393789Sbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 167e9393789Sbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 168e9393789Sbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 169e9393789Sbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 170e9393789Sbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 171e9393789Sbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 172e9393789Sbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 173e9393789Sbipmis; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 174e9393789Sbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 175e9393789Sbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 176e9393789Sbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 177e9393789Sbipmis; BE-NEXT: ret i32 [[O3]] 178dd48c0beSbipmis; 179dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 180dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 181dd48c0beSbipmis %p3 = getelementptr i8, ptr %p, i32 3 182dd48c0beSbipmis %l1 = load i8, ptr %p 1832d69827cSNikita Popov store i8 10, ptr %p 184dd48c0beSbipmis %l2 = load i8, ptr %p1 185dd48c0beSbipmis %l3 = load i8, ptr %p2 186dd48c0beSbipmis %l4 = load i8, ptr %p3 187dd48c0beSbipmis 188dd48c0beSbipmis %e1 = zext i8 %l1 to i32 189dd48c0beSbipmis %e2 = zext i8 %l2 to i32 190dd48c0beSbipmis %e3 = zext i8 %l3 to i32 191dd48c0beSbipmis %e4 = zext i8 %l4 to i32 192dd48c0beSbipmis 193dd48c0beSbipmis %s2 = shl i32 %e2, 8 194dd48c0beSbipmis %s3 = shl i32 %e3, 16 195dd48c0beSbipmis %s4 = shl i32 %e4, 24 196dd48c0beSbipmis 197dd48c0beSbipmis %o1 = or i32 %e1, %s2 198dd48c0beSbipmis %o2 = or i32 %o1, %s3 199dd48c0beSbipmis %o3 = or i32 %o2, %s4 200dd48c0beSbipmis ret i32 %o3 201dd48c0beSbipmis} 202dd48c0beSbipmis 203dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_alias_BE(ptr %p) { 204e9393789Sbipmis; LE-LABEL: @loadCombine_4consecutive_alias_BE( 205e9393789Sbipmis; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 206e9393789Sbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 207e9393789Sbipmis; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 208e9393789Sbipmis; LE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 209e9393789Sbipmis; LE-NEXT: store i8 10, ptr [[P]], align 1 210e9393789Sbipmis; LE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 211e9393789Sbipmis; LE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 212e9393789Sbipmis; LE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 213e9393789Sbipmis; LE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 214e9393789Sbipmis; LE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 215e9393789Sbipmis; LE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 216e9393789Sbipmis; LE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 217e9393789Sbipmis; LE-NEXT: [[S1:%.*]] = shl i32 [[E1]], 24 218e9393789Sbipmis; LE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 16 219e9393789Sbipmis; LE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 8 220e9393789Sbipmis; LE-NEXT: [[O1:%.*]] = or i32 [[S1]], [[S2]] 221e9393789Sbipmis; LE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 222e9393789Sbipmis; LE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[E4]] 223e9393789Sbipmis; LE-NEXT: ret i32 [[O3]] 224e9393789Sbipmis; 225e9393789Sbipmis; BE-LABEL: @loadCombine_4consecutive_alias_BE( 226e9393789Sbipmis; BE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1 227e9393789Sbipmis; BE-NEXT: store i8 10, ptr [[P]], align 1 228e9393789Sbipmis; BE-NEXT: ret i32 [[L1]] 229dd48c0beSbipmis; 230dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 231dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 232dd48c0beSbipmis %p3 = getelementptr i8, ptr %p, i32 3 233dd48c0beSbipmis %l1 = load i8, ptr %p 2342d69827cSNikita Popov store i8 10, ptr %p 235dd48c0beSbipmis %l2 = load i8, ptr %p1 236dd48c0beSbipmis %l3 = load i8, ptr %p2 237dd48c0beSbipmis %l4 = load i8, ptr %p3 238dd48c0beSbipmis 239dd48c0beSbipmis %e1 = zext i8 %l1 to i32 240dd48c0beSbipmis %e2 = zext i8 %l2 to i32 241dd48c0beSbipmis %e3 = zext i8 %l3 to i32 242dd48c0beSbipmis %e4 = zext i8 %l4 to i32 243dd48c0beSbipmis 244dd48c0beSbipmis %s1 = shl i32 %e1, 24 245dd48c0beSbipmis %s2 = shl i32 %e2, 16 246dd48c0beSbipmis %s3 = shl i32 %e3, 8 247dd48c0beSbipmis 248dd48c0beSbipmis %o1 = or i32 %s1, %s2 249dd48c0beSbipmis %o2 = or i32 %o1, %s3 250dd48c0beSbipmis %o3 = or i32 %o2, %e4 251dd48c0beSbipmis ret i32 %o3 252dd48c0beSbipmis} 253dd48c0beSbipmis 254dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_alias2(ptr %p, ptr %pstr) { 2553b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive_alias2( 2563b49a9fcSbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2 2573b49a9fcSbipmis; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 2583b49a9fcSbipmis; LE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 1 2593b49a9fcSbipmis; LE-NEXT: [[TMP1:%.*]] = zext i16 [[L1]] to i32 2603b49a9fcSbipmis; LE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 2613b49a9fcSbipmis; LE-NEXT: store i8 10, ptr [[PSTR:%.*]], align 1 2623b49a9fcSbipmis; LE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 2633b49a9fcSbipmis; LE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 2643b49a9fcSbipmis; LE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 2653b49a9fcSbipmis; LE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 2663b49a9fcSbipmis; LE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 2673b49a9fcSbipmis; LE-NEXT: [[O2:%.*]] = or i32 [[TMP1]], [[S3]] 2683b49a9fcSbipmis; LE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 2693b49a9fcSbipmis; LE-NEXT: ret i32 [[O3]] 2703b49a9fcSbipmis; 2713b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive_alias2( 2723b49a9fcSbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 2733b49a9fcSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 2743b49a9fcSbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 2753b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 2763b49a9fcSbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 2773b49a9fcSbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 2783b49a9fcSbipmis; BE-NEXT: store i8 10, ptr [[PSTR:%.*]], align 1 2793b49a9fcSbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 2803b49a9fcSbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 2813b49a9fcSbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 2823b49a9fcSbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 2833b49a9fcSbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 2843b49a9fcSbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 2853b49a9fcSbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 2863b49a9fcSbipmis; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 2873b49a9fcSbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 2883b49a9fcSbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 2893b49a9fcSbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 2903b49a9fcSbipmis; BE-NEXT: ret i32 [[O3]] 291dd48c0beSbipmis; 292dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 293dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 294dd48c0beSbipmis %p3 = getelementptr i8, ptr %p, i32 3 295dd48c0beSbipmis %l1 = load i8, ptr %p 296dd48c0beSbipmis %l2 = load i8, ptr %p1 297dd48c0beSbipmis %l3 = load i8, ptr %p2 2982d69827cSNikita Popov store i8 10, ptr %pstr 299dd48c0beSbipmis %l4 = load i8, ptr %p3 300dd48c0beSbipmis 301dd48c0beSbipmis %e1 = zext i8 %l1 to i32 302dd48c0beSbipmis %e2 = zext i8 %l2 to i32 303dd48c0beSbipmis %e3 = zext i8 %l3 to i32 304dd48c0beSbipmis %e4 = zext i8 %l4 to i32 305dd48c0beSbipmis 306dd48c0beSbipmis %s2 = shl i32 %e2, 8 307dd48c0beSbipmis %s3 = shl i32 %e3, 16 308dd48c0beSbipmis %s4 = shl i32 %e4, 24 309dd48c0beSbipmis 310dd48c0beSbipmis %o1 = or i32 %e1, %s2 311dd48c0beSbipmis %o2 = or i32 %o1, %s3 312dd48c0beSbipmis %o3 = or i32 %o2, %s4 313dd48c0beSbipmis ret i32 %o3 314dd48c0beSbipmis} 315dd48c0beSbipmis 316dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_alias2_BE(ptr %p, ptr %pstr) { 3173b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive_alias2_BE( 3183b49a9fcSbipmis; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 3193b49a9fcSbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 3203b49a9fcSbipmis; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 3213b49a9fcSbipmis; LE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 3223b49a9fcSbipmis; LE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 3233b49a9fcSbipmis; LE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 3243b49a9fcSbipmis; LE-NEXT: store i8 10, ptr [[PSTR:%.*]], align 1 3253b49a9fcSbipmis; LE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 3263b49a9fcSbipmis; LE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 3273b49a9fcSbipmis; LE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 3283b49a9fcSbipmis; LE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 3293b49a9fcSbipmis; LE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 3303b49a9fcSbipmis; LE-NEXT: [[S1:%.*]] = shl i32 [[E1]], 24 3313b49a9fcSbipmis; LE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 16 3323b49a9fcSbipmis; LE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 8 3333b49a9fcSbipmis; LE-NEXT: [[O1:%.*]] = or i32 [[S1]], [[S2]] 3343b49a9fcSbipmis; LE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 3353b49a9fcSbipmis; LE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[E4]] 3363b49a9fcSbipmis; LE-NEXT: ret i32 [[O3]] 3373b49a9fcSbipmis; 3383b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive_alias2_BE( 3393b49a9fcSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2 3403b49a9fcSbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 3413b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 1 3423b49a9fcSbipmis; BE-NEXT: [[TMP1:%.*]] = zext i16 [[L1]] to i32 3433b49a9fcSbipmis; BE-NEXT: [[TMP2:%.*]] = shl i32 [[TMP1]], 16 3443b49a9fcSbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 3453b49a9fcSbipmis; BE-NEXT: store i8 10, ptr [[PSTR:%.*]], align 1 3463b49a9fcSbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 3473b49a9fcSbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 3483b49a9fcSbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 3493b49a9fcSbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 8 3503b49a9fcSbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[TMP2]], [[S3]] 3513b49a9fcSbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[E4]] 3523b49a9fcSbipmis; BE-NEXT: ret i32 [[O3]] 353dd48c0beSbipmis; 354dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 355dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 356dd48c0beSbipmis %p3 = getelementptr i8, ptr %p, i32 3 357dd48c0beSbipmis %l1 = load i8, ptr %p 358dd48c0beSbipmis %l2 = load i8, ptr %p1 359dd48c0beSbipmis %l3 = load i8, ptr %p2 3602d69827cSNikita Popov store i8 10, ptr %pstr 361dd48c0beSbipmis %l4 = load i8, ptr %p3 362dd48c0beSbipmis 363dd48c0beSbipmis %e1 = zext i8 %l1 to i32 364dd48c0beSbipmis %e2 = zext i8 %l2 to i32 365dd48c0beSbipmis %e3 = zext i8 %l3 to i32 366dd48c0beSbipmis %e4 = zext i8 %l4 to i32 367dd48c0beSbipmis 368dd48c0beSbipmis %s1 = shl i32 %e1, 24 369dd48c0beSbipmis %s2 = shl i32 %e2, 16 370dd48c0beSbipmis %s3 = shl i32 %e3, 8 371dd48c0beSbipmis 372dd48c0beSbipmis %o1 = or i32 %s1, %s2 373dd48c0beSbipmis %o2 = or i32 %o1, %s3 374dd48c0beSbipmis %o3 = or i32 %o2, %e4 375dd48c0beSbipmis ret i32 %o3 376dd48c0beSbipmis} 377dd48c0beSbipmis 378dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_alias3(ptr %p) { 3793b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive_alias3( 3803b49a9fcSbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2 3813b49a9fcSbipmis; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 3823b49a9fcSbipmis; LE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 1 3833b49a9fcSbipmis; LE-NEXT: [[TMP1:%.*]] = zext i16 [[L1]] to i32 3843b49a9fcSbipmis; LE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 3853b49a9fcSbipmis; LE-NEXT: store i8 10, ptr [[P3]], align 1 3863b49a9fcSbipmis; LE-NEXT: store i8 5, ptr [[P]], align 1 3873b49a9fcSbipmis; LE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 3883b49a9fcSbipmis; LE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 3893b49a9fcSbipmis; LE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 3903b49a9fcSbipmis; LE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 3913b49a9fcSbipmis; LE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 3923b49a9fcSbipmis; LE-NEXT: [[O2:%.*]] = or i32 [[TMP1]], [[S3]] 3933b49a9fcSbipmis; LE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 3943b49a9fcSbipmis; LE-NEXT: ret i32 [[O3]] 3953b49a9fcSbipmis; 3963b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive_alias3( 3973b49a9fcSbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 3983b49a9fcSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 3993b49a9fcSbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 4003b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 4013b49a9fcSbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 4023b49a9fcSbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 4033b49a9fcSbipmis; BE-NEXT: store i8 10, ptr [[P3]], align 1 4043b49a9fcSbipmis; BE-NEXT: store i8 5, ptr [[P]], align 1 4053b49a9fcSbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 4063b49a9fcSbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 4073b49a9fcSbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 4083b49a9fcSbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 4093b49a9fcSbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 4103b49a9fcSbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 4113b49a9fcSbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 4123b49a9fcSbipmis; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 4133b49a9fcSbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 4143b49a9fcSbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 4153b49a9fcSbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 4163b49a9fcSbipmis; BE-NEXT: ret i32 [[O3]] 417dd48c0beSbipmis; 418dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 419dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 420dd48c0beSbipmis %p3 = getelementptr i8, ptr %p, i32 3 421dd48c0beSbipmis %l1 = load i8, ptr %p 422dd48c0beSbipmis %l2 = load i8, ptr %p1 423dd48c0beSbipmis %l3 = load i8, ptr %p2 4242d69827cSNikita Popov store i8 10, ptr %p3 4252d69827cSNikita Popov store i8 5, ptr %p 426dd48c0beSbipmis %l4 = load i8, ptr %p3 427dd48c0beSbipmis 428dd48c0beSbipmis %e1 = zext i8 %l1 to i32 429dd48c0beSbipmis %e2 = zext i8 %l2 to i32 430dd48c0beSbipmis %e3 = zext i8 %l3 to i32 431dd48c0beSbipmis %e4 = zext i8 %l4 to i32 432dd48c0beSbipmis 433dd48c0beSbipmis %s2 = shl i32 %e2, 8 434dd48c0beSbipmis %s3 = shl i32 %e3, 16 435dd48c0beSbipmis %s4 = shl i32 %e4, 24 436dd48c0beSbipmis 437dd48c0beSbipmis %o1 = or i32 %e1, %s2 438dd48c0beSbipmis %o2 = or i32 %o1, %s3 439dd48c0beSbipmis %o3 = or i32 %o2, %s4 440dd48c0beSbipmis ret i32 %o3 441dd48c0beSbipmis} 442dd48c0beSbipmis 443dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_alias3_BE(ptr %p) { 4443b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive_alias3_BE( 4453b49a9fcSbipmis; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 4463b49a9fcSbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 4473b49a9fcSbipmis; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 4483b49a9fcSbipmis; LE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 4493b49a9fcSbipmis; LE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 4503b49a9fcSbipmis; LE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 4513b49a9fcSbipmis; LE-NEXT: store i8 10, ptr [[P3]], align 1 4523b49a9fcSbipmis; LE-NEXT: store i8 5, ptr [[P]], align 1 4533b49a9fcSbipmis; LE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 4543b49a9fcSbipmis; LE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 4553b49a9fcSbipmis; LE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 4563b49a9fcSbipmis; LE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 4573b49a9fcSbipmis; LE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 4583b49a9fcSbipmis; LE-NEXT: [[S1:%.*]] = shl i32 [[E1]], 24 4593b49a9fcSbipmis; LE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 16 4603b49a9fcSbipmis; LE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 8 4613b49a9fcSbipmis; LE-NEXT: [[O1:%.*]] = or i32 [[S1]], [[S2]] 4623b49a9fcSbipmis; LE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 4633b49a9fcSbipmis; LE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[E4]] 4643b49a9fcSbipmis; LE-NEXT: ret i32 [[O3]] 4653b49a9fcSbipmis; 4663b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive_alias3_BE( 4673b49a9fcSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2 4683b49a9fcSbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 4693b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 1 4703b49a9fcSbipmis; BE-NEXT: [[TMP1:%.*]] = zext i16 [[L1]] to i32 4713b49a9fcSbipmis; BE-NEXT: [[TMP2:%.*]] = shl i32 [[TMP1]], 16 4723b49a9fcSbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 4733b49a9fcSbipmis; BE-NEXT: store i8 10, ptr [[P3]], align 1 4743b49a9fcSbipmis; BE-NEXT: store i8 5, ptr [[P]], align 1 4753b49a9fcSbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 4763b49a9fcSbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 4773b49a9fcSbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 4783b49a9fcSbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 8 4793b49a9fcSbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[TMP2]], [[S3]] 4803b49a9fcSbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[E4]] 4813b49a9fcSbipmis; BE-NEXT: ret i32 [[O3]] 482dd48c0beSbipmis; 483dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 484dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 485dd48c0beSbipmis %p3 = getelementptr i8, ptr %p, i32 3 486dd48c0beSbipmis %l1 = load i8, ptr %p 487dd48c0beSbipmis %l2 = load i8, ptr %p1 488dd48c0beSbipmis %l3 = load i8, ptr %p2 4892d69827cSNikita Popov store i8 10, ptr %p3 4902d69827cSNikita Popov store i8 5, ptr %p 491dd48c0beSbipmis %l4 = load i8, ptr %p3 492dd48c0beSbipmis 493dd48c0beSbipmis %e1 = zext i8 %l1 to i32 494dd48c0beSbipmis %e2 = zext i8 %l2 to i32 495dd48c0beSbipmis %e3 = zext i8 %l3 to i32 496dd48c0beSbipmis %e4 = zext i8 %l4 to i32 497dd48c0beSbipmis 498dd48c0beSbipmis %s1 = shl i32 %e1, 24 499dd48c0beSbipmis %s2 = shl i32 %e2, 16 500dd48c0beSbipmis %s3 = shl i32 %e3, 8 501dd48c0beSbipmis 502dd48c0beSbipmis %o1 = or i32 %s1, %s2 503dd48c0beSbipmis %o2 = or i32 %o1, %s3 504dd48c0beSbipmis %o3 = or i32 %o2, %e4 505dd48c0beSbipmis ret i32 %o3 506dd48c0beSbipmis} 507dd48c0beSbipmis 508dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_with_alias4(ptr %p, ptr %ps) { 509dd48c0beSbipmis; ALL-LABEL: @loadCombine_4consecutive_with_alias4( 510dd48c0beSbipmis; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 511dd48c0beSbipmis; ALL-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 512dd48c0beSbipmis; ALL-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 513dd48c0beSbipmis; ALL-NEXT: [[PS1:%.*]] = getelementptr i8, ptr [[PS:%.*]], i32 1 514dd48c0beSbipmis; ALL-NEXT: [[PS2:%.*]] = getelementptr i8, ptr [[PS]], i32 2 515dd48c0beSbipmis; ALL-NEXT: [[PS3:%.*]] = getelementptr i8, ptr [[PS]], i32 3 516dd48c0beSbipmis; ALL-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 517dd48c0beSbipmis; ALL-NEXT: store i8 10, ptr [[PS]], align 1 518dd48c0beSbipmis; ALL-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 519dd48c0beSbipmis; ALL-NEXT: store i8 10, ptr [[PS1]], align 1 520dd48c0beSbipmis; ALL-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 521dd48c0beSbipmis; ALL-NEXT: store i8 10, ptr [[PS2]], align 1 522dd48c0beSbipmis; ALL-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 523dd48c0beSbipmis; ALL-NEXT: store i8 10, ptr [[PS3]], align 1 524dd48c0beSbipmis; ALL-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 525dd48c0beSbipmis; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 526dd48c0beSbipmis; ALL-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 527dd48c0beSbipmis; ALL-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 528dd48c0beSbipmis; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 529dd48c0beSbipmis; ALL-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 530dd48c0beSbipmis; ALL-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 531dd48c0beSbipmis; ALL-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 532dd48c0beSbipmis; ALL-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 533dd48c0beSbipmis; ALL-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 534dd48c0beSbipmis; ALL-NEXT: ret i32 [[O3]] 535dd48c0beSbipmis; 536dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 537dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 538dd48c0beSbipmis %p3 = getelementptr i8, ptr %p, i32 3 539dd48c0beSbipmis %ps1 = getelementptr i8, ptr %ps, i32 1 540dd48c0beSbipmis %ps2 = getelementptr i8, ptr %ps, i32 2 541dd48c0beSbipmis %ps3 = getelementptr i8, ptr %ps, i32 3 542dd48c0beSbipmis %l1 = load i8, ptr %p 5432d69827cSNikita Popov store i8 10, ptr %ps 544dd48c0beSbipmis %l2 = load i8, ptr %p1 5452d69827cSNikita Popov store i8 10, ptr %ps1 546dd48c0beSbipmis %l3 = load i8, ptr %p2 5472d69827cSNikita Popov store i8 10, ptr %ps2 548dd48c0beSbipmis %l4 = load i8, ptr %p3 5492d69827cSNikita Popov store i8 10, ptr %ps3 550dd48c0beSbipmis 551dd48c0beSbipmis %e1 = zext i8 %l1 to i32 552dd48c0beSbipmis %e2 = zext i8 %l2 to i32 553dd48c0beSbipmis %e3 = zext i8 %l3 to i32 554dd48c0beSbipmis %e4 = zext i8 %l4 to i32 555dd48c0beSbipmis 556dd48c0beSbipmis %s2 = shl i32 %e2, 8 557dd48c0beSbipmis %s3 = shl i32 %e3, 16 558dd48c0beSbipmis %s4 = shl i32 %e4, 24 559dd48c0beSbipmis 560dd48c0beSbipmis %o1 = or i32 %e1, %s2 561dd48c0beSbipmis %o2 = or i32 %o1, %s3 562dd48c0beSbipmis %o3 = or i32 %o2, %s4 563dd48c0beSbipmis ret i32 %o3 564dd48c0beSbipmis} 565dd48c0beSbipmis 566dd48c0beSbipmisdeclare void @use(i8) 567dd48c0beSbipmisdeclare void @use2(i32) 568dd48c0beSbipmis 569dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_hasOneUse1(ptr %p) { 570dd48c0beSbipmis; ALL-LABEL: @loadCombine_4consecutive_hasOneUse1( 571dd48c0beSbipmis; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 572dd48c0beSbipmis; ALL-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 573dd48c0beSbipmis; ALL-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 574dd48c0beSbipmis; ALL-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 575dd48c0beSbipmis; ALL-NEXT: call void @use(i8 [[L1]]) 576dd48c0beSbipmis; ALL-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 577dd48c0beSbipmis; ALL-NEXT: call void @use(i8 [[L2]]) 578dd48c0beSbipmis; ALL-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 579dd48c0beSbipmis; ALL-NEXT: call void @use(i8 [[L3]]) 580dd48c0beSbipmis; ALL-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 581dd48c0beSbipmis; ALL-NEXT: call void @use(i8 [[L4]]) 582dd48c0beSbipmis; ALL-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 583dd48c0beSbipmis; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 584dd48c0beSbipmis; ALL-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 585dd48c0beSbipmis; ALL-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 586dd48c0beSbipmis; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 587dd48c0beSbipmis; ALL-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 588dd48c0beSbipmis; ALL-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 589dd48c0beSbipmis; ALL-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 590dd48c0beSbipmis; ALL-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 591dd48c0beSbipmis; ALL-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 592dd48c0beSbipmis; ALL-NEXT: ret i32 [[O3]] 593dd48c0beSbipmis; 594dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 595dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 596dd48c0beSbipmis %p3 = getelementptr i8, ptr %p, i32 3 597dd48c0beSbipmis %l1 = load i8, ptr %p 598dd48c0beSbipmis call void @use(i8 %l1) 599dd48c0beSbipmis %l2 = load i8, ptr %p1 600dd48c0beSbipmis call void @use(i8 %l2) 601dd48c0beSbipmis %l3 = load i8, ptr %p2 602dd48c0beSbipmis call void @use(i8 %l3) 603dd48c0beSbipmis %l4 = load i8, ptr %p3 604dd48c0beSbipmis call void @use(i8 %l4) 605dd48c0beSbipmis 606dd48c0beSbipmis %e1 = zext i8 %l1 to i32 607dd48c0beSbipmis %e2 = zext i8 %l2 to i32 608dd48c0beSbipmis %e3 = zext i8 %l3 to i32 609dd48c0beSbipmis %e4 = zext i8 %l4 to i32 610dd48c0beSbipmis 611dd48c0beSbipmis %s2 = shl i32 %e2, 8 612dd48c0beSbipmis %s3 = shl i32 %e3, 16 613dd48c0beSbipmis %s4 = shl i32 %e4, 24 614dd48c0beSbipmis 615dd48c0beSbipmis %o1 = or i32 %e1, %s2 616dd48c0beSbipmis %o2 = or i32 %o1, %s3 617dd48c0beSbipmis %o3 = or i32 %o2, %s4 618dd48c0beSbipmis ret i32 %o3 619dd48c0beSbipmis} 620dd48c0beSbipmis 621dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_hasOneUse2(ptr %p) { 622dd48c0beSbipmis; ALL-LABEL: @loadCombine_4consecutive_hasOneUse2( 623dd48c0beSbipmis; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 624dd48c0beSbipmis; ALL-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 625dd48c0beSbipmis; ALL-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 626dd48c0beSbipmis; ALL-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 627dd48c0beSbipmis; ALL-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 628dd48c0beSbipmis; ALL-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 629dd48c0beSbipmis; ALL-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 630dd48c0beSbipmis; ALL-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 631dd48c0beSbipmis; ALL-NEXT: call void @use(i32 [[E1]]) 632dd48c0beSbipmis; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 633dd48c0beSbipmis; ALL-NEXT: call void @use(i32 [[E2]]) 634dd48c0beSbipmis; ALL-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 635dd48c0beSbipmis; ALL-NEXT: call void @use(i32 [[E3]]) 636dd48c0beSbipmis; ALL-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 637dd48c0beSbipmis; ALL-NEXT: call void @use(i32 [[E4]]) 638dd48c0beSbipmis; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 639dd48c0beSbipmis; ALL-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 640dd48c0beSbipmis; ALL-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 641dd48c0beSbipmis; ALL-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 642dd48c0beSbipmis; ALL-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 643dd48c0beSbipmis; ALL-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 644dd48c0beSbipmis; ALL-NEXT: ret i32 [[O3]] 645dd48c0beSbipmis; 646dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 647dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 648dd48c0beSbipmis %p3 = getelementptr i8, ptr %p, i32 3 649dd48c0beSbipmis %l1 = load i8, ptr %p 650dd48c0beSbipmis %l2 = load i8, ptr %p1 651dd48c0beSbipmis %l3 = load i8, ptr %p2 652dd48c0beSbipmis %l4 = load i8, ptr %p3 653dd48c0beSbipmis 654dd48c0beSbipmis %e1 = zext i8 %l1 to i32 655dd48c0beSbipmis call void @use(i32 %e1) 656dd48c0beSbipmis %e2 = zext i8 %l2 to i32 657dd48c0beSbipmis call void @use(i32 %e2) 658dd48c0beSbipmis %e3 = zext i8 %l3 to i32 659dd48c0beSbipmis call void @use(i32 %e3) 660dd48c0beSbipmis %e4 = zext i8 %l4 to i32 661dd48c0beSbipmis call void @use(i32 %e4) 662dd48c0beSbipmis 663dd48c0beSbipmis %s2 = shl i32 %e2, 8 664dd48c0beSbipmis %s3 = shl i32 %e3, 16 665dd48c0beSbipmis %s4 = shl i32 %e4, 24 666dd48c0beSbipmis 667dd48c0beSbipmis %o1 = or i32 %e1, %s2 668dd48c0beSbipmis %o2 = or i32 %o1, %s3 669dd48c0beSbipmis %o3 = or i32 %o2, %s4 670dd48c0beSbipmis ret i32 %o3 671dd48c0beSbipmis} 672dd48c0beSbipmis 673dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_hasOneUse3(ptr %p) { 674dd48c0beSbipmis; ALL-LABEL: @loadCombine_4consecutive_hasOneUse3( 675dd48c0beSbipmis; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 676dd48c0beSbipmis; ALL-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 677dd48c0beSbipmis; ALL-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 678dd48c0beSbipmis; ALL-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 679dd48c0beSbipmis; ALL-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 680dd48c0beSbipmis; ALL-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 681dd48c0beSbipmis; ALL-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 682dd48c0beSbipmis; ALL-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 683dd48c0beSbipmis; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 684dd48c0beSbipmis; ALL-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 685dd48c0beSbipmis; ALL-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 686dd48c0beSbipmis; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 687dd48c0beSbipmis; ALL-NEXT: call void @use(i32 [[S2]]) 688dd48c0beSbipmis; ALL-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 689dd48c0beSbipmis; ALL-NEXT: call void @use(i32 [[S3]]) 690dd48c0beSbipmis; ALL-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 691dd48c0beSbipmis; ALL-NEXT: call void @use(i32 [[S4]]) 692dd48c0beSbipmis; ALL-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 693dd48c0beSbipmis; ALL-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 694dd48c0beSbipmis; ALL-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 695dd48c0beSbipmis; ALL-NEXT: ret i32 [[O3]] 696dd48c0beSbipmis; 697dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 698dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 699dd48c0beSbipmis %p3 = getelementptr i8, ptr %p, i32 3 700dd48c0beSbipmis %l1 = load i8, ptr %p 701dd48c0beSbipmis %l2 = load i8, ptr %p1 702dd48c0beSbipmis %l3 = load i8, ptr %p2 703dd48c0beSbipmis %l4 = load i8, ptr %p3 704dd48c0beSbipmis 705dd48c0beSbipmis %e1 = zext i8 %l1 to i32 706dd48c0beSbipmis %e2 = zext i8 %l2 to i32 707dd48c0beSbipmis %e3 = zext i8 %l3 to i32 708dd48c0beSbipmis %e4 = zext i8 %l4 to i32 709dd48c0beSbipmis 710dd48c0beSbipmis %s2 = shl i32 %e2, 8 711dd48c0beSbipmis call void @use(i32 %s2) 712dd48c0beSbipmis %s3 = shl i32 %e3, 16 713dd48c0beSbipmis call void @use(i32 %s3) 714dd48c0beSbipmis %s4 = shl i32 %e4, 24 715dd48c0beSbipmis call void @use(i32 %s4) 716dd48c0beSbipmis 717dd48c0beSbipmis %o1 = or i32 %e1, %s2 718dd48c0beSbipmis %o2 = or i32 %o1, %s3 719dd48c0beSbipmis %o3 = or i32 %o2, %s4 720dd48c0beSbipmis ret i32 %o3 721dd48c0beSbipmis} 722dd48c0beSbipmis 723dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_hasOneUse4(ptr %p) { 724dd48c0beSbipmis; ALL-LABEL: @loadCombine_4consecutive_hasOneUse4( 725dd48c0beSbipmis; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 726dd48c0beSbipmis; ALL-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 727dd48c0beSbipmis; ALL-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 728dd48c0beSbipmis; ALL-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 729dd48c0beSbipmis; ALL-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 730dd48c0beSbipmis; ALL-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 731dd48c0beSbipmis; ALL-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 732dd48c0beSbipmis; ALL-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 733dd48c0beSbipmis; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 734dd48c0beSbipmis; ALL-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 735dd48c0beSbipmis; ALL-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 736dd48c0beSbipmis; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 737dd48c0beSbipmis; ALL-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 738dd48c0beSbipmis; ALL-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 739dd48c0beSbipmis; ALL-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 740dd48c0beSbipmis; ALL-NEXT: call void @use(i32 [[O1]]) 741dd48c0beSbipmis; ALL-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 742dd48c0beSbipmis; ALL-NEXT: call void @use(i32 [[O2]]) 743dd48c0beSbipmis; ALL-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 744dd48c0beSbipmis; ALL-NEXT: ret i32 [[O3]] 745dd48c0beSbipmis; 746dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 747dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 748dd48c0beSbipmis %p3 = getelementptr i8, ptr %p, i32 3 749dd48c0beSbipmis %l1 = load i8, ptr %p 750dd48c0beSbipmis %l2 = load i8, ptr %p1 751dd48c0beSbipmis %l3 = load i8, ptr %p2 752dd48c0beSbipmis %l4 = load i8, ptr %p3 753dd48c0beSbipmis 754dd48c0beSbipmis %e1 = zext i8 %l1 to i32 755dd48c0beSbipmis %e2 = zext i8 %l2 to i32 756dd48c0beSbipmis %e3 = zext i8 %l3 to i32 757dd48c0beSbipmis %e4 = zext i8 %l4 to i32 758dd48c0beSbipmis 759dd48c0beSbipmis %s2 = shl i32 %e2, 8 760dd48c0beSbipmis %s3 = shl i32 %e3, 16 761dd48c0beSbipmis %s4 = shl i32 %e4, 24 762dd48c0beSbipmis 763dd48c0beSbipmis %o1 = or i32 %e1, %s2 764dd48c0beSbipmis call void @use(i32 %o1) 765dd48c0beSbipmis %o2 = or i32 %o1, %s3 766dd48c0beSbipmis call void @use(i32 %o2) 767dd48c0beSbipmis %o3 = or i32 %o2, %s4 768dd48c0beSbipmis ret i32 %o3 769dd48c0beSbipmis} 770dd48c0beSbipmis 771dd48c0beSbipmisdefine i32 @loadCombine_parLoad1(ptr %p) { 7723b49a9fcSbipmis; LE-LABEL: @loadCombine_parLoad1( 7733b49a9fcSbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2 7743b49a9fcSbipmis; LE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 1 7753b49a9fcSbipmis; LE-NEXT: [[TMP1:%.*]] = zext i16 [[L1]] to i32 7763b49a9fcSbipmis; LE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 7773b49a9fcSbipmis; LE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 7783b49a9fcSbipmis; LE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 7793b49a9fcSbipmis; LE-NEXT: [[O2:%.*]] = or i32 [[TMP1]], [[S3]] 7803b49a9fcSbipmis; LE-NEXT: ret i32 [[O2]] 7813b49a9fcSbipmis; 7823b49a9fcSbipmis; BE-LABEL: @loadCombine_parLoad1( 7833b49a9fcSbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 7843b49a9fcSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 7853b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 7863b49a9fcSbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 7873b49a9fcSbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 7883b49a9fcSbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 7893b49a9fcSbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 7903b49a9fcSbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 7913b49a9fcSbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 7923b49a9fcSbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 7933b49a9fcSbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 7943b49a9fcSbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 7953b49a9fcSbipmis; BE-NEXT: ret i32 [[O2]] 796dd48c0beSbipmis; 797dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 798dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 799dd48c0beSbipmis %l1 = load i8, ptr %p 800dd48c0beSbipmis %l2 = load i8, ptr %p1 801dd48c0beSbipmis %l3 = load i8, ptr %p2 802dd48c0beSbipmis 803dd48c0beSbipmis %e1 = zext i8 %l1 to i32 804dd48c0beSbipmis %e2 = zext i8 %l2 to i32 805dd48c0beSbipmis %e3 = zext i8 %l3 to i32 806dd48c0beSbipmis 807dd48c0beSbipmis %s2 = shl i32 %e2, 8 808dd48c0beSbipmis %s3 = shl i32 %e3, 16 809dd48c0beSbipmis 810dd48c0beSbipmis %o1 = or i32 %e1, %s2 811dd48c0beSbipmis %o2 = or i32 %o1, %s3 812dd48c0beSbipmis ret i32 %o2 813dd48c0beSbipmis} 814dd48c0beSbipmis 815dd48c0beSbipmisdefine i128 @loadCombine_i128(ptr %p) { 8163b49a9fcSbipmis; LE-LABEL: @loadCombine_i128( 8173b49a9fcSbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[P:%.*]], i32 2 8183b49a9fcSbipmis; LE-NEXT: [[P3:%.*]] = getelementptr i32, ptr [[P]], i32 3 8193b49a9fcSbipmis; LE-NEXT: [[L1:%.*]] = load i64, ptr [[P]], align 4 8203b49a9fcSbipmis; LE-NEXT: [[TMP1:%.*]] = zext i64 [[L1]] to i128 8213b49a9fcSbipmis; LE-NEXT: [[L3:%.*]] = load i32, ptr [[P2]], align 4 8223b49a9fcSbipmis; LE-NEXT: [[L4:%.*]] = load i32, ptr [[P3]], align 4 8233b49a9fcSbipmis; LE-NEXT: [[E3:%.*]] = zext i32 [[L3]] to i128 8243b49a9fcSbipmis; LE-NEXT: [[E4:%.*]] = zext i32 [[L4]] to i128 8253b49a9fcSbipmis; LE-NEXT: [[S3:%.*]] = shl i128 [[E3]], 64 8263b49a9fcSbipmis; LE-NEXT: [[S4:%.*]] = shl i128 [[E4]], 96 8273b49a9fcSbipmis; LE-NEXT: [[O2:%.*]] = or i128 [[TMP1]], [[S3]] 8283b49a9fcSbipmis; LE-NEXT: [[O3:%.*]] = or i128 [[O2]], [[S4]] 8293b49a9fcSbipmis; LE-NEXT: ret i128 [[O3]] 8303b49a9fcSbipmis; 8313b49a9fcSbipmis; BE-LABEL: @loadCombine_i128( 8323b49a9fcSbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i32, ptr [[P:%.*]], i32 1 8333b49a9fcSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[P]], i32 2 8343b49a9fcSbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i32, ptr [[P]], i32 3 8353b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i32, ptr [[P]], align 4 8363b49a9fcSbipmis; BE-NEXT: [[L2:%.*]] = load i32, ptr [[P1]], align 4 8373b49a9fcSbipmis; BE-NEXT: [[L3:%.*]] = load i32, ptr [[P2]], align 4 8383b49a9fcSbipmis; BE-NEXT: [[L4:%.*]] = load i32, ptr [[P3]], align 4 8393b49a9fcSbipmis; BE-NEXT: [[E1:%.*]] = zext i32 [[L1]] to i128 8403b49a9fcSbipmis; BE-NEXT: [[E2:%.*]] = zext i32 [[L2]] to i128 8413b49a9fcSbipmis; BE-NEXT: [[E3:%.*]] = zext i32 [[L3]] to i128 8423b49a9fcSbipmis; BE-NEXT: [[E4:%.*]] = zext i32 [[L4]] to i128 8433b49a9fcSbipmis; BE-NEXT: [[S2:%.*]] = shl i128 [[E2]], 32 8443b49a9fcSbipmis; BE-NEXT: [[S3:%.*]] = shl i128 [[E3]], 64 8453b49a9fcSbipmis; BE-NEXT: [[S4:%.*]] = shl i128 [[E4]], 96 8463b49a9fcSbipmis; BE-NEXT: [[O1:%.*]] = or i128 [[E1]], [[S2]] 8473b49a9fcSbipmis; BE-NEXT: [[O2:%.*]] = or i128 [[O1]], [[S3]] 8483b49a9fcSbipmis; BE-NEXT: [[O3:%.*]] = or i128 [[O2]], [[S4]] 8493b49a9fcSbipmis; BE-NEXT: ret i128 [[O3]] 850dd48c0beSbipmis; 851dd48c0beSbipmis %p1 = getelementptr i32, ptr %p, i32 1 852dd48c0beSbipmis %p2 = getelementptr i32, ptr %p, i32 2 853dd48c0beSbipmis %p3 = getelementptr i32, ptr %p, i32 3 854dd48c0beSbipmis %l1 = load i32, ptr %p 855dd48c0beSbipmis %l2 = load i32, ptr %p1 856dd48c0beSbipmis %l3 = load i32, ptr %p2 857dd48c0beSbipmis %l4 = load i32, ptr %p3 858dd48c0beSbipmis 859dd48c0beSbipmis %e1 = zext i32 %l1 to i128 860dd48c0beSbipmis %e2 = zext i32 %l2 to i128 861dd48c0beSbipmis %e3 = zext i32 %l3 to i128 862dd48c0beSbipmis %e4 = zext i32 %l4 to i128 863dd48c0beSbipmis 864dd48c0beSbipmis %s2 = shl i128 %e2, 32 865dd48c0beSbipmis %s3 = shl i128 %e3, 64 866dd48c0beSbipmis %s4 = shl i128 %e4, 96 867dd48c0beSbipmis 868dd48c0beSbipmis %o1 = or i128 %e1, %s2 869dd48c0beSbipmis %o2 = or i128 %o1, %s3 870dd48c0beSbipmis %o3 = or i128 %o2, %s4 871dd48c0beSbipmis ret i128 %o3 872dd48c0beSbipmis} 873dd48c0beSbipmis 874dd48c0beSbipmisdefine i128 @loadCombine_i128_BE(ptr %p) { 8753b49a9fcSbipmis; LE-LABEL: @loadCombine_i128_BE( 8763b49a9fcSbipmis; LE-NEXT: [[P1:%.*]] = getelementptr i32, ptr [[P:%.*]], i32 1 8773b49a9fcSbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[P]], i32 2 8783b49a9fcSbipmis; LE-NEXT: [[P3:%.*]] = getelementptr i32, ptr [[P]], i32 3 8793b49a9fcSbipmis; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P]], align 4 8803b49a9fcSbipmis; LE-NEXT: [[L2:%.*]] = load i32, ptr [[P1]], align 4 8813b49a9fcSbipmis; LE-NEXT: [[L3:%.*]] = load i32, ptr [[P2]], align 4 8823b49a9fcSbipmis; LE-NEXT: [[L4:%.*]] = load i32, ptr [[P3]], align 4 8833b49a9fcSbipmis; LE-NEXT: [[E1:%.*]] = zext i32 [[L1]] to i128 8843b49a9fcSbipmis; LE-NEXT: [[E2:%.*]] = zext i32 [[L2]] to i128 8853b49a9fcSbipmis; LE-NEXT: [[E3:%.*]] = zext i32 [[L3]] to i128 8863b49a9fcSbipmis; LE-NEXT: [[E4:%.*]] = zext i32 [[L4]] to i128 8873b49a9fcSbipmis; LE-NEXT: [[S1:%.*]] = shl i128 [[E1]], 96 8883b49a9fcSbipmis; LE-NEXT: [[S2:%.*]] = shl i128 [[E2]], 64 8893b49a9fcSbipmis; LE-NEXT: [[S3:%.*]] = shl i128 [[E3]], 32 8903b49a9fcSbipmis; LE-NEXT: [[O1:%.*]] = or i128 [[S1]], [[S2]] 8913b49a9fcSbipmis; LE-NEXT: [[O2:%.*]] = or i128 [[O1]], [[S3]] 8923b49a9fcSbipmis; LE-NEXT: [[O3:%.*]] = or i128 [[O2]], [[E4]] 8933b49a9fcSbipmis; LE-NEXT: ret i128 [[O3]] 8943b49a9fcSbipmis; 8953b49a9fcSbipmis; BE-LABEL: @loadCombine_i128_BE( 8963b49a9fcSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[P:%.*]], i32 2 8973b49a9fcSbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i32, ptr [[P]], i32 3 8983b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i64, ptr [[P]], align 4 8993b49a9fcSbipmis; BE-NEXT: [[TMP1:%.*]] = zext i64 [[L1]] to i128 9003b49a9fcSbipmis; BE-NEXT: [[TMP2:%.*]] = shl i128 [[TMP1]], 64 9013b49a9fcSbipmis; BE-NEXT: [[L3:%.*]] = load i32, ptr [[P2]], align 4 9023b49a9fcSbipmis; BE-NEXT: [[L4:%.*]] = load i32, ptr [[P3]], align 4 9033b49a9fcSbipmis; BE-NEXT: [[E3:%.*]] = zext i32 [[L3]] to i128 9043b49a9fcSbipmis; BE-NEXT: [[E4:%.*]] = zext i32 [[L4]] to i128 9053b49a9fcSbipmis; BE-NEXT: [[S3:%.*]] = shl i128 [[E3]], 32 9063b49a9fcSbipmis; BE-NEXT: [[O2:%.*]] = or i128 [[TMP2]], [[S3]] 9073b49a9fcSbipmis; BE-NEXT: [[O3:%.*]] = or i128 [[O2]], [[E4]] 9083b49a9fcSbipmis; BE-NEXT: ret i128 [[O3]] 909dd48c0beSbipmis; 910dd48c0beSbipmis %p1 = getelementptr i32, ptr %p, i32 1 911dd48c0beSbipmis %p2 = getelementptr i32, ptr %p, i32 2 912dd48c0beSbipmis %p3 = getelementptr i32, ptr %p, i32 3 913dd48c0beSbipmis %l1 = load i32, ptr %p 914dd48c0beSbipmis %l2 = load i32, ptr %p1 915dd48c0beSbipmis %l3 = load i32, ptr %p2 916dd48c0beSbipmis %l4 = load i32, ptr %p3 917dd48c0beSbipmis 918dd48c0beSbipmis %e1 = zext i32 %l1 to i128 919dd48c0beSbipmis %e2 = zext i32 %l2 to i128 920dd48c0beSbipmis %e3 = zext i32 %l3 to i128 921dd48c0beSbipmis %e4 = zext i32 %l4 to i128 922dd48c0beSbipmis 923dd48c0beSbipmis %s1 = shl i128 %e1, 96 924dd48c0beSbipmis %s2 = shl i128 %e2, 64 925dd48c0beSbipmis %s3 = shl i128 %e3, 32 926dd48c0beSbipmis 927dd48c0beSbipmis %o1 = or i128 %s1, %s2 928dd48c0beSbipmis %o2 = or i128 %o1, %s3 929dd48c0beSbipmis %o3 = or i128 %o2, %e4 930dd48c0beSbipmis ret i128 %o3 931dd48c0beSbipmis} 932dd48c0beSbipmis 933dd48c0beSbipmisdefine i64 @loadCombine_i64(ptr %p) { 9343b49a9fcSbipmis; LE-LABEL: @loadCombine_i64( 9353b49a9fcSbipmis; LE-NEXT: [[L1:%.*]] = load i64, ptr [[P:%.*]], align 2 9363b49a9fcSbipmis; LE-NEXT: ret i64 [[L1]] 9373b49a9fcSbipmis; 9383b49a9fcSbipmis; BE-LABEL: @loadCombine_i64( 9393b49a9fcSbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i16, ptr [[P:%.*]], i32 1 9403b49a9fcSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i16, ptr [[P]], i32 2 9413b49a9fcSbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i16, ptr [[P]], i32 3 9423b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 2 9433b49a9fcSbipmis; BE-NEXT: [[L2:%.*]] = load i16, ptr [[P1]], align 2 9443b49a9fcSbipmis; BE-NEXT: [[L3:%.*]] = load i16, ptr [[P2]], align 2 9453b49a9fcSbipmis; BE-NEXT: [[L4:%.*]] = load i16, ptr [[P3]], align 2 9463b49a9fcSbipmis; BE-NEXT: [[E1:%.*]] = zext i16 [[L1]] to i64 9473b49a9fcSbipmis; BE-NEXT: [[E2:%.*]] = zext i16 [[L2]] to i64 9483b49a9fcSbipmis; BE-NEXT: [[E3:%.*]] = zext i16 [[L3]] to i64 9493b49a9fcSbipmis; BE-NEXT: [[E4:%.*]] = zext i16 [[L4]] to i64 9503b49a9fcSbipmis; BE-NEXT: [[S2:%.*]] = shl i64 [[E2]], 16 9513b49a9fcSbipmis; BE-NEXT: [[S3:%.*]] = shl i64 [[E3]], 32 9523b49a9fcSbipmis; BE-NEXT: [[S4:%.*]] = shl i64 [[E4]], 48 9533b49a9fcSbipmis; BE-NEXT: [[O1:%.*]] = or i64 [[E1]], [[S2]] 9543b49a9fcSbipmis; BE-NEXT: [[O2:%.*]] = or i64 [[O1]], [[S3]] 9553b49a9fcSbipmis; BE-NEXT: [[O3:%.*]] = or i64 [[O2]], [[S4]] 9563b49a9fcSbipmis; BE-NEXT: ret i64 [[O3]] 957dd48c0beSbipmis; 958dd48c0beSbipmis %p1 = getelementptr i16, ptr %p, i32 1 959dd48c0beSbipmis %p2 = getelementptr i16, ptr %p, i32 2 960dd48c0beSbipmis %p3 = getelementptr i16, ptr %p, i32 3 961dd48c0beSbipmis %l1 = load i16, ptr %p 962dd48c0beSbipmis %l2 = load i16, ptr %p1 963dd48c0beSbipmis %l3 = load i16, ptr %p2 964dd48c0beSbipmis %l4 = load i16, ptr %p3 965dd48c0beSbipmis 966dd48c0beSbipmis %e1 = zext i16 %l1 to i64 967dd48c0beSbipmis %e2 = zext i16 %l2 to i64 968dd48c0beSbipmis %e3 = zext i16 %l3 to i64 969dd48c0beSbipmis %e4 = zext i16 %l4 to i64 970dd48c0beSbipmis 971dd48c0beSbipmis %s2 = shl i64 %e2, 16 972dd48c0beSbipmis %s3 = shl i64 %e3, 32 973dd48c0beSbipmis %s4 = shl i64 %e4, 48 974dd48c0beSbipmis 975dd48c0beSbipmis %o1 = or i64 %e1, %s2 976dd48c0beSbipmis %o2 = or i64 %o1, %s3 977dd48c0beSbipmis %o3 = or i64 %o2, %s4 978dd48c0beSbipmis ret i64 %o3 979dd48c0beSbipmis} 980dd48c0beSbipmis 981dd48c0beSbipmisdefine i64 @loadCombine_i64_BE(ptr %p) { 9823b49a9fcSbipmis; LE-LABEL: @loadCombine_i64_BE( 9833b49a9fcSbipmis; LE-NEXT: [[P1:%.*]] = getelementptr i16, ptr [[P:%.*]], i32 1 9843b49a9fcSbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i16, ptr [[P]], i32 2 9853b49a9fcSbipmis; LE-NEXT: [[P3:%.*]] = getelementptr i16, ptr [[P]], i32 3 9863b49a9fcSbipmis; LE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 2 9873b49a9fcSbipmis; LE-NEXT: [[L2:%.*]] = load i16, ptr [[P1]], align 2 9883b49a9fcSbipmis; LE-NEXT: [[L3:%.*]] = load i16, ptr [[P2]], align 2 9893b49a9fcSbipmis; LE-NEXT: [[L4:%.*]] = load i16, ptr [[P3]], align 2 9903b49a9fcSbipmis; LE-NEXT: [[E1:%.*]] = zext i16 [[L1]] to i64 9913b49a9fcSbipmis; LE-NEXT: [[E2:%.*]] = zext i16 [[L2]] to i64 9923b49a9fcSbipmis; LE-NEXT: [[E3:%.*]] = zext i16 [[L3]] to i64 9933b49a9fcSbipmis; LE-NEXT: [[E4:%.*]] = zext i16 [[L4]] to i64 9943b49a9fcSbipmis; LE-NEXT: [[S1:%.*]] = shl i64 [[E1]], 48 9953b49a9fcSbipmis; LE-NEXT: [[S2:%.*]] = shl i64 [[E2]], 32 9963b49a9fcSbipmis; LE-NEXT: [[S3:%.*]] = shl i64 [[E3]], 16 9973b49a9fcSbipmis; LE-NEXT: [[O1:%.*]] = or i64 [[S1]], [[S2]] 9983b49a9fcSbipmis; LE-NEXT: [[O2:%.*]] = or i64 [[O1]], [[S3]] 9993b49a9fcSbipmis; LE-NEXT: [[O3:%.*]] = or i64 [[O2]], [[E4]] 10003b49a9fcSbipmis; LE-NEXT: ret i64 [[O3]] 10013b49a9fcSbipmis; 10023b49a9fcSbipmis; BE-LABEL: @loadCombine_i64_BE( 10033b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i64, ptr [[P:%.*]], align 2 10043b49a9fcSbipmis; BE-NEXT: ret i64 [[L1]] 1005dd48c0beSbipmis; 1006dd48c0beSbipmis %p1 = getelementptr i16, ptr %p, i32 1 1007dd48c0beSbipmis %p2 = getelementptr i16, ptr %p, i32 2 1008dd48c0beSbipmis %p3 = getelementptr i16, ptr %p, i32 3 1009dd48c0beSbipmis %l1 = load i16, ptr %p 1010dd48c0beSbipmis %l2 = load i16, ptr %p1 1011dd48c0beSbipmis %l3 = load i16, ptr %p2 1012dd48c0beSbipmis %l4 = load i16, ptr %p3 1013dd48c0beSbipmis 1014dd48c0beSbipmis %e1 = zext i16 %l1 to i64 1015dd48c0beSbipmis %e2 = zext i16 %l2 to i64 1016dd48c0beSbipmis %e3 = zext i16 %l3 to i64 1017dd48c0beSbipmis %e4 = zext i16 %l4 to i64 1018dd48c0beSbipmis 1019dd48c0beSbipmis %s1 = shl i64 %e1, 48 1020dd48c0beSbipmis %s2 = shl i64 %e2, 32 1021dd48c0beSbipmis %s3 = shl i64 %e3, 16 1022dd48c0beSbipmis 1023dd48c0beSbipmis %o1 = or i64 %s1, %s2 1024dd48c0beSbipmis %o2 = or i64 %o1, %s3 1025dd48c0beSbipmis %o3 = or i64 %o2, %e4 1026dd48c0beSbipmis ret i64 %o3 1027dd48c0beSbipmis} 1028dd48c0beSbipmis 1029dd48c0beSbipmisdefine i16 @loadCombine_2consecutive_atomic(ptr %p) { 1030dd48c0beSbipmis; ALL-LABEL: @loadCombine_2consecutive_atomic( 1031dd48c0beSbipmis; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 1032dd48c0beSbipmis; ALL-NEXT: [[L1:%.*]] = load atomic i8, ptr [[P]] monotonic, align 1 1033dd48c0beSbipmis; ALL-NEXT: [[L2:%.*]] = load atomic i8, ptr [[P1]] monotonic, align 1 1034dd48c0beSbipmis; ALL-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i16 1035dd48c0beSbipmis; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i16 1036dd48c0beSbipmis; ALL-NEXT: [[S2:%.*]] = shl i16 [[E2]], 8 1037dd48c0beSbipmis; ALL-NEXT: [[O1:%.*]] = or i16 [[E1]], [[S2]] 1038dd48c0beSbipmis; ALL-NEXT: ret i16 [[O1]] 1039dd48c0beSbipmis; 1040dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 1041dd48c0beSbipmis %l1 = load atomic i8, ptr %p monotonic, align 1 1042dd48c0beSbipmis %l2 = load atomic i8, ptr %p1 monotonic, align 1 1043dd48c0beSbipmis %e1 = zext i8 %l1 to i16 1044dd48c0beSbipmis %e2 = zext i8 %l2 to i16 1045dd48c0beSbipmis %s2 = shl i16 %e2, 8 1046dd48c0beSbipmis %o1 = or i16 %e1, %s2 1047dd48c0beSbipmis ret i16 %o1 1048dd48c0beSbipmis} 1049dd48c0beSbipmis 1050dd48c0beSbipmisdefine i16 @loadCombine_2consecutive_volatile(ptr %p) { 1051dd48c0beSbipmis; ALL-LABEL: @loadCombine_2consecutive_volatile( 1052dd48c0beSbipmis; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 1053dd48c0beSbipmis; ALL-NEXT: [[L1:%.*]] = load volatile i8, ptr [[P]], align 1 1054dd48c0beSbipmis; ALL-NEXT: [[L2:%.*]] = load volatile i8, ptr [[P1]], align 1 1055dd48c0beSbipmis; ALL-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i16 1056dd48c0beSbipmis; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i16 1057dd48c0beSbipmis; ALL-NEXT: [[S2:%.*]] = shl i16 [[E2]], 8 1058dd48c0beSbipmis; ALL-NEXT: [[O1:%.*]] = or i16 [[E1]], [[S2]] 1059dd48c0beSbipmis; ALL-NEXT: ret i16 [[O1]] 1060dd48c0beSbipmis; 1061dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 1062dd48c0beSbipmis %l1 = load volatile i8, ptr %p, align 1 1063dd48c0beSbipmis %l2 = load volatile i8, ptr %p1, align 1 1064dd48c0beSbipmis %e1 = zext i8 %l1 to i16 1065dd48c0beSbipmis %e2 = zext i8 %l2 to i16 1066dd48c0beSbipmis %s2 = shl i16 %e2, 8 1067dd48c0beSbipmis %o1 = or i16 %e1, %s2 1068dd48c0beSbipmis ret i16 %o1 1069dd48c0beSbipmis} 1070dd48c0beSbipmis 1071dd48c0beSbipmisdefine i16 @loadCombine_2consecutive_separateBB(ptr %p) { 1072dd48c0beSbipmis; ALL-LABEL: @loadCombine_2consecutive_separateBB( 1073dd48c0beSbipmis; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 1074dd48c0beSbipmis; ALL-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 1075dd48c0beSbipmis; ALL-NEXT: br label [[BB2:%.*]] 1076dd48c0beSbipmis; ALL: bb2: 1077dd48c0beSbipmis; ALL-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 1078dd48c0beSbipmis; ALL-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i16 1079dd48c0beSbipmis; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i16 1080dd48c0beSbipmis; ALL-NEXT: [[S2:%.*]] = shl i16 [[E2]], 8 1081dd48c0beSbipmis; ALL-NEXT: [[O1:%.*]] = or i16 [[E1]], [[S2]] 1082dd48c0beSbipmis; ALL-NEXT: ret i16 [[O1]] 1083dd48c0beSbipmis; 1084dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 1085dd48c0beSbipmis %l1 = load i8, ptr %p, align 1 1086dd48c0beSbipmis br label %bb2 1087dd48c0beSbipmis 1088dd48c0beSbipmisbb2: 1089dd48c0beSbipmis %l2 = load i8, ptr %p1, align 1 1090dd48c0beSbipmis %e1 = zext i8 %l1 to i16 1091dd48c0beSbipmis %e2 = zext i8 %l2 to i16 1092dd48c0beSbipmis %s2 = shl i16 %e2, 8 1093dd48c0beSbipmis %o1 = or i16 %e1, %s2 1094dd48c0beSbipmis ret i16 %o1 1095dd48c0beSbipmis} 1096dd48c0beSbipmis 1097dd48c0beSbipmisdefine i16 @loadCombine_2consecutive_separateptr(ptr %p, ptr %p2) { 1098dd48c0beSbipmis; ALL-LABEL: @loadCombine_2consecutive_separateptr( 1099dd48c0beSbipmis; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P2:%.*]], i32 1 1100dd48c0beSbipmis; ALL-NEXT: [[L1:%.*]] = load i8, ptr [[P:%.*]], align 1 1101dd48c0beSbipmis; ALL-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 1102dd48c0beSbipmis; ALL-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i16 1103dd48c0beSbipmis; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i16 1104dd48c0beSbipmis; ALL-NEXT: [[S2:%.*]] = shl i16 [[E2]], 8 1105dd48c0beSbipmis; ALL-NEXT: [[O1:%.*]] = or i16 [[E1]], [[S2]] 1106dd48c0beSbipmis; ALL-NEXT: ret i16 [[O1]] 1107dd48c0beSbipmis; 1108dd48c0beSbipmis %p1 = getelementptr i8, ptr %p2, i32 1 1109dd48c0beSbipmis %l1 = load i8, ptr %p, align 1 1110dd48c0beSbipmis %l2 = load i8, ptr %p1, align 1 1111dd48c0beSbipmis %e1 = zext i8 %l1 to i16 1112dd48c0beSbipmis %e2 = zext i8 %l2 to i16 1113dd48c0beSbipmis %s2 = shl i16 %e2, 8 1114dd48c0beSbipmis %o1 = or i16 %e1, %s2 1115dd48c0beSbipmis ret i16 %o1 1116dd48c0beSbipmis} 1117dd48c0beSbipmis 1118dd48c0beSbipmisdefine i64 @load64_farLoads(ptr %ptr) { 11193b49a9fcSbipmis; LE-LABEL: @load64_farLoads( 11203b49a9fcSbipmis; LE-NEXT: entry: 11213b49a9fcSbipmis; LE-NEXT: [[TMP0:%.*]] = load i64, ptr [[PTR:%.*]], align 1 11223b49a9fcSbipmis; LE-NEXT: ret i64 [[TMP0]] 11233b49a9fcSbipmis; 11243b49a9fcSbipmis; BE-LABEL: @load64_farLoads( 11253b49a9fcSbipmis; BE-NEXT: entry: 11263b49a9fcSbipmis; BE-NEXT: [[TMP0:%.*]] = load i8, ptr [[PTR:%.*]], align 1 11273b49a9fcSbipmis; BE-NEXT: [[CONV:%.*]] = zext i8 [[TMP0]] to i64 11283b49a9fcSbipmis; BE-NEXT: [[ARRAYIDX1:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i64 1 11293b49a9fcSbipmis; BE-NEXT: [[TMP1:%.*]] = load i8, ptr [[ARRAYIDX1]], align 1 11303b49a9fcSbipmis; BE-NEXT: [[CONV2:%.*]] = zext i8 [[TMP1]] to i64 11313b49a9fcSbipmis; BE-NEXT: [[SHL:%.*]] = shl i64 [[CONV2]], 8 11323b49a9fcSbipmis; BE-NEXT: [[OR:%.*]] = or i64 [[CONV]], [[SHL]] 11333b49a9fcSbipmis; BE-NEXT: [[ARRAYIDX3:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i64 2 11343b49a9fcSbipmis; BE-NEXT: [[TMP2:%.*]] = load i8, ptr [[ARRAYIDX3]], align 1 11353b49a9fcSbipmis; BE-NEXT: [[CONV4:%.*]] = zext i8 [[TMP2]] to i64 11363b49a9fcSbipmis; BE-NEXT: [[SHL5:%.*]] = shl i64 [[CONV4]], 16 11373b49a9fcSbipmis; BE-NEXT: [[OR6:%.*]] = or i64 [[OR]], [[SHL5]] 11383b49a9fcSbipmis; BE-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i64 3 11393b49a9fcSbipmis; BE-NEXT: [[TMP3:%.*]] = load i8, ptr [[ARRAYIDX7]], align 1 11403b49a9fcSbipmis; BE-NEXT: [[CONV8:%.*]] = zext i8 [[TMP3]] to i64 11413b49a9fcSbipmis; BE-NEXT: [[SHL9:%.*]] = shl i64 [[CONV8]], 24 11423b49a9fcSbipmis; BE-NEXT: [[OR10:%.*]] = or i64 [[OR6]], [[SHL9]] 11433b49a9fcSbipmis; BE-NEXT: [[ARRAYIDX11:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i64 4 11443b49a9fcSbipmis; BE-NEXT: [[TMP4:%.*]] = load i8, ptr [[ARRAYIDX11]], align 1 11453b49a9fcSbipmis; BE-NEXT: [[CONV12:%.*]] = zext i8 [[TMP4]] to i64 11463b49a9fcSbipmis; BE-NEXT: [[SHL13:%.*]] = shl i64 [[CONV12]], 32 11473b49a9fcSbipmis; BE-NEXT: [[OR14:%.*]] = or i64 [[OR10]], [[SHL13]] 11483b49a9fcSbipmis; BE-NEXT: [[ARRAYIDX15:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i64 5 11493b49a9fcSbipmis; BE-NEXT: [[TMP5:%.*]] = load i8, ptr [[ARRAYIDX15]], align 1 11503b49a9fcSbipmis; BE-NEXT: [[CONV16:%.*]] = zext i8 [[TMP5]] to i64 11513b49a9fcSbipmis; BE-NEXT: [[SHL17:%.*]] = shl i64 [[CONV16]], 40 11523b49a9fcSbipmis; BE-NEXT: [[OR18:%.*]] = or i64 [[OR14]], [[SHL17]] 11533b49a9fcSbipmis; BE-NEXT: [[ARRAYIDX19:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i64 6 11543b49a9fcSbipmis; BE-NEXT: [[TMP6:%.*]] = load i8, ptr [[ARRAYIDX19]], align 1 11553b49a9fcSbipmis; BE-NEXT: [[CONV20:%.*]] = zext i8 [[TMP6]] to i64 11563b49a9fcSbipmis; BE-NEXT: [[SHL21:%.*]] = shl i64 [[CONV20]], 48 11573b49a9fcSbipmis; BE-NEXT: [[OR22:%.*]] = or i64 [[OR18]], [[SHL21]] 11583b49a9fcSbipmis; BE-NEXT: [[ARRAYIDX23:%.*]] = getelementptr inbounds i8, ptr [[PTR]], i64 7 11593b49a9fcSbipmis; BE-NEXT: [[TMP7:%.*]] = load i8, ptr [[ARRAYIDX23]], align 1 11603b49a9fcSbipmis; BE-NEXT: [[CONV24:%.*]] = zext i8 [[TMP7]] to i64 11613b49a9fcSbipmis; BE-NEXT: [[SHL25:%.*]] = shl i64 [[CONV24]], 56 11623b49a9fcSbipmis; BE-NEXT: [[OR26:%.*]] = or i64 [[OR22]], [[SHL25]] 11633b49a9fcSbipmis; BE-NEXT: ret i64 [[OR26]] 1164dd48c0beSbipmis; 1165dd48c0beSbipmisentry: 1166dd48c0beSbipmis %0 = load i8, ptr %ptr, align 1 1167dd48c0beSbipmis %conv = zext i8 %0 to i64 1168dd48c0beSbipmis %arrayidx1 = getelementptr inbounds i8, ptr %ptr, i64 1 1169dd48c0beSbipmis %1 = load i8, ptr %arrayidx1, align 1 1170dd48c0beSbipmis %conv2 = zext i8 %1 to i64 1171dd48c0beSbipmis %shl = shl i64 %conv2, 8 1172dd48c0beSbipmis %or = or i64 %conv, %shl 1173dd48c0beSbipmis %arrayidx3 = getelementptr inbounds i8, ptr %ptr, i64 2 1174dd48c0beSbipmis %2 = load i8, ptr %arrayidx3, align 1 1175dd48c0beSbipmis %conv4 = zext i8 %2 to i64 1176dd48c0beSbipmis %shl5 = shl i64 %conv4, 16 1177dd48c0beSbipmis %or6 = or i64 %or, %shl5 1178dd48c0beSbipmis %arrayidx7 = getelementptr inbounds i8, ptr %ptr, i64 3 1179dd48c0beSbipmis %3 = load i8, ptr %arrayidx7, align 1 1180dd48c0beSbipmis %conv8 = zext i8 %3 to i64 1181dd48c0beSbipmis %shl9 = shl i64 %conv8, 24 1182dd48c0beSbipmis %or10 = or i64 %or6, %shl9 1183dd48c0beSbipmis %arrayidx11 = getelementptr inbounds i8, ptr %ptr, i64 4 1184dd48c0beSbipmis %4 = load i8, ptr %arrayidx11, align 1 1185dd48c0beSbipmis %conv12 = zext i8 %4 to i64 1186dd48c0beSbipmis %shl13 = shl i64 %conv12, 32 1187dd48c0beSbipmis %or14 = or i64 %or10, %shl13 1188dd48c0beSbipmis %arrayidx15 = getelementptr inbounds i8, ptr %ptr, i64 5 1189dd48c0beSbipmis %5 = load i8, ptr %arrayidx15, align 1 1190dd48c0beSbipmis %conv16 = zext i8 %5 to i64 1191dd48c0beSbipmis %shl17 = shl i64 %conv16, 40 1192dd48c0beSbipmis %or18 = or i64 %or14, %shl17 1193dd48c0beSbipmis %arrayidx19 = getelementptr inbounds i8, ptr %ptr, i64 6 1194dd48c0beSbipmis %6 = load i8, ptr %arrayidx19, align 1 1195dd48c0beSbipmis %conv20 = zext i8 %6 to i64 1196dd48c0beSbipmis %shl21 = shl i64 %conv20, 48 1197dd48c0beSbipmis %or22 = or i64 %or18, %shl21 1198dd48c0beSbipmis %arrayidx23 = getelementptr inbounds i8, ptr %ptr, i64 7 1199dd48c0beSbipmis %7 = load i8, ptr %arrayidx23, align 1 1200dd48c0beSbipmis %conv24 = zext i8 %7 to i64 1201dd48c0beSbipmis %shl25 = shl i64 %conv24, 56 1202dd48c0beSbipmis %or26 = or i64 %or22, %shl25 1203dd48c0beSbipmis ret i64 %or26 1204dd48c0beSbipmis} 1205dd48c0beSbipmis 1206dd48c0beSbipmisdefine i32 @loadCombine_4consecutive_metadata(ptr %p, ptr %pstr) { 12073b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive_metadata( 1208*f68b0e36SAntonio Frighetto; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1, !alias.scope [[META0:![0-9]+]] 1209*f68b0e36SAntonio Frighetto; LE-NEXT: store i32 25, ptr [[PSTR:%.*]], align 4, !noalias [[META0]] 12103b49a9fcSbipmis; LE-NEXT: ret i32 [[L1]] 12113b49a9fcSbipmis; 12123b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive_metadata( 12133b49a9fcSbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 12143b49a9fcSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 12153b49a9fcSbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 1216*f68b0e36SAntonio Frighetto; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1, !alias.scope [[META0:![0-9]+]] 1217*f68b0e36SAntonio Frighetto; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1, !alias.scope [[META0]] 1218*f68b0e36SAntonio Frighetto; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1, !alias.scope [[META0]] 1219*f68b0e36SAntonio Frighetto; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1, !alias.scope [[META0]] 1220*f68b0e36SAntonio Frighetto; BE-NEXT: store i32 25, ptr [[PSTR:%.*]], align 4, !noalias [[META0]] 12213b49a9fcSbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 12223b49a9fcSbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 12233b49a9fcSbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 12243b49a9fcSbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 12253b49a9fcSbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 12263b49a9fcSbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 12273b49a9fcSbipmis; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 12283b49a9fcSbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 12293b49a9fcSbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 12303b49a9fcSbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 12313b49a9fcSbipmis; BE-NEXT: ret i32 [[O3]] 1232dd48c0beSbipmis; 1233dd48c0beSbipmis %p1 = getelementptr i8, ptr %p, i32 1 1234dd48c0beSbipmis %p2 = getelementptr i8, ptr %p, i32 2 1235dd48c0beSbipmis %p3 = getelementptr i8, ptr %p, i32 3 1236dd48c0beSbipmis %l1 = load i8, ptr %p, !alias.scope !2 1237dd48c0beSbipmis %l2 = load i8, ptr %p1, !alias.scope !2 1238dd48c0beSbipmis %l3 = load i8, ptr %p2, !alias.scope !2 1239dd48c0beSbipmis %l4 = load i8, ptr %p3, !alias.scope !2 1240dd48c0beSbipmis store i32 25, ptr %pstr, !noalias !2 1241dd48c0beSbipmis 1242dd48c0beSbipmis %e1 = zext i8 %l1 to i32 1243dd48c0beSbipmis %e2 = zext i8 %l2 to i32 1244dd48c0beSbipmis %e3 = zext i8 %l3 to i32 1245dd48c0beSbipmis %e4 = zext i8 %l4 to i32 1246dd48c0beSbipmis 1247dd48c0beSbipmis %s2 = shl i32 %e2, 8 1248dd48c0beSbipmis %s3 = shl i32 %e3, 16 1249dd48c0beSbipmis %s4 = shl i32 %e4, 24 1250dd48c0beSbipmis 1251dd48c0beSbipmis %o1 = or i32 %e1, %s2 1252dd48c0beSbipmis %o2 = or i32 %o1, %s3 1253dd48c0beSbipmis %o3 = or i32 %o2, %s4 1254dd48c0beSbipmis ret i32 %o3 1255dd48c0beSbipmis} 1256dd48c0beSbipmis 1257dd48c0beSbipmis!0 = distinct !{!0} 1258dd48c0beSbipmis!1 = distinct !{!1, !0} 1259dd48c0beSbipmis!2 = !{!1} 1260dd48c0beSbipmis 1261dd48c0beSbipmis; CHECK: !0 = !{!1} 1262dd48c0beSbipmis; CHECK: !1 = distinct !{!1, !2} 1263dd48c0beSbipmis; CHECK: !2 = distinct !{!2} 1264dd48c0beSbipmis 1265dd48c0beSbipmisdefine i16 @loadCombine_4consecutive_4bit(ptr %p) { 1266dd48c0beSbipmis; ALL-LABEL: @loadCombine_4consecutive_4bit( 1267dd48c0beSbipmis; ALL-NEXT: [[P1:%.*]] = getelementptr i4, ptr [[P:%.*]], i32 1 1268dd48c0beSbipmis; ALL-NEXT: [[P2:%.*]] = getelementptr i4, ptr [[P]], i32 2 1269dd48c0beSbipmis; ALL-NEXT: [[P3:%.*]] = getelementptr i4, ptr [[P]], i32 3 1270dd48c0beSbipmis; ALL-NEXT: [[L1:%.*]] = load i4, ptr [[P]], align 1 1271dd48c0beSbipmis; ALL-NEXT: [[L2:%.*]] = load i4, ptr [[P1]], align 1 1272dd48c0beSbipmis; ALL-NEXT: [[L3:%.*]] = load i4, ptr [[P2]], align 1 1273dd48c0beSbipmis; ALL-NEXT: [[L4:%.*]] = load i4, ptr [[P3]], align 1 1274dd48c0beSbipmis; ALL-NEXT: [[E1:%.*]] = zext i4 [[L1]] to i16 1275dd48c0beSbipmis; ALL-NEXT: [[E2:%.*]] = zext i4 [[L2]] to i16 1276dd48c0beSbipmis; ALL-NEXT: [[E3:%.*]] = zext i4 [[L3]] to i16 1277dd48c0beSbipmis; ALL-NEXT: [[E4:%.*]] = zext i4 [[L4]] to i16 1278dd48c0beSbipmis; ALL-NEXT: [[S2:%.*]] = shl i16 [[E2]], 4 1279dd48c0beSbipmis; ALL-NEXT: [[S3:%.*]] = shl i16 [[E3]], 8 1280dd48c0beSbipmis; ALL-NEXT: [[S4:%.*]] = shl i16 [[E4]], 12 1281dd48c0beSbipmis; ALL-NEXT: [[O1:%.*]] = or i16 [[E1]], [[S2]] 1282dd48c0beSbipmis; ALL-NEXT: [[O2:%.*]] = or i16 [[O1]], [[S3]] 1283dd48c0beSbipmis; ALL-NEXT: [[O3:%.*]] = or i16 [[O2]], [[S4]] 1284dd48c0beSbipmis; ALL-NEXT: ret i16 [[O3]] 1285dd48c0beSbipmis; 1286dd48c0beSbipmis %p1 = getelementptr i4, ptr %p, i32 1 1287dd48c0beSbipmis %p2 = getelementptr i4, ptr %p, i32 2 1288dd48c0beSbipmis %p3 = getelementptr i4, ptr %p, i32 3 1289dd48c0beSbipmis %l1 = load i4, ptr %p 1290dd48c0beSbipmis %l2 = load i4, ptr %p1 1291dd48c0beSbipmis %l3 = load i4, ptr %p2 1292dd48c0beSbipmis %l4 = load i4, ptr %p3 1293dd48c0beSbipmis %e1 = zext i4 %l1 to i16 1294dd48c0beSbipmis %e2 = zext i4 %l2 to i16 1295dd48c0beSbipmis %e3 = zext i4 %l3 to i16 1296dd48c0beSbipmis %e4 = zext i4 %l4 to i16 1297dd48c0beSbipmis %s2 = shl i16 %e2, 4 1298dd48c0beSbipmis %s3 = shl i16 %e3, 8 1299dd48c0beSbipmis %s4 = shl i16 %e4, 12 1300dd48c0beSbipmis %o1 = or i16 %e1, %s2 1301dd48c0beSbipmis %o2 = or i16 %o1, %s3 1302dd48c0beSbipmis %o3 = or i16 %o2, %s4 1303dd48c0beSbipmis ret i16 %o3 1304dd48c0beSbipmis} 13051dd7e576Sbipmis 13061dd7e576Sbipmisdefine i32 @loadCombine_4consecutive_rev(ptr %p) { 13073b49a9fcSbipmis; LE-LABEL: @loadCombine_4consecutive_rev( 130838f3e449Sbipmis; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1 130938f3e449Sbipmis; LE-NEXT: ret i32 [[L1]] 13103b49a9fcSbipmis; 13113b49a9fcSbipmis; BE-LABEL: @loadCombine_4consecutive_rev( 13123b49a9fcSbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 13133b49a9fcSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 13143b49a9fcSbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 13153b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 13163b49a9fcSbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 13173b49a9fcSbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 13183b49a9fcSbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 13193b49a9fcSbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 13203b49a9fcSbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 13213b49a9fcSbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 13223b49a9fcSbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 13233b49a9fcSbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 13243b49a9fcSbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 13253b49a9fcSbipmis; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 13263b49a9fcSbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[S4]], [[S3]] 13273b49a9fcSbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S2]] 13283b49a9fcSbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[E1]] 13293b49a9fcSbipmis; BE-NEXT: ret i32 [[O3]] 13301dd7e576Sbipmis; 13311dd7e576Sbipmis %p1 = getelementptr i8, ptr %p, i32 1 13321dd7e576Sbipmis %p2 = getelementptr i8, ptr %p, i32 2 13331dd7e576Sbipmis %p3 = getelementptr i8, ptr %p, i32 3 13341dd7e576Sbipmis %l1 = load i8, ptr %p 13351dd7e576Sbipmis %l2 = load i8, ptr %p1 13361dd7e576Sbipmis %l3 = load i8, ptr %p2 13371dd7e576Sbipmis %l4 = load i8, ptr %p3 13381dd7e576Sbipmis 13391dd7e576Sbipmis %e1 = zext i8 %l1 to i32 13401dd7e576Sbipmis %e2 = zext i8 %l2 to i32 13411dd7e576Sbipmis %e3 = zext i8 %l3 to i32 13421dd7e576Sbipmis %e4 = zext i8 %l4 to i32 13431dd7e576Sbipmis 13441dd7e576Sbipmis %s2 = shl i32 %e2, 8 13451dd7e576Sbipmis %s3 = shl i32 %e3, 16 13461dd7e576Sbipmis %s4 = shl i32 %e4, 24 13471dd7e576Sbipmis 13481dd7e576Sbipmis %o1 = or i32 %s4, %s3 13491dd7e576Sbipmis %o2 = or i32 %o1, %s2 13501dd7e576Sbipmis %o3 = or i32 %o2, %e1 13511dd7e576Sbipmis ret i32 %o3 13521dd7e576Sbipmis} 13531dd7e576Sbipmis 13541dd7e576Sbipmisdefine i64 @loadCombine_8consecutive_rev(ptr %p) { 13553b49a9fcSbipmis; LE-LABEL: @loadCombine_8consecutive_rev( 135638f3e449Sbipmis; LE-NEXT: [[L1:%.*]] = load i64, ptr [[P:%.*]], align 1 135738f3e449Sbipmis; LE-NEXT: ret i64 [[L1]] 13583b49a9fcSbipmis; 13593b49a9fcSbipmis; BE-LABEL: @loadCombine_8consecutive_rev( 13603b49a9fcSbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 13613b49a9fcSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 13623b49a9fcSbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 13633b49a9fcSbipmis; BE-NEXT: [[P4:%.*]] = getelementptr i8, ptr [[P]], i32 4 13643b49a9fcSbipmis; BE-NEXT: [[P5:%.*]] = getelementptr i8, ptr [[P]], i32 5 13653b49a9fcSbipmis; BE-NEXT: [[P6:%.*]] = getelementptr i8, ptr [[P]], i32 6 13663b49a9fcSbipmis; BE-NEXT: [[P7:%.*]] = getelementptr i8, ptr [[P]], i32 7 13673b49a9fcSbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 13683b49a9fcSbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 13693b49a9fcSbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 13703b49a9fcSbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 13713b49a9fcSbipmis; BE-NEXT: [[L5:%.*]] = load i8, ptr [[P4]], align 1 13723b49a9fcSbipmis; BE-NEXT: [[L6:%.*]] = load i8, ptr [[P5]], align 1 13733b49a9fcSbipmis; BE-NEXT: [[L7:%.*]] = load i8, ptr [[P6]], align 1 13743b49a9fcSbipmis; BE-NEXT: [[L8:%.*]] = load i8, ptr [[P7]], align 1 13753b49a9fcSbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i64 13763b49a9fcSbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i64 13773b49a9fcSbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i64 13783b49a9fcSbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i64 13793b49a9fcSbipmis; BE-NEXT: [[E5:%.*]] = zext i8 [[L5]] to i64 13803b49a9fcSbipmis; BE-NEXT: [[E6:%.*]] = zext i8 [[L6]] to i64 13813b49a9fcSbipmis; BE-NEXT: [[E7:%.*]] = zext i8 [[L7]] to i64 13823b49a9fcSbipmis; BE-NEXT: [[E8:%.*]] = zext i8 [[L8]] to i64 13833b49a9fcSbipmis; BE-NEXT: [[S2:%.*]] = shl i64 [[E2]], 8 13843b49a9fcSbipmis; BE-NEXT: [[S3:%.*]] = shl i64 [[E3]], 16 13853b49a9fcSbipmis; BE-NEXT: [[S4:%.*]] = shl i64 [[E4]], 24 13863b49a9fcSbipmis; BE-NEXT: [[S5:%.*]] = shl i64 [[E5]], 32 13873b49a9fcSbipmis; BE-NEXT: [[S6:%.*]] = shl i64 [[E6]], 40 13883b49a9fcSbipmis; BE-NEXT: [[S7:%.*]] = shl i64 [[E7]], 48 13893b49a9fcSbipmis; BE-NEXT: [[S8:%.*]] = shl i64 [[E8]], 56 13903b49a9fcSbipmis; BE-NEXT: [[O7:%.*]] = or i64 [[S8]], [[S7]] 13913b49a9fcSbipmis; BE-NEXT: [[O6:%.*]] = or i64 [[O7]], [[S6]] 13923b49a9fcSbipmis; BE-NEXT: [[O5:%.*]] = or i64 [[O6]], [[S5]] 13933b49a9fcSbipmis; BE-NEXT: [[O4:%.*]] = or i64 [[O5]], [[S4]] 13943b49a9fcSbipmis; BE-NEXT: [[O3:%.*]] = or i64 [[O4]], [[S3]] 13953b49a9fcSbipmis; BE-NEXT: [[O2:%.*]] = or i64 [[O3]], [[S2]] 13963b49a9fcSbipmis; BE-NEXT: [[O1:%.*]] = or i64 [[O2]], [[E1]] 13973b49a9fcSbipmis; BE-NEXT: ret i64 [[O1]] 13981dd7e576Sbipmis; 13991dd7e576Sbipmis %p1 = getelementptr i8, ptr %p, i32 1 14001dd7e576Sbipmis %p2 = getelementptr i8, ptr %p, i32 2 14011dd7e576Sbipmis %p3 = getelementptr i8, ptr %p, i32 3 14021dd7e576Sbipmis %p4 = getelementptr i8, ptr %p, i32 4 14031dd7e576Sbipmis %p5 = getelementptr i8, ptr %p, i32 5 14041dd7e576Sbipmis %p6 = getelementptr i8, ptr %p, i32 6 14051dd7e576Sbipmis %p7 = getelementptr i8, ptr %p, i32 7 14061dd7e576Sbipmis %l1 = load i8, ptr %p 14071dd7e576Sbipmis %l2 = load i8, ptr %p1 14081dd7e576Sbipmis %l3 = load i8, ptr %p2 14091dd7e576Sbipmis %l4 = load i8, ptr %p3 14101dd7e576Sbipmis %l5 = load i8, ptr %p4 14111dd7e576Sbipmis %l6 = load i8, ptr %p5 14121dd7e576Sbipmis %l7 = load i8, ptr %p6 14131dd7e576Sbipmis %l8 = load i8, ptr %p7 14141dd7e576Sbipmis 14151dd7e576Sbipmis %e1 = zext i8 %l1 to i64 14161dd7e576Sbipmis %e2 = zext i8 %l2 to i64 14171dd7e576Sbipmis %e3 = zext i8 %l3 to i64 14181dd7e576Sbipmis %e4 = zext i8 %l4 to i64 14191dd7e576Sbipmis %e5 = zext i8 %l5 to i64 14201dd7e576Sbipmis %e6 = zext i8 %l6 to i64 14211dd7e576Sbipmis %e7 = zext i8 %l7 to i64 14221dd7e576Sbipmis %e8 = zext i8 %l8 to i64 14231dd7e576Sbipmis 14241dd7e576Sbipmis %s2 = shl i64 %e2, 8 14251dd7e576Sbipmis %s3 = shl i64 %e3, 16 14261dd7e576Sbipmis %s4 = shl i64 %e4, 24 14271dd7e576Sbipmis %s5 = shl i64 %e5, 32 14281dd7e576Sbipmis %s6 = shl i64 %e6, 40 14291dd7e576Sbipmis %s7 = shl i64 %e7, 48 14301dd7e576Sbipmis %s8 = shl i64 %e8, 56 14311dd7e576Sbipmis 14321dd7e576Sbipmis %o7 = or i64 %s8, %s7 14331dd7e576Sbipmis %o6 = or i64 %o7, %s6 14341dd7e576Sbipmis %o5 = or i64 %o6, %s5 14351dd7e576Sbipmis %o4 = or i64 %o5, %s4 14361dd7e576Sbipmis %o3 = or i64 %o4, %s3 14371dd7e576Sbipmis %o2 = or i64 %o3, %s2 14381dd7e576Sbipmis %o1 = or i64 %o2, %e1 14391dd7e576Sbipmis ret i64 %o1 14401dd7e576Sbipmis} 14411dd7e576Sbipmis 14421dd7e576Sbipmisdefine i64 @loadCombine_8consecutive_rev_BE(ptr %p) { 14433b49a9fcSbipmis; LE-LABEL: @loadCombine_8consecutive_rev_BE( 14443b49a9fcSbipmis; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 14453b49a9fcSbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 14463b49a9fcSbipmis; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 14473b49a9fcSbipmis; LE-NEXT: [[P4:%.*]] = getelementptr i8, ptr [[P]], i32 4 14483b49a9fcSbipmis; LE-NEXT: [[P5:%.*]] = getelementptr i8, ptr [[P]], i32 5 14493b49a9fcSbipmis; LE-NEXT: [[P6:%.*]] = getelementptr i8, ptr [[P]], i32 6 14503b49a9fcSbipmis; LE-NEXT: [[P7:%.*]] = getelementptr i8, ptr [[P]], i32 7 14513b49a9fcSbipmis; LE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 14523b49a9fcSbipmis; LE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 14533b49a9fcSbipmis; LE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 14543b49a9fcSbipmis; LE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 14553b49a9fcSbipmis; LE-NEXT: [[L5:%.*]] = load i8, ptr [[P4]], align 1 14563b49a9fcSbipmis; LE-NEXT: [[L6:%.*]] = load i8, ptr [[P5]], align 1 14573b49a9fcSbipmis; LE-NEXT: [[L7:%.*]] = load i8, ptr [[P6]], align 1 14583b49a9fcSbipmis; LE-NEXT: [[L8:%.*]] = load i8, ptr [[P7]], align 1 14593b49a9fcSbipmis; LE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i64 14603b49a9fcSbipmis; LE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i64 14613b49a9fcSbipmis; LE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i64 14623b49a9fcSbipmis; LE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i64 14633b49a9fcSbipmis; LE-NEXT: [[E5:%.*]] = zext i8 [[L5]] to i64 14643b49a9fcSbipmis; LE-NEXT: [[E6:%.*]] = zext i8 [[L6]] to i64 14653b49a9fcSbipmis; LE-NEXT: [[E7:%.*]] = zext i8 [[L7]] to i64 14663b49a9fcSbipmis; LE-NEXT: [[E8:%.*]] = zext i8 [[L8]] to i64 14673b49a9fcSbipmis; LE-NEXT: [[S1:%.*]] = shl i64 [[E1]], 56 14683b49a9fcSbipmis; LE-NEXT: [[S2:%.*]] = shl i64 [[E2]], 48 14693b49a9fcSbipmis; LE-NEXT: [[S3:%.*]] = shl i64 [[E3]], 40 14703b49a9fcSbipmis; LE-NEXT: [[S4:%.*]] = shl i64 [[E4]], 32 14713b49a9fcSbipmis; LE-NEXT: [[S5:%.*]] = shl i64 [[E5]], 24 14723b49a9fcSbipmis; LE-NEXT: [[S6:%.*]] = shl i64 [[E6]], 16 14733b49a9fcSbipmis; LE-NEXT: [[S7:%.*]] = shl i64 [[E7]], 8 14743b49a9fcSbipmis; LE-NEXT: [[O7:%.*]] = or i64 [[E8]], [[S7]] 14753b49a9fcSbipmis; LE-NEXT: [[O6:%.*]] = or i64 [[O7]], [[S6]] 14763b49a9fcSbipmis; LE-NEXT: [[O5:%.*]] = or i64 [[O6]], [[S5]] 14773b49a9fcSbipmis; LE-NEXT: [[O4:%.*]] = or i64 [[O5]], [[S4]] 14783b49a9fcSbipmis; LE-NEXT: [[O3:%.*]] = or i64 [[O4]], [[S3]] 14793b49a9fcSbipmis; LE-NEXT: [[O2:%.*]] = or i64 [[O3]], [[S2]] 14803b49a9fcSbipmis; LE-NEXT: [[O1:%.*]] = or i64 [[O2]], [[S1]] 14813b49a9fcSbipmis; LE-NEXT: ret i64 [[O1]] 14823b49a9fcSbipmis; 14833b49a9fcSbipmis; BE-LABEL: @loadCombine_8consecutive_rev_BE( 148438f3e449Sbipmis; BE-NEXT: [[L1:%.*]] = load i64, ptr [[P:%.*]], align 1 148538f3e449Sbipmis; BE-NEXT: ret i64 [[L1]] 14861dd7e576Sbipmis; 14871dd7e576Sbipmis %p1 = getelementptr i8, ptr %p, i32 1 14881dd7e576Sbipmis %p2 = getelementptr i8, ptr %p, i32 2 14891dd7e576Sbipmis %p3 = getelementptr i8, ptr %p, i32 3 14901dd7e576Sbipmis %p4 = getelementptr i8, ptr %p, i32 4 14911dd7e576Sbipmis %p5 = getelementptr i8, ptr %p, i32 5 14921dd7e576Sbipmis %p6 = getelementptr i8, ptr %p, i32 6 14931dd7e576Sbipmis %p7 = getelementptr i8, ptr %p, i32 7 14941dd7e576Sbipmis %l1 = load i8, ptr %p 14951dd7e576Sbipmis %l2 = load i8, ptr %p1 14961dd7e576Sbipmis %l3 = load i8, ptr %p2 14971dd7e576Sbipmis %l4 = load i8, ptr %p3 14981dd7e576Sbipmis %l5 = load i8, ptr %p4 14991dd7e576Sbipmis %l6 = load i8, ptr %p5 15001dd7e576Sbipmis %l7 = load i8, ptr %p6 15011dd7e576Sbipmis %l8 = load i8, ptr %p7 15021dd7e576Sbipmis 15031dd7e576Sbipmis %e1 = zext i8 %l1 to i64 15041dd7e576Sbipmis %e2 = zext i8 %l2 to i64 15051dd7e576Sbipmis %e3 = zext i8 %l3 to i64 15061dd7e576Sbipmis %e4 = zext i8 %l4 to i64 15071dd7e576Sbipmis %e5 = zext i8 %l5 to i64 15081dd7e576Sbipmis %e6 = zext i8 %l6 to i64 15091dd7e576Sbipmis %e7 = zext i8 %l7 to i64 15101dd7e576Sbipmis %e8 = zext i8 %l8 to i64 15111dd7e576Sbipmis 15121dd7e576Sbipmis %s1 = shl i64 %e1, 56 15131dd7e576Sbipmis %s2 = shl i64 %e2, 48 15141dd7e576Sbipmis %s3 = shl i64 %e3, 40 15151dd7e576Sbipmis %s4 = shl i64 %e4, 32 15161dd7e576Sbipmis %s5 = shl i64 %e5, 24 15171dd7e576Sbipmis %s6 = shl i64 %e6, 16 15181dd7e576Sbipmis %s7 = shl i64 %e7, 8 15191dd7e576Sbipmis 15201dd7e576Sbipmis %o7 = or i64 %e8, %s7 15211dd7e576Sbipmis %o6 = or i64 %o7, %s6 15221dd7e576Sbipmis %o5 = or i64 %o6, %s5 15231dd7e576Sbipmis %o4 = or i64 %o5, %s4 15241dd7e576Sbipmis %o3 = or i64 %o4, %s3 15251dd7e576Sbipmis %o2 = or i64 %o3, %s2 15261dd7e576Sbipmis %o1 = or i64 %o2, %s1 15271dd7e576Sbipmis ret i64 %o1 15281dd7e576Sbipmis} 15291dd7e576Sbipmis 15301dd7e576Sbipmisdefine i64 @eggs(ptr noundef readonly %arg) { 15313b49a9fcSbipmis; LE-LABEL: @eggs( 153238f3e449Sbipmis; LE-NEXT: [[TMP3:%.*]] = load i64, ptr [[ARG:%.*]], align 1 153338f3e449Sbipmis; LE-NEXT: ret i64 [[TMP3]] 15343b49a9fcSbipmis; 15353b49a9fcSbipmis; BE-LABEL: @eggs( 15363b49a9fcSbipmis; BE-NEXT: [[TMP3:%.*]] = load i8, ptr [[ARG:%.*]], align 1 15373b49a9fcSbipmis; BE-NEXT: [[TMP4:%.*]] = getelementptr inbounds i8, ptr [[ARG]], i64 1 15383b49a9fcSbipmis; BE-NEXT: [[TMP5:%.*]] = load i8, ptr [[TMP4]], align 1 15393b49a9fcSbipmis; BE-NEXT: [[TMP6:%.*]] = getelementptr inbounds i8, ptr [[ARG]], i64 2 15403b49a9fcSbipmis; BE-NEXT: [[TMP7:%.*]] = load i8, ptr [[TMP6]], align 1 15413b49a9fcSbipmis; BE-NEXT: [[TMP8:%.*]] = getelementptr inbounds i8, ptr [[ARG]], i64 3 15423b49a9fcSbipmis; BE-NEXT: [[TMP9:%.*]] = load i8, ptr [[TMP8]], align 1 15433b49a9fcSbipmis; BE-NEXT: [[TMP10:%.*]] = getelementptr inbounds i8, ptr [[ARG]], i64 4 15443b49a9fcSbipmis; BE-NEXT: [[TMP11:%.*]] = load i8, ptr [[TMP10]], align 1 15453b49a9fcSbipmis; BE-NEXT: [[TMP12:%.*]] = getelementptr inbounds i8, ptr [[ARG]], i64 5 15463b49a9fcSbipmis; BE-NEXT: [[TMP13:%.*]] = load i8, ptr [[TMP12]], align 1 15473b49a9fcSbipmis; BE-NEXT: [[TMP14:%.*]] = getelementptr inbounds i8, ptr [[ARG]], i64 6 15483b49a9fcSbipmis; BE-NEXT: [[TMP15:%.*]] = load i8, ptr [[TMP14]], align 1 15493b49a9fcSbipmis; BE-NEXT: [[TMP16:%.*]] = getelementptr inbounds i8, ptr [[ARG]], i64 7 15503b49a9fcSbipmis; BE-NEXT: [[TMP17:%.*]] = load i8, ptr [[TMP16]], align 1 15513b49a9fcSbipmis; BE-NEXT: [[TMP18:%.*]] = zext i8 [[TMP17]] to i64 15523b49a9fcSbipmis; BE-NEXT: [[TMP19:%.*]] = shl nuw i64 [[TMP18]], 56 15533b49a9fcSbipmis; BE-NEXT: [[TMP20:%.*]] = zext i8 [[TMP15]] to i64 15543b49a9fcSbipmis; BE-NEXT: [[TMP21:%.*]] = shl nuw nsw i64 [[TMP20]], 48 15553b49a9fcSbipmis; BE-NEXT: [[TMP22:%.*]] = or i64 [[TMP19]], [[TMP21]] 15563b49a9fcSbipmis; BE-NEXT: [[TMP23:%.*]] = zext i8 [[TMP13]] to i64 15573b49a9fcSbipmis; BE-NEXT: [[TMP24:%.*]] = shl nuw nsw i64 [[TMP23]], 40 15583b49a9fcSbipmis; BE-NEXT: [[TMP25:%.*]] = or i64 [[TMP22]], [[TMP24]] 15593b49a9fcSbipmis; BE-NEXT: [[TMP26:%.*]] = zext i8 [[TMP11]] to i64 15603b49a9fcSbipmis; BE-NEXT: [[TMP27:%.*]] = shl nuw nsw i64 [[TMP26]], 32 15613b49a9fcSbipmis; BE-NEXT: [[TMP28:%.*]] = or i64 [[TMP25]], [[TMP27]] 15623b49a9fcSbipmis; BE-NEXT: [[TMP29:%.*]] = zext i8 [[TMP9]] to i64 15633b49a9fcSbipmis; BE-NEXT: [[TMP30:%.*]] = shl nuw nsw i64 [[TMP29]], 24 15643b49a9fcSbipmis; BE-NEXT: [[TMP31:%.*]] = or i64 [[TMP28]], [[TMP30]] 15653b49a9fcSbipmis; BE-NEXT: [[TMP32:%.*]] = zext i8 [[TMP7]] to i64 15663b49a9fcSbipmis; BE-NEXT: [[TMP33:%.*]] = shl nuw nsw i64 [[TMP32]], 16 15673b49a9fcSbipmis; BE-NEXT: [[TMP34:%.*]] = zext i8 [[TMP5]] to i64 15683b49a9fcSbipmis; BE-NEXT: [[TMP35:%.*]] = shl nuw nsw i64 [[TMP34]], 8 15693b49a9fcSbipmis; BE-NEXT: [[TMP36:%.*]] = or i64 [[TMP31]], [[TMP33]] 15703b49a9fcSbipmis; BE-NEXT: [[TMP37:%.*]] = zext i8 [[TMP3]] to i64 15713b49a9fcSbipmis; BE-NEXT: [[TMP38:%.*]] = or i64 [[TMP36]], [[TMP35]] 15723b49a9fcSbipmis; BE-NEXT: [[TMP39:%.*]] = or i64 [[TMP38]], [[TMP37]] 15733b49a9fcSbipmis; BE-NEXT: ret i64 [[TMP39]] 15741dd7e576Sbipmis; 15751dd7e576Sbipmis %tmp3 = load i8, ptr %arg, align 1 15761dd7e576Sbipmis %tmp4 = getelementptr inbounds i8, ptr %arg, i64 1 15771dd7e576Sbipmis %tmp5 = load i8, ptr %tmp4, align 1 15781dd7e576Sbipmis %tmp6 = getelementptr inbounds i8, ptr %arg, i64 2 15791dd7e576Sbipmis %tmp7 = load i8, ptr %tmp6, align 1 15801dd7e576Sbipmis %tmp8 = getelementptr inbounds i8, ptr %arg, i64 3 15811dd7e576Sbipmis %tmp9 = load i8, ptr %tmp8, align 1 15821dd7e576Sbipmis %tmp10 = getelementptr inbounds i8, ptr %arg, i64 4 15831dd7e576Sbipmis %tmp11 = load i8, ptr %tmp10, align 1 15841dd7e576Sbipmis %tmp12 = getelementptr inbounds i8, ptr %arg, i64 5 15851dd7e576Sbipmis %tmp13 = load i8, ptr %tmp12, align 1 15861dd7e576Sbipmis %tmp14 = getelementptr inbounds i8, ptr %arg, i64 6 15871dd7e576Sbipmis %tmp15 = load i8, ptr %tmp14, align 1 15881dd7e576Sbipmis %tmp16 = getelementptr inbounds i8, ptr %arg, i64 7 15891dd7e576Sbipmis %tmp17 = load i8, ptr %tmp16, align 1 15901dd7e576Sbipmis %tmp18 = zext i8 %tmp17 to i64 15911dd7e576Sbipmis %tmp19 = shl nuw i64 %tmp18, 56 15921dd7e576Sbipmis %tmp20 = zext i8 %tmp15 to i64 15931dd7e576Sbipmis %tmp21 = shl nuw nsw i64 %tmp20, 48 15941dd7e576Sbipmis %tmp22 = or i64 %tmp19, %tmp21 15951dd7e576Sbipmis %tmp23 = zext i8 %tmp13 to i64 15961dd7e576Sbipmis %tmp24 = shl nuw nsw i64 %tmp23, 40 15971dd7e576Sbipmis %tmp25 = or i64 %tmp22, %tmp24 15981dd7e576Sbipmis %tmp26 = zext i8 %tmp11 to i64 15991dd7e576Sbipmis %tmp27 = shl nuw nsw i64 %tmp26, 32 16001dd7e576Sbipmis %tmp28 = or i64 %tmp25, %tmp27 16011dd7e576Sbipmis %tmp29 = zext i8 %tmp9 to i64 16021dd7e576Sbipmis %tmp30 = shl nuw nsw i64 %tmp29, 24 16031dd7e576Sbipmis %tmp31 = or i64 %tmp28, %tmp30 16041dd7e576Sbipmis %tmp32 = zext i8 %tmp7 to i64 16051dd7e576Sbipmis %tmp33 = shl nuw nsw i64 %tmp32, 16 16061dd7e576Sbipmis %tmp34 = zext i8 %tmp5 to i64 16071dd7e576Sbipmis %tmp35 = shl nuw nsw i64 %tmp34, 8 16081dd7e576Sbipmis %tmp36 = or i64 %tmp31, %tmp33 16091dd7e576Sbipmis %tmp37 = zext i8 %tmp3 to i64 16101dd7e576Sbipmis %tmp38 = or i64 %tmp36, %tmp35 16111dd7e576Sbipmis %tmp39 = or i64 %tmp38, %tmp37 16121dd7e576Sbipmis ret i64 %tmp39 16131dd7e576Sbipmis} 16148344dfabSbipmis 16158344dfabSbipmisdefine i32 @loadCombine_4consecutive_mixsize1(ptr %p) { 16168344dfabSbipmis; ALL-LABEL: @loadCombine_4consecutive_mixsize1( 16178344dfabSbipmis; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2 16188344dfabSbipmis; ALL-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 3 16198344dfabSbipmis; ALL-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 2 16208344dfabSbipmis; ALL-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 16218344dfabSbipmis; ALL-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 16228344dfabSbipmis; ALL-NEXT: [[E1:%.*]] = zext i16 [[L1]] to i32 16238344dfabSbipmis; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 16248344dfabSbipmis; ALL-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 16258344dfabSbipmis; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 16 16268344dfabSbipmis; ALL-NEXT: [[S3:%.*]] = shl i32 [[E3]], 24 16278344dfabSbipmis; ALL-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 16288344dfabSbipmis; ALL-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 16298344dfabSbipmis; ALL-NEXT: ret i32 [[O2]] 16308344dfabSbipmis; 16318344dfabSbipmis %p1 = getelementptr i8, ptr %p, i32 2 16328344dfabSbipmis %p2 = getelementptr i8, ptr %p, i32 3 16338344dfabSbipmis %l1 = load i16, ptr %p 16348344dfabSbipmis %l2 = load i8, ptr %p1 16358344dfabSbipmis %l3 = load i8, ptr %p2 16368344dfabSbipmis 16378344dfabSbipmis %e1 = zext i16 %l1 to i32 16388344dfabSbipmis %e2 = zext i8 %l2 to i32 16398344dfabSbipmis %e3 = zext i8 %l3 to i32 16408344dfabSbipmis 16418344dfabSbipmis %s2 = shl i32 %e2, 16 16428344dfabSbipmis %s3 = shl i32 %e3, 24 16438344dfabSbipmis 16448344dfabSbipmis %o1 = or i32 %e1, %s2 16458344dfabSbipmis %o2 = or i32 %o1, %s3 16468344dfabSbipmis ret i32 %o2 16478344dfabSbipmis} 16488344dfabSbipmis 16498344dfabSbipmisdefine i32 @loadCombine_4consecutive_mixsize1_BE(ptr %p) { 16508344dfabSbipmis; ALL-LABEL: @loadCombine_4consecutive_mixsize1_BE( 16518344dfabSbipmis; ALL-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2 16528344dfabSbipmis; ALL-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 3 16538344dfabSbipmis; ALL-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 2 16548344dfabSbipmis; ALL-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 16558344dfabSbipmis; ALL-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 16568344dfabSbipmis; ALL-NEXT: [[E1:%.*]] = zext i16 [[L1]] to i32 16578344dfabSbipmis; ALL-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 16588344dfabSbipmis; ALL-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 16598344dfabSbipmis; ALL-NEXT: [[S1:%.*]] = shl i32 [[E1]], 16 16608344dfabSbipmis; ALL-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 16618344dfabSbipmis; ALL-NEXT: [[O1:%.*]] = or i32 [[S1]], [[S2]] 16628344dfabSbipmis; ALL-NEXT: [[O2:%.*]] = or i32 [[O1]], [[E3]] 16638344dfabSbipmis; ALL-NEXT: ret i32 [[O2]] 16648344dfabSbipmis; 16658344dfabSbipmis %p1 = getelementptr i8, ptr %p, i32 2 16668344dfabSbipmis %p2 = getelementptr i8, ptr %p, i32 3 16678344dfabSbipmis %l1 = load i16, ptr %p 16688344dfabSbipmis %l2 = load i8, ptr %p1 16698344dfabSbipmis %l3 = load i8, ptr %p2 16708344dfabSbipmis 16718344dfabSbipmis %e1 = zext i16 %l1 to i32 16728344dfabSbipmis %e2 = zext i8 %l2 to i32 16738344dfabSbipmis %e3 = zext i8 %l3 to i32 16748344dfabSbipmis 16758344dfabSbipmis %s1 = shl i32 %e1, 16 16768344dfabSbipmis %s2 = shl i32 %e2, 8 16778344dfabSbipmis 16788344dfabSbipmis %o1 = or i32 %s1, %s2 16798344dfabSbipmis %o2 = or i32 %o1, %e3 16808344dfabSbipmis ret i32 %o2 16818344dfabSbipmis} 16828344dfabSbipmis 16838344dfabSbipmisdefine i32 @loadCombine_4consecutive_rev_mixsize1(ptr %p) { 16848344dfabSbipmis; LE-LABEL: @loadCombine_4consecutive_rev_mixsize1( 16858344dfabSbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2 16868344dfabSbipmis; LE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 2 16878344dfabSbipmis; LE-NEXT: [[L2:%.*]] = load i16, ptr [[P2]], align 1 16888344dfabSbipmis; LE-NEXT: [[TMP1:%.*]] = zext i16 [[L2]] to i32 16898344dfabSbipmis; LE-NEXT: [[TMP2:%.*]] = shl i32 [[TMP1]], 16 16908344dfabSbipmis; LE-NEXT: [[E1:%.*]] = zext i16 [[L1]] to i32 16918344dfabSbipmis; LE-NEXT: [[O2:%.*]] = or i32 [[TMP2]], [[E1]] 16928344dfabSbipmis; LE-NEXT: ret i32 [[O2]] 16938344dfabSbipmis; 16948344dfabSbipmis; BE-LABEL: @loadCombine_4consecutive_rev_mixsize1( 16958344dfabSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2 16968344dfabSbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 16978344dfabSbipmis; BE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 2 16988344dfabSbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P2]], align 1 16998344dfabSbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P3]], align 1 17008344dfabSbipmis; BE-NEXT: [[E1:%.*]] = zext i16 [[L1]] to i32 17018344dfabSbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 17028344dfabSbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 17038344dfabSbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 16 17048344dfabSbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 24 17058344dfabSbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[S3]], [[S2]] 17068344dfabSbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[E1]] 17078344dfabSbipmis; BE-NEXT: ret i32 [[O2]] 17088344dfabSbipmis; 17098344dfabSbipmis %p2 = getelementptr i8, ptr %p, i32 2 17108344dfabSbipmis %p3 = getelementptr i8, ptr %p, i32 3 17118344dfabSbipmis %l1 = load i16, ptr %p 17128344dfabSbipmis %l2 = load i8, ptr %p2 17138344dfabSbipmis %l3 = load i8, ptr %p3 17148344dfabSbipmis 17158344dfabSbipmis %e1 = zext i16 %l1 to i32 17168344dfabSbipmis %e2 = zext i8 %l2 to i32 17178344dfabSbipmis %e3 = zext i8 %l3 to i32 17188344dfabSbipmis 17198344dfabSbipmis %s2 = shl i32 %e2, 16 17208344dfabSbipmis %s3 = shl i32 %e3, 24 17218344dfabSbipmis 17228344dfabSbipmis %o1 = or i32 %s3, %s2 17238344dfabSbipmis %o2 = or i32 %o1, %e1 17248344dfabSbipmis ret i32 %o2 17258344dfabSbipmis} 17268344dfabSbipmis 17278344dfabSbipmisdefine i32 @loadCombine_4consecutive_rev_mixsize1_BE(ptr %p) { 17288344dfabSbipmis; LE-LABEL: @loadCombine_4consecutive_rev_mixsize1_BE( 17298344dfabSbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2 17308344dfabSbipmis; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 17318344dfabSbipmis; LE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 2 17328344dfabSbipmis; LE-NEXT: [[L2:%.*]] = load i8, ptr [[P2]], align 1 17338344dfabSbipmis; LE-NEXT: [[L3:%.*]] = load i8, ptr [[P3]], align 1 17348344dfabSbipmis; LE-NEXT: [[E1:%.*]] = zext i16 [[L1]] to i32 17358344dfabSbipmis; LE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 17368344dfabSbipmis; LE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 17378344dfabSbipmis; LE-NEXT: [[S1:%.*]] = shl i32 [[E1]], 16 17388344dfabSbipmis; LE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 17398344dfabSbipmis; LE-NEXT: [[O1:%.*]] = or i32 [[E3]], [[S2]] 17408344dfabSbipmis; LE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S1]] 17418344dfabSbipmis; LE-NEXT: ret i32 [[O2]] 17428344dfabSbipmis; 17438344dfabSbipmis; BE-LABEL: @loadCombine_4consecutive_rev_mixsize1_BE( 17448344dfabSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2 17458344dfabSbipmis; BE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 2 17468344dfabSbipmis; BE-NEXT: [[L2:%.*]] = load i16, ptr [[P2]], align 1 17478344dfabSbipmis; BE-NEXT: [[TMP1:%.*]] = zext i16 [[L2]] to i32 17488344dfabSbipmis; BE-NEXT: [[E1:%.*]] = zext i16 [[L1]] to i32 17498344dfabSbipmis; BE-NEXT: [[S1:%.*]] = shl i32 [[E1]], 16 17508344dfabSbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[TMP1]], [[S1]] 17518344dfabSbipmis; BE-NEXT: ret i32 [[O2]] 17528344dfabSbipmis; 17538344dfabSbipmis %p2 = getelementptr i8, ptr %p, i32 2 17548344dfabSbipmis %p3 = getelementptr i8, ptr %p, i32 3 17558344dfabSbipmis %l1 = load i16, ptr %p 17568344dfabSbipmis %l2 = load i8, ptr %p2 17578344dfabSbipmis %l3 = load i8, ptr %p3 17588344dfabSbipmis 17598344dfabSbipmis %e1 = zext i16 %l1 to i32 17608344dfabSbipmis %e2 = zext i8 %l2 to i32 17618344dfabSbipmis %e3 = zext i8 %l3 to i32 17628344dfabSbipmis 17638344dfabSbipmis %s1 = shl i32 %e1, 16 17648344dfabSbipmis %s2 = shl i32 %e2, 8 17658344dfabSbipmis 17668344dfabSbipmis %o1 = or i32 %e3, %s2 17678344dfabSbipmis %o2 = or i32 %o1, %s1 17688344dfabSbipmis ret i32 %o2 17698344dfabSbipmis} 17708344dfabSbipmis 17718344dfabSbipmisdefine i32 @loadCombine_4consecutive_mixsize2(ptr %p) { 17728344dfabSbipmis; LE-LABEL: @loadCombine_4consecutive_mixsize2( 17738344dfabSbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2 17748344dfabSbipmis; LE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 1 17758344dfabSbipmis; LE-NEXT: [[TMP1:%.*]] = zext i16 [[L1]] to i32 17768344dfabSbipmis; LE-NEXT: [[L3:%.*]] = load i16, ptr [[P2]], align 2 17778344dfabSbipmis; LE-NEXT: [[E3:%.*]] = zext i16 [[L3]] to i32 17788344dfabSbipmis; LE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 17798344dfabSbipmis; LE-NEXT: [[O2:%.*]] = or i32 [[TMP1]], [[S3]] 17808344dfabSbipmis; LE-NEXT: ret i32 [[O2]] 17818344dfabSbipmis; 17828344dfabSbipmis; BE-LABEL: @loadCombine_4consecutive_mixsize2( 17838344dfabSbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 17848344dfabSbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 17858344dfabSbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 17868344dfabSbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 17878344dfabSbipmis; BE-NEXT: [[L3:%.*]] = load i16, ptr [[P2]], align 2 17888344dfabSbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 17898344dfabSbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 17908344dfabSbipmis; BE-NEXT: [[E3:%.*]] = zext i16 [[L3]] to i32 17918344dfabSbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 17928344dfabSbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 17938344dfabSbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 17948344dfabSbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 17958344dfabSbipmis; BE-NEXT: ret i32 [[O2]] 17968344dfabSbipmis; 17978344dfabSbipmis %p1 = getelementptr i8, ptr %p, i32 1 17988344dfabSbipmis %p2 = getelementptr i8, ptr %p, i32 2 17998344dfabSbipmis %l1 = load i8, ptr %p 18008344dfabSbipmis %l2 = load i8, ptr %p1 18018344dfabSbipmis %l3 = load i16, ptr %p2 18028344dfabSbipmis 18038344dfabSbipmis %e1 = zext i8 %l1 to i32 18048344dfabSbipmis %e2 = zext i8 %l2 to i32 18058344dfabSbipmis %e3 = zext i16 %l3 to i32 18068344dfabSbipmis 18078344dfabSbipmis %s2 = shl i32 %e2, 8 18088344dfabSbipmis %s3 = shl i32 %e3, 16 18098344dfabSbipmis 18108344dfabSbipmis %o1 = or i32 %e1, %s2 18118344dfabSbipmis %o2 = or i32 %o1, %s3 18128344dfabSbipmis ret i32 %o2 18138344dfabSbipmis} 18148344dfabSbipmis 18158344dfabSbipmisdefine i32 @loadCombine_4consecutive_lower_index_comes_before(ptr %p) { 181638f3e449Sbipmis; LE-LABEL: @loadCombine_4consecutive_lower_index_comes_before( 181738f3e449Sbipmis; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1 181838f3e449Sbipmis; LE-NEXT: ret i32 [[L1]] 181938f3e449Sbipmis; 182038f3e449Sbipmis; BE-LABEL: @loadCombine_4consecutive_lower_index_comes_before( 182138f3e449Sbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 182238f3e449Sbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 182338f3e449Sbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 182438f3e449Sbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 182538f3e449Sbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 182638f3e449Sbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 182738f3e449Sbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 182838f3e449Sbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 182938f3e449Sbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 183038f3e449Sbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 183138f3e449Sbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 183238f3e449Sbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 183338f3e449Sbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 183438f3e449Sbipmis; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 183538f3e449Sbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 183638f3e449Sbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 183738f3e449Sbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 183838f3e449Sbipmis; BE-NEXT: ret i32 [[O3]] 18398344dfabSbipmis; 18408344dfabSbipmis %p1 = getelementptr i8, ptr %p, i32 1 18418344dfabSbipmis %p2 = getelementptr i8, ptr %p, i32 2 18428344dfabSbipmis %p3 = getelementptr i8, ptr %p, i32 3 18438344dfabSbipmis %l4 = load i8, ptr %p3 18448344dfabSbipmis %l3 = load i8, ptr %p2 18458344dfabSbipmis %l2 = load i8, ptr %p1 18468344dfabSbipmis %l1 = load i8, ptr %p 18478344dfabSbipmis 18488344dfabSbipmis %e1 = zext i8 %l1 to i32 18498344dfabSbipmis %e2 = zext i8 %l2 to i32 18508344dfabSbipmis %e3 = zext i8 %l3 to i32 18518344dfabSbipmis %e4 = zext i8 %l4 to i32 18528344dfabSbipmis 18538344dfabSbipmis %s2 = shl i32 %e2, 8 18548344dfabSbipmis %s3 = shl i32 %e3, 16 18558344dfabSbipmis %s4 = shl i32 %e4, 24 18568344dfabSbipmis 18578344dfabSbipmis %o1 = or i32 %e1, %s2 18588344dfabSbipmis %o2 = or i32 %o1, %s3 18598344dfabSbipmis %o3 = or i32 %o2, %s4 18608344dfabSbipmis ret i32 %o3 18618344dfabSbipmis} 18628344dfabSbipmis 1863cc7b03b0Sbipmisdefine i16 @loadCombine_2consecutive_badinsert(ptr %p) { 1864e9393789Sbipmis; LE-LABEL: @loadCombine_2consecutive_badinsert( 1865e9393789Sbipmis; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 1866e9393789Sbipmis; LE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 1 1867e9393789Sbipmis; LE-NEXT: store i8 0, ptr [[P1]], align 1 1868e9393789Sbipmis; LE-NEXT: ret i16 [[L1]] 1869e9393789Sbipmis; 1870e9393789Sbipmis; BE-LABEL: @loadCombine_2consecutive_badinsert( 1871e9393789Sbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 1872e9393789Sbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 1873e9393789Sbipmis; BE-NEXT: store i8 0, ptr [[P1]], align 1 1874e9393789Sbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 1875e9393789Sbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i16 1876e9393789Sbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i16 1877e9393789Sbipmis; BE-NEXT: [[S2:%.*]] = shl i16 [[E2]], 8 1878e9393789Sbipmis; BE-NEXT: [[O1:%.*]] = or i16 [[E1]], [[S2]] 1879e9393789Sbipmis; BE-NEXT: ret i16 [[O1]] 1880cc7b03b0Sbipmis; 1881cc7b03b0Sbipmis %p1 = getelementptr i8, ptr %p, i32 1 1882cc7b03b0Sbipmis %l2 = load i8, ptr %p1 1883cc7b03b0Sbipmis store i8 0, ptr %p1, align 1 1884cc7b03b0Sbipmis %l1 = load i8, ptr %p 1885cc7b03b0Sbipmis %e1 = zext i8 %l1 to i16 1886cc7b03b0Sbipmis %e2 = zext i8 %l2 to i16 1887cc7b03b0Sbipmis %s2 = shl i16 %e2, 8 1888cc7b03b0Sbipmis %o1 = or i16 %e1, %s2 1889cc7b03b0Sbipmis ret i16 %o1 1890cc7b03b0Sbipmis} 1891cc7b03b0Sbipmis 1892cc7b03b0Sbipmisdefine i32 @loadCombine_4consecutive_badinsert(ptr %p) { 1893e9393789Sbipmis; LE-LABEL: @loadCombine_4consecutive_badinsert( 1894e9393789Sbipmis; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 1895e9393789Sbipmis; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P]], align 1 1896e9393789Sbipmis; LE-NEXT: store i8 0, ptr [[P1]], align 1 1897e9393789Sbipmis; LE-NEXT: ret i32 [[L1]] 1898e9393789Sbipmis; 1899e9393789Sbipmis; BE-LABEL: @loadCombine_4consecutive_badinsert( 1900e9393789Sbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 1901e9393789Sbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 1902e9393789Sbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 1903e9393789Sbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 1904e9393789Sbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 1905e9393789Sbipmis; BE-NEXT: store i8 0, ptr [[P1]], align 1 1906e9393789Sbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 1907e9393789Sbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 1908e9393789Sbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 1909e9393789Sbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 1910e9393789Sbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 1911e9393789Sbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 1912e9393789Sbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 1913e9393789Sbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 1914e9393789Sbipmis; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 1915e9393789Sbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 1916e9393789Sbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 1917e9393789Sbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 1918e9393789Sbipmis; BE-NEXT: ret i32 [[O3]] 1919cc7b03b0Sbipmis; 1920cc7b03b0Sbipmis %p1 = getelementptr i8, ptr %p, i32 1 1921cc7b03b0Sbipmis %p2 = getelementptr i8, ptr %p, i32 2 1922cc7b03b0Sbipmis %p3 = getelementptr i8, ptr %p, i32 3 1923cc7b03b0Sbipmis %l2 = load i8, ptr %p1 1924cc7b03b0Sbipmis %l3 = load i8, ptr %p2 1925cc7b03b0Sbipmis store i8 0, ptr %p1, align 1 1926cc7b03b0Sbipmis %l4 = load i8, ptr %p3 1927cc7b03b0Sbipmis %l1 = load i8, ptr %p 1928cc7b03b0Sbipmis 1929cc7b03b0Sbipmis %e1 = zext i8 %l1 to i32 1930cc7b03b0Sbipmis %e2 = zext i8 %l2 to i32 1931cc7b03b0Sbipmis %e3 = zext i8 %l3 to i32 1932cc7b03b0Sbipmis %e4 = zext i8 %l4 to i32 1933cc7b03b0Sbipmis 1934cc7b03b0Sbipmis %s2 = shl i32 %e2, 8 1935cc7b03b0Sbipmis %s3 = shl i32 %e3, 16 1936cc7b03b0Sbipmis %s4 = shl i32 %e4, 24 1937cc7b03b0Sbipmis 1938cc7b03b0Sbipmis %o1 = or i32 %e1, %s2 1939cc7b03b0Sbipmis %o2 = or i32 %o1, %s3 1940cc7b03b0Sbipmis %o3 = or i32 %o2, %s4 1941cc7b03b0Sbipmis ret i32 %o3 1942cc7b03b0Sbipmis} 19433ee18822Sbipmis 19443ee18822Sbipmisdefine i32 @loadCombine_4consecutive_badinsert2(ptr %p) { 1945e9393789Sbipmis; LE-LABEL: @loadCombine_4consecutive_badinsert2( 1946e9393789Sbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2 1947e9393789Sbipmis; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 1948e9393789Sbipmis; LE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 1 1949e9393789Sbipmis; LE-NEXT: [[TMP1:%.*]] = zext i16 [[L1]] to i32 1950e9393789Sbipmis; LE-NEXT: store i8 0, ptr [[P3]], align 1 1951e9393789Sbipmis; LE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 1952e9393789Sbipmis; LE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 1953e9393789Sbipmis; LE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 1954e9393789Sbipmis; LE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 1955e9393789Sbipmis; LE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 1956e9393789Sbipmis; LE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 1957e9393789Sbipmis; LE-NEXT: [[O2:%.*]] = or i32 [[TMP1]], [[S3]] 1958e9393789Sbipmis; LE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 1959e9393789Sbipmis; LE-NEXT: ret i32 [[O3]] 1960e9393789Sbipmis; 1961e9393789Sbipmis; BE-LABEL: @loadCombine_4consecutive_badinsert2( 1962e9393789Sbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 1963e9393789Sbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 1964e9393789Sbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 1965e9393789Sbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 1966e9393789Sbipmis; BE-NEXT: store i8 0, ptr [[P3]], align 1 1967e9393789Sbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 1968e9393789Sbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 1969e9393789Sbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 1970e9393789Sbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 1971e9393789Sbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 1972e9393789Sbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 1973e9393789Sbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 1974e9393789Sbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 1975e9393789Sbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 1976e9393789Sbipmis; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 1977e9393789Sbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 1978e9393789Sbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 1979e9393789Sbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 1980e9393789Sbipmis; BE-NEXT: ret i32 [[O3]] 19813ee18822Sbipmis; 19823ee18822Sbipmis %p1 = getelementptr i8, ptr %p, i32 1 19833ee18822Sbipmis %p2 = getelementptr i8, ptr %p, i32 2 19843ee18822Sbipmis %p3 = getelementptr i8, ptr %p, i32 3 19853ee18822Sbipmis %l2 = load i8, ptr %p1 19863ee18822Sbipmis store i8 0, ptr %p3, align 1 19873ee18822Sbipmis %l3 = load i8, ptr %p2 19883ee18822Sbipmis %l4 = load i8, ptr %p3 19893ee18822Sbipmis %l1 = load i8, ptr %p 19903ee18822Sbipmis 19913ee18822Sbipmis %e1 = zext i8 %l1 to i32 19923ee18822Sbipmis %e2 = zext i8 %l2 to i32 19933ee18822Sbipmis %e3 = zext i8 %l3 to i32 19943ee18822Sbipmis %e4 = zext i8 %l4 to i32 19953ee18822Sbipmis 19963ee18822Sbipmis %s2 = shl i32 %e2, 8 19973ee18822Sbipmis %s3 = shl i32 %e3, 16 19983ee18822Sbipmis %s4 = shl i32 %e4, 24 19993ee18822Sbipmis 20003ee18822Sbipmis %o1 = or i32 %e1, %s2 20013ee18822Sbipmis %o2 = or i32 %o1, %s3 20023ee18822Sbipmis %o3 = or i32 %o2, %s4 20033ee18822Sbipmis ret i32 %o3 20043ee18822Sbipmis} 2005ee53abb0Sbipmis 2006ee53abb0Sbipmisdefine i32 @loadCombine_4consecutive_badinsert3(ptr %p) { 2007ee53abb0Sbipmis; LE-LABEL: @loadCombine_4consecutive_badinsert3( 2008*f68b0e36SAntonio Frighetto; LE-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 1 2009cbc50ba1Sbipmis; LE-NEXT: [[L1:%.*]] = load i32, ptr [[TMP1]], align 1 2010ee53abb0Sbipmis; LE-NEXT: ret i32 [[L1]] 2011ee53abb0Sbipmis; 2012ee53abb0Sbipmis; BE-LABEL: @loadCombine_4consecutive_badinsert3( 2013ee53abb0Sbipmis; BE-NEXT: [[P4:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 4 2014ee53abb0Sbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P4]], align 1 2015ee53abb0Sbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 2016ee53abb0Sbipmis; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 2017ee53abb0Sbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 2018ee53abb0Sbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P3]], align 1 2019ee53abb0Sbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 2020ee53abb0Sbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 2021ee53abb0Sbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 2022ee53abb0Sbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P2]], align 1 2023ee53abb0Sbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 2024ee53abb0Sbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 2025ee53abb0Sbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P]], i32 1 2026ee53abb0Sbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P1]], align 1 2027ee53abb0Sbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 2028ee53abb0Sbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 2029ee53abb0Sbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 2030ee53abb0Sbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 2031ee53abb0Sbipmis; BE-NEXT: ret i32 [[O3]] 2032ee53abb0Sbipmis; 2033ee53abb0Sbipmis %p4 = getelementptr i8, ptr %p, i32 4 2034ee53abb0Sbipmis %l4 = load i8, ptr %p4 2035ee53abb0Sbipmis %e4 = zext i8 %l4 to i32 2036ee53abb0Sbipmis %s4 = shl i32 %e4, 24 2037ee53abb0Sbipmis 2038ee53abb0Sbipmis %p3 = getelementptr i8, ptr %p, i32 3 2039ee53abb0Sbipmis %l3 = load i8, ptr %p3 2040ee53abb0Sbipmis %e3 = zext i8 %l3 to i32 2041ee53abb0Sbipmis %s3 = shl i32 %e3, 16 2042ee53abb0Sbipmis 2043ee53abb0Sbipmis %p2 = getelementptr i8, ptr %p, i32 2 2044ee53abb0Sbipmis %l2 = load i8, ptr %p2 2045ee53abb0Sbipmis %e2 = zext i8 %l2 to i32 2046ee53abb0Sbipmis %s2 = shl i32 %e2, 8 2047ee53abb0Sbipmis 2048ee53abb0Sbipmis %p1 = getelementptr i8, ptr %p, i32 1 2049ee53abb0Sbipmis %l1 = load i8, ptr %p1 2050ee53abb0Sbipmis %e1 = zext i8 %l1 to i32 2051ee53abb0Sbipmis 2052ee53abb0Sbipmis %o1 = or i32 %e1, %s2 2053ee53abb0Sbipmis %o2 = or i32 %o1, %s3 2054ee53abb0Sbipmis %o3 = or i32 %o2, %s4 2055ee53abb0Sbipmis ret i32 %o3 2056ee53abb0Sbipmis} 2057ee53abb0Sbipmis 2058ee53abb0Sbipmisdefine i32 @loadCombine_4consecutive_badinsert4(ptr %p) { 2059ee53abb0Sbipmis; LE-LABEL: @loadCombine_4consecutive_badinsert4( 2060ee53abb0Sbipmis; LE-NEXT: entry: 2061ee53abb0Sbipmis; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 1 2062ee53abb0Sbipmis; LE-NEXT: [[C1:%.*]] = load i8, ptr [[P1]], align 1 2063ee53abb0Sbipmis; LE-NEXT: [[CMP:%.*]] = icmp eq i8 [[C1]], 0 2064ee53abb0Sbipmis; LE-NEXT: br i1 [[CMP]], label [[END:%.*]], label [[BB2:%.*]] 2065ee53abb0Sbipmis; LE: bb2: 2066ee53abb0Sbipmis; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P1]], align 1 2067ee53abb0Sbipmis; LE-NEXT: br label [[END]] 2068ee53abb0Sbipmis; LE: end: 2069ee53abb0Sbipmis; LE-NEXT: [[COND:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[L1]], [[BB2]] ] 2070ee53abb0Sbipmis; LE-NEXT: ret i32 [[COND]] 2071ee53abb0Sbipmis; 2072ee53abb0Sbipmis; BE-LABEL: @loadCombine_4consecutive_badinsert4( 2073ee53abb0Sbipmis; BE-NEXT: entry: 2074ee53abb0Sbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 1 2075ee53abb0Sbipmis; BE-NEXT: [[C1:%.*]] = load i8, ptr [[P1]], align 1 2076ee53abb0Sbipmis; BE-NEXT: [[CMP:%.*]] = icmp eq i8 [[C1]], 0 2077ee53abb0Sbipmis; BE-NEXT: br i1 [[CMP]], label [[END:%.*]], label [[BB2:%.*]] 2078ee53abb0Sbipmis; BE: bb2: 2079ee53abb0Sbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P1]], align 1 2080ee53abb0Sbipmis; BE-NEXT: [[C2:%.*]] = zext i8 [[L1]] to i32 2081ee53abb0Sbipmis; BE-NEXT: [[P4:%.*]] = getelementptr i8, ptr [[P]], i64 4 2082ee53abb0Sbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P4]], align 1 2083ee53abb0Sbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 2084ee53abb0Sbipmis; BE-NEXT: [[S4:%.*]] = shl nuw i32 [[E4]], 24 2085ee53abb0Sbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i64 3 2086ee53abb0Sbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P3]], align 1 2087ee53abb0Sbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 2088ee53abb0Sbipmis; BE-NEXT: [[S3:%.*]] = shl nuw nsw i32 [[E3]], 16 2089ee53abb0Sbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i64 2 2090ee53abb0Sbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P2]], align 1 2091ee53abb0Sbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 2092ee53abb0Sbipmis; BE-NEXT: [[S2:%.*]] = shl nuw nsw i32 [[E2]], 8 2093ee53abb0Sbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[S2]], [[C2]] 2094ee53abb0Sbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 2095ee53abb0Sbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 2096ee53abb0Sbipmis; BE-NEXT: br label [[END]] 2097ee53abb0Sbipmis; BE: end: 2098ee53abb0Sbipmis; BE-NEXT: [[COND:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[O3]], [[BB2]] ] 2099ee53abb0Sbipmis; BE-NEXT: ret i32 [[COND]] 2100ee53abb0Sbipmis; 2101ee53abb0Sbipmisentry: 2102ee53abb0Sbipmis %p1 = getelementptr i8, ptr %p, i64 1 2103ee53abb0Sbipmis %c1 = load i8, ptr %p1, align 1 2104ee53abb0Sbipmis %cmp = icmp eq i8 %c1, 0 2105ee53abb0Sbipmis br i1 %cmp, label %end, label %bb2 2106ee53abb0Sbipmis 2107ee53abb0Sbipmisbb2: 2108ee53abb0Sbipmis %l1 = load i8, ptr %p1, align 1 2109ee53abb0Sbipmis %c2 = zext i8 %l1 to i32 2110ee53abb0Sbipmis %p4 = getelementptr i8, ptr %p, i64 4 2111ee53abb0Sbipmis %l4 = load i8, ptr %p4, align 1 2112ee53abb0Sbipmis %e4 = zext i8 %l4 to i32 2113ee53abb0Sbipmis %s4 = shl nuw i32 %e4, 24 2114ee53abb0Sbipmis %p3 = getelementptr i8, ptr %p, i64 3 2115ee53abb0Sbipmis %l3 = load i8, ptr %p3, align 1 2116ee53abb0Sbipmis %e3 = zext i8 %l3 to i32 2117ee53abb0Sbipmis %s3 = shl nuw nsw i32 %e3, 16 2118ee53abb0Sbipmis %p2 = getelementptr i8, ptr %p, i64 2 2119ee53abb0Sbipmis %l2 = load i8, ptr %p2, align 1 2120ee53abb0Sbipmis %e2 = zext i8 %l2 to i32 2121ee53abb0Sbipmis %s2 = shl nuw nsw i32 %e2, 8 2122ee53abb0Sbipmis %o1 = or i32 %s2, %c2 2123ee53abb0Sbipmis %o2 = or i32 %o1, %s3 2124ee53abb0Sbipmis %o3 = or i32 %o2, %s4 2125ee53abb0Sbipmis br label %end 2126ee53abb0Sbipmis 2127ee53abb0Sbipmisend: 2128ee53abb0Sbipmis %cond = phi i32 [ 0, %entry ], [ %o3, %bb2 ] 2129ee53abb0Sbipmis ret i32 %cond 2130ee53abb0Sbipmis} 2131ee53abb0Sbipmis 2132ee53abb0Sbipmisdefine i32 @loadCombine_4consecutive_badinsert5(ptr %p) { 2133ee53abb0Sbipmis; LE-LABEL: @loadCombine_4consecutive_badinsert5( 2134ee53abb0Sbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 2 2135ee53abb0Sbipmis; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 2136ee53abb0Sbipmis; LE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 2137ee53abb0Sbipmis; LE-NEXT: store i8 0, ptr [[P2]], align 1 2138ee53abb0Sbipmis; LE-NEXT: [[L1:%.*]] = load i16, ptr [[P]], align 1 2139ee53abb0Sbipmis; LE-NEXT: [[TMP1:%.*]] = zext i16 [[L1]] to i32 2140ee53abb0Sbipmis; LE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 2141ee53abb0Sbipmis; LE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 2142ee53abb0Sbipmis; LE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 2143ee53abb0Sbipmis; LE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 2144ee53abb0Sbipmis; LE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 2145ee53abb0Sbipmis; LE-NEXT: [[O2:%.*]] = or i32 [[TMP1]], [[S3]] 2146ee53abb0Sbipmis; LE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 2147ee53abb0Sbipmis; LE-NEXT: ret i32 [[O3]] 2148ee53abb0Sbipmis; 2149ee53abb0Sbipmis; BE-LABEL: @loadCombine_4consecutive_badinsert5( 2150ee53abb0Sbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 2151ee53abb0Sbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 2152ee53abb0Sbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 2153ee53abb0Sbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 2154ee53abb0Sbipmis; BE-NEXT: store i8 0, ptr [[P2]], align 1 2155ee53abb0Sbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 2156ee53abb0Sbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 2157ee53abb0Sbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 2158ee53abb0Sbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 2159ee53abb0Sbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 2160ee53abb0Sbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 2161ee53abb0Sbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 2162ee53abb0Sbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 2163ee53abb0Sbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 2164ee53abb0Sbipmis; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 2165ee53abb0Sbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[E1]], [[S2]] 2166ee53abb0Sbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S3]] 2167ee53abb0Sbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[S4]] 2168ee53abb0Sbipmis; BE-NEXT: ret i32 [[O3]] 2169ee53abb0Sbipmis; 2170ee53abb0Sbipmis %p1 = getelementptr i8, ptr %p, i32 1 2171ee53abb0Sbipmis %p2 = getelementptr i8, ptr %p, i32 2 2172ee53abb0Sbipmis %p3 = getelementptr i8, ptr %p, i32 3 2173ee53abb0Sbipmis %l4 = load i8, ptr %p3 2174ee53abb0Sbipmis store i8 0, ptr %p2, align 1 2175ee53abb0Sbipmis %l1 = load i8, ptr %p 2176ee53abb0Sbipmis %l2 = load i8, ptr %p1 2177ee53abb0Sbipmis %l3 = load i8, ptr %p2 2178ee53abb0Sbipmis 2179ee53abb0Sbipmis %e1 = zext i8 %l1 to i32 2180ee53abb0Sbipmis %e2 = zext i8 %l2 to i32 2181ee53abb0Sbipmis %e3 = zext i8 %l3 to i32 2182ee53abb0Sbipmis %e4 = zext i8 %l4 to i32 2183ee53abb0Sbipmis 2184ee53abb0Sbipmis %s2 = shl i32 %e2, 8 2185ee53abb0Sbipmis %s3 = shl i32 %e3, 16 2186ee53abb0Sbipmis %s4 = shl i32 %e4, 24 2187ee53abb0Sbipmis 2188ee53abb0Sbipmis %o1 = or i32 %e1, %s2 2189ee53abb0Sbipmis %o2 = or i32 %o1, %s3 2190ee53abb0Sbipmis %o3 = or i32 %o2, %s4 2191ee53abb0Sbipmis ret i32 %o3 2192ee53abb0Sbipmis} 2193ee53abb0Sbipmis 2194ee53abb0Sbipmisdefine i32 @loadCombine_4consecutive_badinsert6(ptr %p) { 2195ee53abb0Sbipmis; LE-LABEL: @loadCombine_4consecutive_badinsert6( 2196ee53abb0Sbipmis; LE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 2197ee53abb0Sbipmis; LE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 2198ee53abb0Sbipmis; LE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 2199ee53abb0Sbipmis; LE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 2200ee53abb0Sbipmis; LE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 2201ee53abb0Sbipmis; LE-NEXT: store i8 0, ptr [[P3]], align 1 2202ee53abb0Sbipmis; LE-NEXT: [[L3:%.*]] = load i16, ptr [[P2]], align 1 2203ee53abb0Sbipmis; LE-NEXT: [[TMP1:%.*]] = zext i16 [[L3]] to i32 2204ee53abb0Sbipmis; LE-NEXT: [[TMP2:%.*]] = shl i32 [[TMP1]], 16 2205ee53abb0Sbipmis; LE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 2206ee53abb0Sbipmis; LE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 2207ee53abb0Sbipmis; LE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 2208ee53abb0Sbipmis; LE-NEXT: [[O2:%.*]] = or i32 [[TMP2]], [[S2]] 2209ee53abb0Sbipmis; LE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[E1]] 2210ee53abb0Sbipmis; LE-NEXT: ret i32 [[O3]] 2211ee53abb0Sbipmis; 2212ee53abb0Sbipmis; BE-LABEL: @loadCombine_4consecutive_badinsert6( 2213ee53abb0Sbipmis; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1 2214ee53abb0Sbipmis; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2 2215ee53abb0Sbipmis; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3 2216ee53abb0Sbipmis; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1 2217ee53abb0Sbipmis; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1 2218ee53abb0Sbipmis; BE-NEXT: store i8 0, ptr [[P3]], align 1 2219ee53abb0Sbipmis; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1 2220ee53abb0Sbipmis; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1 2221ee53abb0Sbipmis; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32 2222ee53abb0Sbipmis; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32 2223ee53abb0Sbipmis; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32 2224ee53abb0Sbipmis; BE-NEXT: [[E4:%.*]] = zext i8 [[L4]] to i32 2225ee53abb0Sbipmis; BE-NEXT: [[S2:%.*]] = shl i32 [[E2]], 8 2226ee53abb0Sbipmis; BE-NEXT: [[S3:%.*]] = shl i32 [[E3]], 16 2227ee53abb0Sbipmis; BE-NEXT: [[S4:%.*]] = shl i32 [[E4]], 24 2228ee53abb0Sbipmis; BE-NEXT: [[O1:%.*]] = or i32 [[S3]], [[S4]] 2229ee53abb0Sbipmis; BE-NEXT: [[O2:%.*]] = or i32 [[O1]], [[S2]] 2230ee53abb0Sbipmis; BE-NEXT: [[O3:%.*]] = or i32 [[O2]], [[E1]] 2231ee53abb0Sbipmis; BE-NEXT: ret i32 [[O3]] 2232ee53abb0Sbipmis; 2233ee53abb0Sbipmis %p1 = getelementptr i8, ptr %p, i32 1 2234ee53abb0Sbipmis %p2 = getelementptr i8, ptr %p, i32 2 2235ee53abb0Sbipmis %p3 = getelementptr i8, ptr %p, i32 3 2236ee53abb0Sbipmis %l1 = load i8, ptr %p 2237ee53abb0Sbipmis %l2 = load i8, ptr %p1 2238ee53abb0Sbipmis store i8 0, ptr %p3, align 1 2239ee53abb0Sbipmis %l3 = load i8, ptr %p2 2240ee53abb0Sbipmis %l4 = load i8, ptr %p3 2241ee53abb0Sbipmis 2242ee53abb0Sbipmis %e1 = zext i8 %l1 to i32 2243ee53abb0Sbipmis %e2 = zext i8 %l2 to i32 2244ee53abb0Sbipmis %e3 = zext i8 %l3 to i32 2245ee53abb0Sbipmis %e4 = zext i8 %l4 to i32 2246ee53abb0Sbipmis 2247ee53abb0Sbipmis %s2 = shl i32 %e2, 8 2248ee53abb0Sbipmis %s3 = shl i32 %e3, 16 2249ee53abb0Sbipmis %s4 = shl i32 %e4, 24 2250ee53abb0Sbipmis 2251ee53abb0Sbipmis %o1 = or i32 %s3, %s4 2252ee53abb0Sbipmis %o2 = or i32 %o1, %s2 2253ee53abb0Sbipmis %o3 = or i32 %o2, %e1 2254ee53abb0Sbipmis ret i32 %o3 2255ee53abb0Sbipmis} 2256ed443d81SArthur Eubanks 2257ed443d81SArthur Eubanksdefine i64 @loadCombine_nonConstShift1(ptr %arg, i8 %b) { 2258ed443d81SArthur Eubanks; ALL-LABEL: @loadCombine_nonConstShift1( 2259ed443d81SArthur Eubanks; ALL-NEXT: [[G1:%.*]] = getelementptr i8, ptr [[ARG:%.*]], i64 1 2260ed443d81SArthur Eubanks; ALL-NEXT: [[LD0:%.*]] = load i8, ptr [[ARG]], align 1 2261ed443d81SArthur Eubanks; ALL-NEXT: [[LD1:%.*]] = load i8, ptr [[G1]], align 1 2262ed443d81SArthur Eubanks; ALL-NEXT: [[Z0:%.*]] = zext i8 [[LD0]] to i64 2263ed443d81SArthur Eubanks; ALL-NEXT: [[Z1:%.*]] = zext i8 [[LD1]] to i64 2264ed443d81SArthur Eubanks; ALL-NEXT: [[Z6:%.*]] = zext i8 [[B:%.*]] to i64 2265ed443d81SArthur Eubanks; ALL-NEXT: [[S0:%.*]] = shl i64 [[Z0]], [[Z6]] 2266ed443d81SArthur Eubanks; ALL-NEXT: [[S1:%.*]] = shl i64 [[Z1]], 8 2267ed443d81SArthur Eubanks; ALL-NEXT: [[O7:%.*]] = or i64 [[S0]], [[S1]] 2268ed443d81SArthur Eubanks; ALL-NEXT: ret i64 [[O7]] 2269ed443d81SArthur Eubanks; 2270ed443d81SArthur Eubanks %g1 = getelementptr i8, ptr %arg, i64 1 2271ed443d81SArthur Eubanks %ld0 = load i8, ptr %arg, align 1 2272ed443d81SArthur Eubanks %ld1 = load i8, ptr %g1, align 1 2273ed443d81SArthur Eubanks %z0 = zext i8 %ld0 to i64 2274ed443d81SArthur Eubanks %z1 = zext i8 %ld1 to i64 2275ed443d81SArthur Eubanks %z6 = zext i8 %b to i64 2276ed443d81SArthur Eubanks %s0 = shl i64 %z0, %z6 2277ed443d81SArthur Eubanks %s1 = shl i64 %z1, 8 2278ed443d81SArthur Eubanks %o7 = or i64 %s0, %s1 2279ed443d81SArthur Eubanks ret i64 %o7 2280ed443d81SArthur Eubanks} 2281ed443d81SArthur Eubanks 2282ed443d81SArthur Eubanksdefine i64 @loadCombine_nonConstShift2(ptr %arg, i8 %b) { 2283ed443d81SArthur Eubanks; ALL-LABEL: @loadCombine_nonConstShift2( 2284ed443d81SArthur Eubanks; ALL-NEXT: [[G1:%.*]] = getelementptr i8, ptr [[ARG:%.*]], i64 1 2285ed443d81SArthur Eubanks; ALL-NEXT: [[LD0:%.*]] = load i8, ptr [[ARG]], align 1 2286ed443d81SArthur Eubanks; ALL-NEXT: [[LD1:%.*]] = load i8, ptr [[G1]], align 1 2287ed443d81SArthur Eubanks; ALL-NEXT: [[Z0:%.*]] = zext i8 [[LD0]] to i64 2288ed443d81SArthur Eubanks; ALL-NEXT: [[Z1:%.*]] = zext i8 [[LD1]] to i64 2289ed443d81SArthur Eubanks; ALL-NEXT: [[Z6:%.*]] = zext i8 [[B:%.*]] to i64 2290ed443d81SArthur Eubanks; ALL-NEXT: [[S0:%.*]] = shl i64 [[Z0]], [[Z6]] 2291ed443d81SArthur Eubanks; ALL-NEXT: [[S1:%.*]] = shl i64 [[Z1]], 8 2292ed443d81SArthur Eubanks; ALL-NEXT: [[O7:%.*]] = or i64 [[S1]], [[S0]] 2293ed443d81SArthur Eubanks; ALL-NEXT: ret i64 [[O7]] 2294ed443d81SArthur Eubanks; 2295ed443d81SArthur Eubanks %g1 = getelementptr i8, ptr %arg, i64 1 2296ed443d81SArthur Eubanks %ld0 = load i8, ptr %arg, align 1 2297ed443d81SArthur Eubanks %ld1 = load i8, ptr %g1, align 1 2298ed443d81SArthur Eubanks %z0 = zext i8 %ld0 to i64 2299ed443d81SArthur Eubanks %z1 = zext i8 %ld1 to i64 2300ed443d81SArthur Eubanks %z6 = zext i8 %b to i64 2301ed443d81SArthur Eubanks %s0 = shl i64 %z0, %z6 2302ed443d81SArthur Eubanks %s1 = shl i64 %z1, 8 2303ed443d81SArthur Eubanks %o7 = or i64 %s1, %s0 2304ed443d81SArthur Eubanks ret i64 %o7 2305ed443d81SArthur Eubanks} 2306cbc50ba1Sbipmis 2307cbc50ba1Sbipmisdefine void @nested_gep(ptr %p, ptr %dest) { 2308cbc50ba1Sbipmis; LE-LABEL: @nested_gep( 2309*f68b0e36SAntonio Frighetto; LE-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 68 2310cbc50ba1Sbipmis; LE-NEXT: [[LD2:%.*]] = load i64, ptr [[TMP1]], align 4 2311cbc50ba1Sbipmis; LE-NEXT: [[TRUNC:%.*]] = trunc i64 [[LD2]] to i32 2312cbc50ba1Sbipmis; LE-NEXT: store i32 [[TRUNC]], ptr [[DEST:%.*]], align 4 2313cbc50ba1Sbipmis; LE-NEXT: ret void 2314cbc50ba1Sbipmis; 2315cbc50ba1Sbipmis; BE-LABEL: @nested_gep( 2316cbc50ba1Sbipmis; BE-NEXT: [[GEP1:%.*]] = getelementptr inbounds i8, ptr [[P:%.*]], i64 72 2317cbc50ba1Sbipmis; BE-NEXT: [[LD1:%.*]] = load i32, ptr [[GEP1]], align 4 2318cbc50ba1Sbipmis; BE-NEXT: [[LD1_ZEXT:%.*]] = zext i32 [[LD1]] to i64 2319cbc50ba1Sbipmis; BE-NEXT: [[LD1_SHL:%.*]] = shl nuw i64 [[LD1_ZEXT]], 32 2320cbc50ba1Sbipmis; BE-NEXT: [[GEP2:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 64 2321cbc50ba1Sbipmis; BE-NEXT: [[FINAL_PTR:%.*]] = getelementptr inbounds i8, ptr [[GEP2]], i64 4 2322cbc50ba1Sbipmis; BE-NEXT: [[LD2:%.*]] = load i32, ptr [[FINAL_PTR]], align 4 2323cbc50ba1Sbipmis; BE-NEXT: [[LD2_ZEXT:%.*]] = zext i32 [[LD2]] to i64 2324cbc50ba1Sbipmis; BE-NEXT: [[OR:%.*]] = or i64 [[LD1_SHL]], [[LD2_ZEXT]] 2325cbc50ba1Sbipmis; BE-NEXT: [[ADD:%.*]] = add i64 [[OR]], 0 2326cbc50ba1Sbipmis; BE-NEXT: [[TRUNC:%.*]] = trunc i64 [[ADD]] to i32 2327cbc50ba1Sbipmis; BE-NEXT: store i32 [[TRUNC]], ptr [[DEST:%.*]], align 4 2328cbc50ba1Sbipmis; BE-NEXT: ret void 2329cbc50ba1Sbipmis; 2330cbc50ba1Sbipmis %gep1 = getelementptr inbounds i8, ptr %p, i64 72 2331cbc50ba1Sbipmis %ld1 = load i32, ptr %gep1, align 4 2332cbc50ba1Sbipmis %ld1_zext = zext i32 %ld1 to i64 2333cbc50ba1Sbipmis %ld1_shl = shl nuw i64 %ld1_zext, 32 2334cbc50ba1Sbipmis %gep2 = getelementptr inbounds i8, ptr %p, i64 64 2335cbc50ba1Sbipmis ; Don't move final_ptr before gep2 2336cbc50ba1Sbipmis %final_ptr = getelementptr inbounds i8, ptr %gep2, i64 4 2337cbc50ba1Sbipmis %ld2 = load i32, ptr %final_ptr, align 4 2338cbc50ba1Sbipmis %ld2_zext = zext i32 %ld2 to i64 2339cbc50ba1Sbipmis %or = or i64 %ld1_shl, %ld2_zext 2340cbc50ba1Sbipmis %add = add i64 %or, 0 2341cbc50ba1Sbipmis %trunc = trunc i64 %add to i32 2342cbc50ba1Sbipmis store i32 %trunc, ptr %dest, align 4 2343cbc50ba1Sbipmis ret void 2344cbc50ba1Sbipmis} 2345cbc50ba1Sbipmis 2346cbc50ba1Sbipmis 2347cbc50ba1Sbipmisdefine void @bitcast_gep(ptr %p, ptr %dest) { 2348cbc50ba1Sbipmis; LE-LABEL: @bitcast_gep( 2349*f68b0e36SAntonio Frighetto; LE-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 68 2350cbc50ba1Sbipmis; LE-NEXT: [[LD2:%.*]] = load i64, ptr [[TMP1]], align 4 2351cbc50ba1Sbipmis; LE-NEXT: [[TRUNC:%.*]] = trunc i64 [[LD2]] to i32 2352cbc50ba1Sbipmis; LE-NEXT: store i32 [[TRUNC]], ptr [[DEST:%.*]], align 4 2353cbc50ba1Sbipmis; LE-NEXT: ret void 2354cbc50ba1Sbipmis; 2355cbc50ba1Sbipmis; BE-LABEL: @bitcast_gep( 2356cbc50ba1Sbipmis; BE-NEXT: [[GEP1:%.*]] = getelementptr inbounds i8, ptr [[P:%.*]], i64 72 2357cbc50ba1Sbipmis; BE-NEXT: [[LD1:%.*]] = load i32, ptr [[GEP1]], align 4 2358cbc50ba1Sbipmis; BE-NEXT: [[LD1_ZEXT:%.*]] = zext i32 [[LD1]] to i64 2359cbc50ba1Sbipmis; BE-NEXT: [[LD1_SHL:%.*]] = shl nuw i64 [[LD1_ZEXT]], 32 2360cbc50ba1Sbipmis; BE-NEXT: [[GEP2:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 68 2361cbc50ba1Sbipmis; BE-NEXT: [[FINAL_PTR:%.*]] = bitcast ptr [[GEP2]] to ptr 2362cbc50ba1Sbipmis; BE-NEXT: [[LD2:%.*]] = load i32, ptr [[FINAL_PTR]], align 4 2363cbc50ba1Sbipmis; BE-NEXT: [[LD2_ZEXT:%.*]] = zext i32 [[LD2]] to i64 2364cbc50ba1Sbipmis; BE-NEXT: [[OR:%.*]] = or i64 [[LD1_SHL]], [[LD2_ZEXT]] 2365cbc50ba1Sbipmis; BE-NEXT: [[ADD:%.*]] = add i64 [[OR]], 0 2366cbc50ba1Sbipmis; BE-NEXT: [[TRUNC:%.*]] = trunc i64 [[ADD]] to i32 2367cbc50ba1Sbipmis; BE-NEXT: store i32 [[TRUNC]], ptr [[DEST:%.*]], align 4 2368cbc50ba1Sbipmis; BE-NEXT: ret void 2369cbc50ba1Sbipmis; 2370cbc50ba1Sbipmis %gep1 = getelementptr inbounds i8, ptr %p, i64 72 2371cbc50ba1Sbipmis %ld1 = load i32, ptr %gep1, align 4 2372cbc50ba1Sbipmis %ld1_zext = zext i32 %ld1 to i64 2373cbc50ba1Sbipmis %ld1_shl = shl nuw i64 %ld1_zext, 32 2374cbc50ba1Sbipmis %gep2 = getelementptr inbounds i8, ptr %p, i64 68 2375cbc50ba1Sbipmis ; Don't move final_ptr before gep2 2376cbc50ba1Sbipmis %final_ptr = bitcast ptr %gep2 to ptr 2377cbc50ba1Sbipmis %ld2 = load i32, ptr %final_ptr, align 4 2378cbc50ba1Sbipmis %ld2_zext = zext i32 %ld2 to i64 2379cbc50ba1Sbipmis %or = or i64 %ld1_shl, %ld2_zext 2380cbc50ba1Sbipmis %add = add i64 %or, 0 2381cbc50ba1Sbipmis %trunc = trunc i64 %add to i32 2382cbc50ba1Sbipmis store i32 %trunc, ptr %dest, align 4 2383cbc50ba1Sbipmis ret void 2384cbc50ba1Sbipmis} 2385*f68b0e36SAntonio Frighetto 2386*f68b0e36SAntonio Frighettodefine i32 @loadcombine_consecutive_idx_64(ptr %data) { 2387*f68b0e36SAntonio Frighetto; LE-LABEL: @loadcombine_consecutive_idx_64( 2388*f68b0e36SAntonio Frighetto; LE-NEXT: entry: 2389*f68b0e36SAntonio Frighetto; LE-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[DATA:%.*]], i64 2149675576 2390*f68b0e36SAntonio Frighetto; LE-NEXT: [[VAL_2:%.*]] = load i16, ptr [[TMP0]], align 1 2391*f68b0e36SAntonio Frighetto; LE-NEXT: [[TMP1:%.*]] = zext i16 [[VAL_2]] to i32 2392*f68b0e36SAntonio Frighetto; LE-NEXT: ret i32 [[TMP1]] 2393*f68b0e36SAntonio Frighetto; 2394*f68b0e36SAntonio Frighetto; BE-LABEL: @loadcombine_consecutive_idx_64( 2395*f68b0e36SAntonio Frighetto; BE-NEXT: entry: 2396*f68b0e36SAntonio Frighetto; BE-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i8, ptr [[DATA:%.*]], i64 2149675577 2397*f68b0e36SAntonio Frighetto; BE-NEXT: [[VAL:%.*]] = load i8, ptr [[ARRAYIDX]], align 1 2398*f68b0e36SAntonio Frighetto; BE-NEXT: [[CONV:%.*]] = zext i8 [[VAL]] to i32 2399*f68b0e36SAntonio Frighetto; BE-NEXT: [[ARRAYIDX_2:%.*]] = getelementptr inbounds nuw i8, ptr [[DATA]], i64 2149675576 2400*f68b0e36SAntonio Frighetto; BE-NEXT: [[VAL_2:%.*]] = load i8, ptr [[ARRAYIDX_2]], align 1 2401*f68b0e36SAntonio Frighetto; BE-NEXT: [[CONV_2:%.*]] = zext i8 [[VAL_2]] to i32 2402*f68b0e36SAntonio Frighetto; BE-NEXT: [[SHL:%.*]] = shl nuw nsw i32 [[CONV]], 8 2403*f68b0e36SAntonio Frighetto; BE-NEXT: [[OR:%.*]] = or disjoint i32 [[SHL]], [[CONV_2]] 2404*f68b0e36SAntonio Frighetto; BE-NEXT: ret i32 [[OR]] 2405*f68b0e36SAntonio Frighetto; 2406*f68b0e36SAntonio Frighettoentry: 2407*f68b0e36SAntonio Frighetto %arrayidx = getelementptr inbounds nuw i8, ptr %data, i64 2149675577 2408*f68b0e36SAntonio Frighetto %val = load i8, ptr %arrayidx, align 1 2409*f68b0e36SAntonio Frighetto %conv = zext i8 %val to i32 2410*f68b0e36SAntonio Frighetto %arrayidx.2 = getelementptr inbounds nuw i8, ptr %data, i64 2149675576 2411*f68b0e36SAntonio Frighetto %val.2 = load i8, ptr %arrayidx.2, align 1 2412*f68b0e36SAntonio Frighetto %conv.2 = zext i8 %val.2 to i32 2413*f68b0e36SAntonio Frighetto %shl = shl nuw nsw i32 %conv, 8 2414*f68b0e36SAntonio Frighetto %or = or disjoint i32 %shl, %conv.2 2415*f68b0e36SAntonio Frighetto ret i32 %or 2416*f68b0e36SAntonio Frighetto} 2417