1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -S -passes=globalopt < %s | FileCheck %s 3 4; Make sure we don't try to convert to select if the load/stores don't match 5; the global type. 6 7@g1 = internal global i64 zeroinitializer 8@g2 = internal global i64 zeroinitializer 9@g3 = internal global i64 zeroinitializer 10 11define void @store1() { 12; CHECK-LABEL: @store1( 13; CHECK-NEXT: store i32 2, ptr @g1, align 4 14; CHECK-NEXT: ret void 15; 16 store i32 2, ptr @g1 17 ret void 18} 19 20define i32 @load1() { 21; CHECK-LABEL: @load1( 22; CHECK-NEXT: [[V:%.*]] = load i32, ptr @g1, align 4 23; CHECK-NEXT: ret i32 [[V]] 24; 25 %v = load i32, ptr @g1 26 ret i32 %v 27} 28 29define void @store2() { 30; CHECK-LABEL: @store2( 31; CHECK-NEXT: store i64 2, ptr @g2, align 4 32; CHECK-NEXT: ret void 33; 34 store i64 2, ptr @g2 35 ret void 36} 37 38define i32 @load2() { 39; CHECK-LABEL: @load2( 40; CHECK-NEXT: [[V:%.*]] = load i32, ptr @g2, align 4 41; CHECK-NEXT: ret i32 [[V]] 42; 43 %v = load i32, ptr @g2 44 ret i32 %v 45} 46 47define void @store3() { 48; CHECK-LABEL: @store3( 49; CHECK-NEXT: store i1 true, ptr @g3, align 1 50; CHECK-NEXT: ret void 51; 52 store i64 2, ptr @g3 53 ret void 54} 55 56define i64 @load3() { 57; CHECK-LABEL: @load3( 58; CHECK-NEXT: [[V_B:%.*]] = load i1, ptr @g3, align 1 59; CHECK-NEXT: [[V:%.*]] = select i1 [[V_B]], i64 2, i64 0 60; CHECK-NEXT: ret i64 [[V]] 61; 62 %v = load i64, ptr @g3 63 ret i64 %v 64} 65