102 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 22// RUN: %clang_cc1 -triple x86_64-linux-gnu -O2 -emit-llvm -o - %s | FileCheck %s3 4struct Tail {5 ~Tail();6 int a : 16;7 int b : 8;8};9 10struct Char {11 int a : 16;12 int b : 8;13 char c;14};15 16struct Int {17 int a : 16;18 int b : 8;19 int c;20};21 22 23// CHECK-LABEL: define dso_local void @_Z1AP4Tail24// CHECK-SAME: (ptr noundef captures(none) [[P:%.*]]) local_unnamed_addr #[[ATTR0:[0-9]+]] {25// CHECK-NEXT: entry:26// CHECK-NEXT: [[BF_LOAD:%.*]] = load i16, ptr [[P]], align 427// CHECK-NEXT: [[INC:%.*]] = add i16 [[BF_LOAD]], 128// CHECK-NEXT: store i16 [[INC]], ptr [[P]], align 429// CHECK-NEXT: ret void30//31void A (Tail *p) {32 p->a++;33}34 35// CHECK-LABEL: define dso_local void @_Z1BP4Tail36// CHECK-SAME: (ptr noundef captures(none) [[P:%.*]]) local_unnamed_addr #[[ATTR0]] {37// CHECK-NEXT: entry:38// CHECK-NEXT: [[B:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 239// CHECK-NEXT: [[BF_LOAD:%.*]] = load i8, ptr [[B]], align 240// CHECK-NEXT: [[INC:%.*]] = add i8 [[BF_LOAD]], 141// CHECK-NEXT: store i8 [[INC]], ptr [[B]], align 242// CHECK-NEXT: ret void43//44void B (Tail *p) {45 p->b++;46}47 48// CHECK-LABEL: define dso_local void @_Z1AP4Char49// CHECK-SAME: (ptr noundef captures(none) [[P:%.*]]) local_unnamed_addr #[[ATTR0]] {50// CHECK-NEXT: entry:51// CHECK-NEXT: [[BF_LOAD:%.*]] = load i16, ptr [[P]], align 452// CHECK-NEXT: [[INC:%.*]] = add i16 [[BF_LOAD]], 153// CHECK-NEXT: store i16 [[INC]], ptr [[P]], align 454// CHECK-NEXT: ret void55//56void A (Char *p) {57 p->a++;58}59 60// CHECK-LABEL: define dso_local void @_Z1BP4Char61// CHECK-SAME: (ptr noundef captures(none) [[P:%.*]]) local_unnamed_addr #[[ATTR0]] {62// CHECK-NEXT: entry:63// CHECK-NEXT: [[B:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 264// CHECK-NEXT: [[BF_LOAD:%.*]] = load i8, ptr [[B]], align 265// CHECK-NEXT: [[INC:%.*]] = add i8 [[BF_LOAD]], 166// CHECK-NEXT: store i8 [[INC]], ptr [[B]], align 267// CHECK-NEXT: ret void68//69void B (Char *p) {70 p->b++;71}72 73// CHECK-LABEL: define dso_local void @_Z1AP3Int74// CHECK-SAME: (ptr noundef captures(none) [[P:%.*]]) local_unnamed_addr #[[ATTR0]] {75// CHECK-NEXT: entry:76// CHECK-NEXT: [[BF_LOAD:%.*]] = load i32, ptr [[P]], align 477// CHECK-NEXT: [[INC:%.*]] = add i32 [[BF_LOAD]], 178// CHECK-NEXT: [[BF_VALUE:%.*]] = and i32 [[INC]], 6553579// CHECK-NEXT: [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -6553680// CHECK-NEXT: [[BF_SET:%.*]] = or disjoint i32 [[BF_VALUE]], [[BF_CLEAR]]81// CHECK-NEXT: store i32 [[BF_SET]], ptr [[P]], align 482// CHECK-NEXT: ret void83//84void A (Int *p) {85 p->a++;86}87 88// CHECK-LABEL: define dso_local void @_Z1BP3Int89// CHECK-SAME: (ptr noundef captures(none) [[P:%.*]]) local_unnamed_addr #[[ATTR0]] {90// CHECK-NEXT: entry:91// CHECK-NEXT: [[BF_LOAD:%.*]] = load i32, ptr [[P]], align 492// CHECK-NEXT: [[BF_VALUE:%.*]] = add i32 [[BF_LOAD]], 6553693// CHECK-NEXT: [[BF_SHL2:%.*]] = and i32 [[BF_VALUE]], 1671168094// CHECK-NEXT: [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -1671168195// CHECK-NEXT: [[BF_SET:%.*]] = or disjoint i32 [[BF_SHL2]], [[BF_CLEAR]]96// CHECK-NEXT: store i32 [[BF_SET]], ptr [[P]], align 497// CHECK-NEXT: ret void98//99void B (Int *p) {100 p->b++;101}102