1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -passes=instsimplify -S < %s | FileCheck %s 3 4@A = linkonce_odr hidden constant { i64, i64 } { i64 2, i64 3 } 5@B = linkonce_odr hidden global { i64, i64 } { i64 2, i64 3 } 6 7declare ptr @llvm.strip.invariant.group.p0(ptr %p) 8declare ptr @llvm.launder.invariant.group.p0(ptr %p) 9 10define i64 @f() { 11; CHECK-LABEL: @f( 12; CHECK-NEXT: ret i64 3 13; 14 %a = call ptr @llvm.strip.invariant.group.p0(ptr @A) 15 %b = getelementptr i8, ptr %a, i32 8 16 %d = load i64, ptr %b 17 ret i64 %d 18} 19 20define i64 @g() { 21; CHECK-LABEL: @g( 22; CHECK-NEXT: ret i64 3 23; 24 %a = call ptr @llvm.launder.invariant.group.p0(ptr @A) 25 %b = getelementptr i8, ptr %a, i32 8 26 %d = load i64, ptr %b 27 ret i64 %d 28} 29 30define i64 @notconstantglobal() { 31; CHECK-LABEL: @notconstantglobal( 32; CHECK-NEXT: [[A:%.*]] = call ptr @llvm.launder.invariant.group.p0(ptr @B) 33; CHECK-NEXT: [[B:%.*]] = getelementptr i8, ptr [[A]], i32 8 34; CHECK-NEXT: [[D:%.*]] = load i64, ptr [[B]], align 4 35; CHECK-NEXT: ret i64 [[D]] 36; 37 %a = call ptr @llvm.launder.invariant.group.p0(ptr @B) 38 %b = getelementptr i8, ptr %a, i32 8 39 %d = load i64, ptr %b 40 ret i64 %d 41} 42 43define i64 @notconstantgepindex(i32 %i) { 44; CHECK-LABEL: @notconstantgepindex( 45; CHECK-NEXT: [[A:%.*]] = call ptr @llvm.launder.invariant.group.p0(ptr @A) 46; CHECK-NEXT: [[B:%.*]] = getelementptr i8, ptr [[A]], i32 [[I:%.*]] 47; CHECK-NEXT: [[D:%.*]] = load i64, ptr [[B]], align 4 48; CHECK-NEXT: ret i64 [[D]] 49; 50 %a = call ptr @llvm.launder.invariant.group.p0(ptr @A) 51 %b = getelementptr i8, ptr %a, i32 %i 52 %d = load i64, ptr %b 53 ret i64 %d 54} 55 56define i64 @volatile() { 57; CHECK-LABEL: @volatile( 58; CHECK-NEXT: [[A:%.*]] = call ptr @llvm.launder.invariant.group.p0(ptr @A) 59; CHECK-NEXT: [[B:%.*]] = getelementptr i8, ptr [[A]], i32 8 60; CHECK-NEXT: [[D:%.*]] = load volatile i64, ptr [[B]], align 4 61; CHECK-NEXT: ret i64 [[D]] 62; 63 %a = call ptr @llvm.launder.invariant.group.p0(ptr @A) 64 %b = getelementptr i8, ptr %a, i32 8 65 %d = load volatile i64, ptr %b 66 ret i64 %d 67} 68