127 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=instcombine -S < %s | FileCheck %s3target datalayout = "E-p:64:64:64-p1:64:64:64-p2:32:32:32-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"4 5@x = external global <2 x i64>, align 166@xx = external global [13 x <2 x i64>], align 167 8@x.as2 = external addrspace(2) global <2 x i64>, align 169 10define <2 x i64> @static_hem() {11; CHECK-LABEL: @static_hem(12; CHECK-NEXT: [[L:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @x, i64 112), align 113; CHECK-NEXT: ret <2 x i64> [[L]]14;15 %t = getelementptr <2 x i64>, ptr @x, i32 716 %l = load <2 x i64>, ptr %t, align 117 ret <2 x i64> %l18}19 20define <2 x i64> @hem(i32 %i) {21; CHECK-LABEL: @hem(22; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[I:%.*]] to i6423; CHECK-NEXT: [[T:%.*]] = getelementptr <2 x i64>, ptr @x, i64 [[TMP1]]24; CHECK-NEXT: [[L:%.*]] = load <2 x i64>, ptr [[T]], align 125; CHECK-NEXT: ret <2 x i64> [[L]]26;27 %t = getelementptr <2 x i64>, ptr @x, i32 %i28 %l = load <2 x i64>, ptr %t, align 129 ret <2 x i64> %l30}31 32define <2 x i64> @hem_2d(i32 %i, i32 %j) {33; CHECK-LABEL: @hem_2d(34; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[I:%.*]] to i6435; CHECK-NEXT: [[TMP2:%.*]] = sext i32 [[J:%.*]] to i6436; CHECK-NEXT: [[T_SPLIT:%.*]] = getelementptr [13 x <2 x i64>], ptr @xx, i64 [[TMP1]]37; CHECK-NEXT: [[T:%.*]] = getelementptr <2 x i64>, ptr [[T_SPLIT]], i64 [[TMP2]]38; CHECK-NEXT: [[L:%.*]] = load <2 x i64>, ptr [[T]], align 139; CHECK-NEXT: ret <2 x i64> [[L]]40;41 %t = getelementptr [13 x <2 x i64>], ptr @xx, i32 %i, i32 %j42 %l = load <2 x i64>, ptr %t, align 143 ret <2 x i64> %l44}45 46define <2 x i64> @foo() {47; CHECK-LABEL: @foo(48; CHECK-NEXT: [[L:%.*]] = load <2 x i64>, ptr @x, align 149; CHECK-NEXT: ret <2 x i64> [[L]]50;51 %l = load <2 x i64>, ptr @x, align 152 ret <2 x i64> %l53}54 55define <2 x i64> @bar() {56; CHECK-LABEL: @bar(57; CHECK-NEXT: [[T:%.*]] = alloca <2 x i64>, align 1658; CHECK-NEXT: call void @kip(ptr nonnull [[T]])59; CHECK-NEXT: [[L:%.*]] = load <2 x i64>, ptr [[T]], align 160; CHECK-NEXT: ret <2 x i64> [[L]]61;62 %t = alloca <2 x i64>63 call void @kip(ptr %t)64 %l = load <2 x i64>, ptr %t, align 165 ret <2 x i64> %l66}67 68define void @static_hem_store(<2 x i64> %y) {69; CHECK-LABEL: @static_hem_store(70; CHECK-NEXT: store <2 x i64> [[Y:%.*]], ptr getelementptr (i8, ptr @x, i64 112), align 171; CHECK-NEXT: ret void72;73 %t = getelementptr <2 x i64>, ptr @x, i32 774 store <2 x i64> %y, ptr %t, align 175 ret void76}77 78define void @hem_store(i32 %i, <2 x i64> %y) {79; CHECK-LABEL: @hem_store(80; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[I:%.*]] to i6481; CHECK-NEXT: [[T:%.*]] = getelementptr <2 x i64>, ptr @x, i64 [[TMP1]]82; CHECK-NEXT: store <2 x i64> [[Y:%.*]], ptr [[T]], align 183; CHECK-NEXT: ret void84;85 %t = getelementptr <2 x i64>, ptr @x, i32 %i86 store <2 x i64> %y, ptr %t, align 187 ret void88}89 90define void @hem_2d_store(i32 %i, i32 %j, <2 x i64> %y) {91; CHECK-LABEL: @hem_2d_store(92; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[I:%.*]] to i6493; CHECK-NEXT: [[TMP2:%.*]] = sext i32 [[J:%.*]] to i6494; CHECK-NEXT: [[T_SPLIT:%.*]] = getelementptr [13 x <2 x i64>], ptr @xx, i64 [[TMP1]]95; CHECK-NEXT: [[T:%.*]] = getelementptr <2 x i64>, ptr [[T_SPLIT]], i64 [[TMP2]]96; CHECK-NEXT: store <2 x i64> [[Y:%.*]], ptr [[T]], align 197; CHECK-NEXT: ret void98;99 %t = getelementptr [13 x <2 x i64>], ptr @xx, i32 %i, i32 %j100 store <2 x i64> %y, ptr %t, align 1101 ret void102}103 104define void @foo_store(<2 x i64> %y) {105; CHECK-LABEL: @foo_store(106; CHECK-NEXT: store <2 x i64> [[Y:%.*]], ptr @x, align 1107; CHECK-NEXT: ret void108;109 store <2 x i64> %y, ptr @x, align 1110 ret void111}112 113define void @bar_store(<2 x i64> %y) {114; CHECK-LABEL: @bar_store(115; CHECK-NEXT: [[T:%.*]] = alloca <2 x i64>, align 16116; CHECK-NEXT: call void @kip(ptr nonnull [[T]])117; CHECK-NEXT: store <2 x i64> [[Y:%.*]], ptr [[T]], align 1118; CHECK-NEXT: ret void119;120 %t = alloca <2 x i64>121 call void @kip(ptr %t)122 store <2 x i64> %y, ptr %t, align 1123 ret void124}125 126declare void @kip(ptr %t)127