brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · e6a7525 Raw
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