brintos

brintos / llvm-project-archived public Read only

0
0
Text · 209.0 KiB · e195267 Raw
4296 lines · c
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// RUN: %clang_cc1 -triple armv8-none-linux-eabi -fno-aapcs-bitfield-width -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s -check-prefix=LE3// RUN: %clang_cc1 -triple armebv8-none-linux-eabi -fno-aapcs-bitfield-width -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s -check-prefix=BE4 5// RUN: %clang_cc1 -triple armv8-none-linux-eabi -faapcs-bitfield-load -fno-aapcs-bitfield-width -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s -check-prefixes=LENUMLOADS6// RUN: %clang_cc1 -triple armebv8-none-linux-eabi -faapcs-bitfield-load -fno-aapcs-bitfield-width -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s -check-prefixes=BENUMLOADS7 8// RUN: %clang_cc1 -triple armv8-none-linux-eabi -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s -check-prefix=LEWIDTH9// RUN: %clang_cc1 -triple armebv8-none-linux-eabi -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s -check-prefix=BEWIDTH10 11// RUN: %clang_cc1 -triple armv8-none-linux-eabi -faapcs-bitfield-load -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s -check-prefixes=LEWIDTHNUM12// RUN: %clang_cc1 -triple armebv8-none-linux-eabi -faapcs-bitfield-load -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | FileCheck %s -check-prefixes=BEWIDTHNUM13 14struct st0 {15  short c : 7;16};17 18// LE-LABEL: @st0_check_load(19// LE-NEXT:  entry:20// LE-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 221// LE-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 122// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 123// LE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i1624// LE-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i3225// LE-NEXT:    ret i32 [[CONV]]26//27// BE-LABEL: @st0_check_load(28// BE-NEXT:  entry:29// BE-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 230// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 131// BE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i1632// BE-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i3233// BE-NEXT:    ret i32 [[CONV]]34//35// LENUMLOADS-LABEL: @st0_check_load(36// LENUMLOADS-NEXT:  entry:37// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 238// LENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 139// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 140// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i1641// LENUMLOADS-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i3242// LENUMLOADS-NEXT:    ret i32 [[CONV]]43//44// BENUMLOADS-LABEL: @st0_check_load(45// BENUMLOADS-NEXT:  entry:46// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 247// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 148// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i1649// BENUMLOADS-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i3250// BENUMLOADS-NEXT:    ret i32 [[CONV]]51//52// LEWIDTH-LABEL: @st0_check_load(53// LEWIDTH-NEXT:  entry:54// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 255// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 156// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 157// LEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i1658// LEWIDTH-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i3259// LEWIDTH-NEXT:    ret i32 [[CONV]]60//61// BEWIDTH-LABEL: @st0_check_load(62// BEWIDTH-NEXT:  entry:63// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 264// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 165// BEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i1666// BEWIDTH-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i3267// BEWIDTH-NEXT:    ret i32 [[CONV]]68//69// LEWIDTHNUM-LABEL: @st0_check_load(70// LEWIDTHNUM-NEXT:  entry:71// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 272// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 173// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 174// LEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i1675// LEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i3276// LEWIDTHNUM-NEXT:    ret i32 [[CONV]]77//78// BEWIDTHNUM-LABEL: @st0_check_load(79// BEWIDTHNUM-NEXT:  entry:80// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 281// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 182// BEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i1683// BEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i3284// BEWIDTHNUM-NEXT:    ret i32 [[CONV]]85//86int st0_check_load(struct st0 *m) {87  return m->c;88}89 90// LE-LABEL: @st0_check_store(91// LE-NEXT:  entry:92// LE-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 293// LE-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -12894// LE-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 195// LE-NEXT:    store i8 [[BF_SET]], ptr [[M]], align 296// LE-NEXT:    ret void97//98// BE-LABEL: @st0_check_store(99// BE-NEXT:  entry:100// BE-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 2101// BE-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 1102// BE-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 2103// BE-NEXT:    store i8 [[BF_SET]], ptr [[M]], align 2104// BE-NEXT:    ret void105//106// LENUMLOADS-LABEL: @st0_check_store(107// LENUMLOADS-NEXT:  entry:108// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 2109// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -128110// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 1111// LENUMLOADS-NEXT:    store i8 [[BF_SET]], ptr [[M]], align 2112// LENUMLOADS-NEXT:    ret void113//114// BENUMLOADS-LABEL: @st0_check_store(115// BENUMLOADS-NEXT:  entry:116// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 2117// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 1118// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 2119// BENUMLOADS-NEXT:    store i8 [[BF_SET]], ptr [[M]], align 2120// BENUMLOADS-NEXT:    ret void121//122// LEWIDTH-LABEL: @st0_check_store(123// LEWIDTH-NEXT:  entry:124// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 2125// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -128126// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 1127// LEWIDTH-NEXT:    store i8 [[BF_SET]], ptr [[M]], align 2128// LEWIDTH-NEXT:    ret void129//130// BEWIDTH-LABEL: @st0_check_store(131// BEWIDTH-NEXT:  entry:132// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 2133// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 1134// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 2135// BEWIDTH-NEXT:    store i8 [[BF_SET]], ptr [[M]], align 2136// BEWIDTH-NEXT:    ret void137//138// LEWIDTHNUM-LABEL: @st0_check_store(139// LEWIDTHNUM-NEXT:  entry:140// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 2141// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -128142// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 1143// LEWIDTHNUM-NEXT:    store i8 [[BF_SET]], ptr [[M]], align 2144// LEWIDTHNUM-NEXT:    ret void145//146// BEWIDTHNUM-LABEL: @st0_check_store(147// BEWIDTHNUM-NEXT:  entry:148// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i8, ptr [[M:%.*]], align 2149// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 1150// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 2151// BEWIDTHNUM-NEXT:    store i8 [[BF_SET]], ptr [[M]], align 2152// BEWIDTHNUM-NEXT:    ret void153//154void st0_check_store(struct st0 *m) {155  m->c = 1;156}157 158struct st1 {159  int a : 10;160  short c : 6;161};162 163// LE-LABEL: @st1_check_load(164// LE-NEXT:  entry:165// LE-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4166// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_LOAD]], 10167// LE-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i32168// LE-NEXT:    ret i32 [[CONV]]169//170// BE-LABEL: @st1_check_load(171// BE-NEXT:  entry:172// BE-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4173// BE-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 10174// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 10175// BE-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i32176// BE-NEXT:    ret i32 [[CONV]]177//178// LENUMLOADS-LABEL: @st1_check_load(179// LENUMLOADS-NEXT:  entry:180// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4181// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_LOAD]], 10182// LENUMLOADS-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i32183// LENUMLOADS-NEXT:    ret i32 [[CONV]]184//185// BENUMLOADS-LABEL: @st1_check_load(186// BENUMLOADS-NEXT:  entry:187// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4188// BENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 10189// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 10190// BENUMLOADS-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i32191// BENUMLOADS-NEXT:    ret i32 [[CONV]]192//193// LEWIDTH-LABEL: @st1_check_load(194// LEWIDTH-NEXT:  entry:195// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4196// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_LOAD]], 10197// LEWIDTH-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i32198// LEWIDTH-NEXT:    ret i32 [[CONV]]199//200// BEWIDTH-LABEL: @st1_check_load(201// BEWIDTH-NEXT:  entry:202// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4203// BEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 10204// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 10205// BEWIDTH-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i32206// BEWIDTH-NEXT:    ret i32 [[CONV]]207//208// LEWIDTHNUM-LABEL: @st1_check_load(209// LEWIDTHNUM-NEXT:  entry:210// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4211// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_LOAD]], 10212// LEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i32213// LEWIDTHNUM-NEXT:    ret i32 [[CONV]]214//215// BEWIDTHNUM-LABEL: @st1_check_load(216// BEWIDTHNUM-NEXT:  entry:217// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4218// BEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 10219// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 10220// BEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i32221// BEWIDTHNUM-NEXT:    ret i32 [[CONV]]222//223int st1_check_load(struct st1 *m) {224  return m->c;225}226 227// LE-LABEL: @st1_check_store(228// LE-NEXT:  entry:229// LE-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4230// LE-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], 1023231// LE-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1024232// LE-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4233// LE-NEXT:    ret void234//235// BE-LABEL: @st1_check_store(236// BE-NEXT:  entry:237// BE-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4238// BE-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -64239// BE-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1240// BE-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4241// BE-NEXT:    ret void242//243// LENUMLOADS-LABEL: @st1_check_store(244// LENUMLOADS-NEXT:  entry:245// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4246// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], 1023247// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1024248// LENUMLOADS-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4249// LENUMLOADS-NEXT:    ret void250//251// BENUMLOADS-LABEL: @st1_check_store(252// BENUMLOADS-NEXT:  entry:253// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4254// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -64255// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1256// BENUMLOADS-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4257// BENUMLOADS-NEXT:    ret void258//259// LEWIDTH-LABEL: @st1_check_store(260// LEWIDTH-NEXT:  entry:261// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4262// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], 1023263// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1024264// LEWIDTH-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4265// LEWIDTH-NEXT:    ret void266//267// BEWIDTH-LABEL: @st1_check_store(268// BEWIDTH-NEXT:  entry:269// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4270// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -64271// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1272// BEWIDTH-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4273// BEWIDTH-NEXT:    ret void274//275// LEWIDTHNUM-LABEL: @st1_check_store(276// LEWIDTHNUM-NEXT:  entry:277// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4278// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], 1023279// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1024280// LEWIDTHNUM-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4281// LEWIDTHNUM-NEXT:    ret void282//283// BEWIDTHNUM-LABEL: @st1_check_store(284// BEWIDTHNUM-NEXT:  entry:285// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4286// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -64287// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1288// BEWIDTHNUM-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4289// BEWIDTHNUM-NEXT:    ret void290//291void st1_check_store(struct st1 *m) {292  m->c = 1;293}294 295struct st2 {296  int a : 10;297  short c : 7;298};299 300// LE-LABEL: @st2_check_load(301// LE-NEXT:  entry:302// LE-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4303// LE-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 9304// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 25305// LE-NEXT:    [[BF_CAST:%.*]] = trunc i32 [[BF_ASHR]] to i16306// LE-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i32307// LE-NEXT:    ret i32 [[CONV]]308//309// BE-LABEL: @st2_check_load(310// BE-NEXT:  entry:311// BE-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4312// BE-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 16313// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 25314// BE-NEXT:    [[BF_CAST:%.*]] = trunc i32 [[BF_ASHR]] to i16315// BE-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i32316// BE-NEXT:    ret i32 [[CONV]]317//318// LENUMLOADS-LABEL: @st2_check_load(319// LENUMLOADS-NEXT:  entry:320// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4321// LENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 9322// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 25323// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = trunc i32 [[BF_ASHR]] to i16324// LENUMLOADS-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i32325// LENUMLOADS-NEXT:    ret i32 [[CONV]]326//327// BENUMLOADS-LABEL: @st2_check_load(328// BENUMLOADS-NEXT:  entry:329// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4330// BENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 16331// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 25332// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = trunc i32 [[BF_ASHR]] to i16333// BENUMLOADS-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i32334// BENUMLOADS-NEXT:    ret i32 [[CONV]]335//336// LEWIDTH-LABEL: @st2_check_load(337// LEWIDTH-NEXT:  entry:338// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4339// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 9340// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 25341// LEWIDTH-NEXT:    [[BF_CAST:%.*]] = trunc i32 [[BF_ASHR]] to i16342// LEWIDTH-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i32343// LEWIDTH-NEXT:    ret i32 [[CONV]]344//345// BEWIDTH-LABEL: @st2_check_load(346// BEWIDTH-NEXT:  entry:347// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4348// BEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 16349// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 25350// BEWIDTH-NEXT:    [[BF_CAST:%.*]] = trunc i32 [[BF_ASHR]] to i16351// BEWIDTH-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i32352// BEWIDTH-NEXT:    ret i32 [[CONV]]353//354// LEWIDTHNUM-LABEL: @st2_check_load(355// LEWIDTHNUM-NEXT:  entry:356// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4357// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 9358// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 25359// LEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = trunc i32 [[BF_ASHR]] to i16360// LEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i32361// LEWIDTHNUM-NEXT:    ret i32 [[CONV]]362//363// BEWIDTHNUM-LABEL: @st2_check_load(364// BEWIDTHNUM-NEXT:  entry:365// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4366// BEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 16367// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 25368// BEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = trunc i32 [[BF_ASHR]] to i16369// BEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i32370// BEWIDTHNUM-NEXT:    ret i32 [[CONV]]371//372int st2_check_load(struct st2 *m) {373  return m->c;374}375 376// LE-LABEL: @st2_check_store(377// LE-NEXT:  entry:378// LE-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4379// LE-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -8323073380// LE-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 65536381// LE-NEXT:    store i32 [[BF_SET]], ptr [[M]], align 4382// LE-NEXT:    ret void383//384// BE-LABEL: @st2_check_store(385// BE-NEXT:  entry:386// BE-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4387// BE-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -65025388// BE-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 512389// BE-NEXT:    store i32 [[BF_SET]], ptr [[M]], align 4390// BE-NEXT:    ret void391//392// LENUMLOADS-LABEL: @st2_check_store(393// LENUMLOADS-NEXT:  entry:394// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4395// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -8323073396// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 65536397// LENUMLOADS-NEXT:    store i32 [[BF_SET]], ptr [[M]], align 4398// LENUMLOADS-NEXT:    ret void399//400// BENUMLOADS-LABEL: @st2_check_store(401// BENUMLOADS-NEXT:  entry:402// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4403// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -65025404// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 512405// BENUMLOADS-NEXT:    store i32 [[BF_SET]], ptr [[M]], align 4406// BENUMLOADS-NEXT:    ret void407//408// LEWIDTH-LABEL: @st2_check_store(409// LEWIDTH-NEXT:  entry:410// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4411// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -8323073412// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 65536413// LEWIDTH-NEXT:    store i32 [[BF_SET]], ptr [[M]], align 4414// LEWIDTH-NEXT:    ret void415//416// BEWIDTH-LABEL: @st2_check_store(417// BEWIDTH-NEXT:  entry:418// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4419// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -65025420// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 512421// BEWIDTH-NEXT:    store i32 [[BF_SET]], ptr [[M]], align 4422// BEWIDTH-NEXT:    ret void423//424// LEWIDTHNUM-LABEL: @st2_check_store(425// LEWIDTHNUM-NEXT:  entry:426// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4427// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -8323073428// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 65536429// LEWIDTHNUM-NEXT:    store i32 [[BF_SET]], ptr [[M]], align 4430// LEWIDTHNUM-NEXT:    ret void431//432// BEWIDTHNUM-LABEL: @st2_check_store(433// BEWIDTHNUM-NEXT:  entry:434// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[M:%.*]], align 4435// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -65025436// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 512437// BEWIDTHNUM-NEXT:    store i32 [[BF_SET]], ptr [[M]], align 4438// BEWIDTHNUM-NEXT:    ret void439//440void st2_check_store(struct st2 *m) {441  m->c = 1;442}443// Volatile access is allowed to use 16 bits444struct st3 {445  volatile short c : 7;446};447 448// LE-LABEL: @st3_check_load(449// LE-NEXT:  entry:450// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 2451// LE-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 1452// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 1453// LE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i16454// LE-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i32455// LE-NEXT:    ret i32 [[CONV]]456//457// BE-LABEL: @st3_check_load(458// BE-NEXT:  entry:459// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 2460// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 1461// BE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i16462// BE-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i32463// BE-NEXT:    ret i32 [[CONV]]464//465// LENUMLOADS-LABEL: @st3_check_load(466// LENUMLOADS-NEXT:  entry:467// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 2468// LENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 1469// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 1470// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i16471// LENUMLOADS-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i32472// LENUMLOADS-NEXT:    ret i32 [[CONV]]473//474// BENUMLOADS-LABEL: @st3_check_load(475// BENUMLOADS-NEXT:  entry:476// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 2477// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 1478// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i16479// BENUMLOADS-NEXT:    [[CONV:%.*]] = sext i16 [[BF_CAST]] to i32480// BENUMLOADS-NEXT:    ret i32 [[CONV]]481//482// LEWIDTH-LABEL: @st3_check_load(483// LEWIDTH-NEXT:  entry:484// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 2485// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 9486// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 9487// LEWIDTH-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i32488// LEWIDTH-NEXT:    ret i32 [[CONV]]489//490// BEWIDTH-LABEL: @st3_check_load(491// BEWIDTH-NEXT:  entry:492// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 2493// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_LOAD]], 9494// BEWIDTH-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i32495// BEWIDTH-NEXT:    ret i32 [[CONV]]496//497// LEWIDTHNUM-LABEL: @st3_check_load(498// LEWIDTHNUM-NEXT:  entry:499// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 2500// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 9501// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 9502// LEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i32503// LEWIDTHNUM-NEXT:    ret i32 [[CONV]]504//505// BEWIDTHNUM-LABEL: @st3_check_load(506// BEWIDTHNUM-NEXT:  entry:507// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 2508// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_LOAD]], 9509// BEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i32510// BEWIDTHNUM-NEXT:    ret i32 [[CONV]]511//512int st3_check_load(struct st3 *m) {513  return m->c;514}515 516// LE-LABEL: @st3_check_store(517// LE-NEXT:  entry:518// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 2519// LE-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -128520// LE-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 1521// LE-NEXT:    store volatile i8 [[BF_SET]], ptr [[M]], align 2522// LE-NEXT:    ret void523//524// BE-LABEL: @st3_check_store(525// BE-NEXT:  entry:526// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 2527// BE-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 1528// BE-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 2529// BE-NEXT:    store volatile i8 [[BF_SET]], ptr [[M]], align 2530// BE-NEXT:    ret void531//532// LENUMLOADS-LABEL: @st3_check_store(533// LENUMLOADS-NEXT:  entry:534// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 2535// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -128536// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 1537// LENUMLOADS-NEXT:    store volatile i8 [[BF_SET]], ptr [[M]], align 2538// LENUMLOADS-NEXT:    ret void539//540// BENUMLOADS-LABEL: @st3_check_store(541// BENUMLOADS-NEXT:  entry:542// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 2543// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 1544// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 2545// BENUMLOADS-NEXT:    store volatile i8 [[BF_SET]], ptr [[M]], align 2546// BENUMLOADS-NEXT:    ret void547//548// LEWIDTH-LABEL: @st3_check_store(549// LEWIDTH-NEXT:  entry:550// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 2551// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -128552// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1553// LEWIDTH-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 2554// LEWIDTH-NEXT:    ret void555//556// BEWIDTH-LABEL: @st3_check_store(557// BEWIDTH-NEXT:  entry:558// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 2559// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], 511560// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 512561// BEWIDTH-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 2562// BEWIDTH-NEXT:    ret void563//564// LEWIDTHNUM-LABEL: @st3_check_store(565// LEWIDTHNUM-NEXT:  entry:566// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 2567// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -128568// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1569// LEWIDTHNUM-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 2570// LEWIDTHNUM-NEXT:    ret void571//572// BEWIDTHNUM-LABEL: @st3_check_store(573// BEWIDTHNUM-NEXT:  entry:574// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 2575// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], 511576// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 512577// BEWIDTHNUM-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 2578// BEWIDTHNUM-NEXT:    ret void579//580void st3_check_store(struct st3 *m) {581  m->c = 1;582}583// Volatile access to st4.c should use a char ld/st584struct st4 {585  int b : 9;586  volatile char c : 5;587};588 589// LE-LABEL: @st4_check_load(590// LE-NEXT:  entry:591// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 4592// LE-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 2593// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 11594// LE-NEXT:    [[BF_CAST:%.*]] = trunc i16 [[BF_ASHR]] to i8595// LE-NEXT:    [[CONV:%.*]] = sext i8 [[BF_CAST]] to i32596// LE-NEXT:    ret i32 [[CONV]]597//598// BE-LABEL: @st4_check_load(599// BE-NEXT:  entry:600// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 4601// BE-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 9602// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 11603// BE-NEXT:    [[BF_CAST:%.*]] = trunc i16 [[BF_ASHR]] to i8604// BE-NEXT:    [[CONV:%.*]] = sext i8 [[BF_CAST]] to i32605// BE-NEXT:    ret i32 [[CONV]]606//607// LENUMLOADS-LABEL: @st4_check_load(608// LENUMLOADS-NEXT:  entry:609// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 4610// LENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 2611// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 11612// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = trunc i16 [[BF_ASHR]] to i8613// LENUMLOADS-NEXT:    [[CONV:%.*]] = sext i8 [[BF_CAST]] to i32614// LENUMLOADS-NEXT:    ret i32 [[CONV]]615//616// BENUMLOADS-LABEL: @st4_check_load(617// BENUMLOADS-NEXT:  entry:618// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 4619// BENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 9620// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 11621// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = trunc i16 [[BF_ASHR]] to i8622// BENUMLOADS-NEXT:    [[CONV:%.*]] = sext i8 [[BF_CAST]] to i32623// BENUMLOADS-NEXT:    ret i32 [[CONV]]624//625// LEWIDTH-LABEL: @st4_check_load(626// LEWIDTH-NEXT:  entry:627// LEWIDTH-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 1628// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 1629// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 2630// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 3631// LEWIDTH-NEXT:    [[CONV:%.*]] = sext i8 [[BF_ASHR]] to i32632// LEWIDTH-NEXT:    ret i32 [[CONV]]633//634// BEWIDTH-LABEL: @st4_check_load(635// BEWIDTH-NEXT:  entry:636// BEWIDTH-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 1637// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 1638// BEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 1639// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 3640// BEWIDTH-NEXT:    [[CONV:%.*]] = sext i8 [[BF_ASHR]] to i32641// BEWIDTH-NEXT:    ret i32 [[CONV]]642//643// LEWIDTHNUM-LABEL: @st4_check_load(644// LEWIDTHNUM-NEXT:  entry:645// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 1646// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 1647// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 2648// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 3649// LEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i8 [[BF_ASHR]] to i32650// LEWIDTHNUM-NEXT:    ret i32 [[CONV]]651//652// BEWIDTHNUM-LABEL: @st4_check_load(653// BEWIDTHNUM-NEXT:  entry:654// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 1655// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 1656// BEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 1657// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 3658// BEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i8 [[BF_ASHR]] to i32659// BEWIDTHNUM-NEXT:    ret i32 [[CONV]]660//661int st4_check_load(struct st4 *m) {662  return m->c;663}664 665// LE-LABEL: @st4_check_store(666// LE-NEXT:  entry:667// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 4668// LE-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -15873669// LE-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 512670// LE-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 4671// LE-NEXT:    ret void672//673// BE-LABEL: @st4_check_store(674// BE-NEXT:  entry:675// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 4676// BE-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -125677// BE-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 4678// BE-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 4679// BE-NEXT:    ret void680//681// LENUMLOADS-LABEL: @st4_check_store(682// LENUMLOADS-NEXT:  entry:683// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 4684// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -15873685// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 512686// LENUMLOADS-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 4687// LENUMLOADS-NEXT:    ret void688//689// BENUMLOADS-LABEL: @st4_check_store(690// BENUMLOADS-NEXT:  entry:691// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 4692// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -125693// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 4694// BENUMLOADS-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 4695// BENUMLOADS-NEXT:    ret void696//697// LEWIDTH-LABEL: @st4_check_store(698// LEWIDTH-NEXT:  entry:699// LEWIDTH-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 1700// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 1701// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -63702// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 2703// LEWIDTH-NEXT:    store volatile i8 [[BF_SET]], ptr [[TMP0]], align 1704// LEWIDTH-NEXT:    ret void705//706// BEWIDTH-LABEL: @st4_check_store(707// BEWIDTH-NEXT:  entry:708// BEWIDTH-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 1709// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 1710// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -125711// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 4712// BEWIDTH-NEXT:    store volatile i8 [[BF_SET]], ptr [[TMP0]], align 1713// BEWIDTH-NEXT:    ret void714//715// LEWIDTHNUM-LABEL: @st4_check_store(716// LEWIDTHNUM-NEXT:  entry:717// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 1718// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 1719// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -63720// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 2721// LEWIDTHNUM-NEXT:    store volatile i8 [[BF_SET]], ptr [[TMP0]], align 1722// LEWIDTHNUM-NEXT:    ret void723//724// BEWIDTHNUM-LABEL: @st4_check_store(725// BEWIDTHNUM-NEXT:  entry:726// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 1727// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 1728// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -125729// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 4730// BEWIDTHNUM-NEXT:    store volatile i8 [[BF_SET]], ptr [[TMP0]], align 1731// BEWIDTHNUM-NEXT:    ret void732//733void st4_check_store(struct st4 *m) {734  m->c = 1;735}736 737// LE-LABEL: @st4_check_nonv_store(738// LE-NEXT:  entry:739// LE-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4740// LE-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -512741// LE-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1742// LE-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4743// LE-NEXT:    ret void744//745// BE-LABEL: @st4_check_nonv_store(746// BE-NEXT:  entry:747// BE-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4748// BE-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], 127749// BE-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 128750// BE-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4751// BE-NEXT:    ret void752//753// LENUMLOADS-LABEL: @st4_check_nonv_store(754// LENUMLOADS-NEXT:  entry:755// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4756// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -512757// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1758// LENUMLOADS-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4759// LENUMLOADS-NEXT:    ret void760//761// BENUMLOADS-LABEL: @st4_check_nonv_store(762// BENUMLOADS-NEXT:  entry:763// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4764// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], 127765// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 128766// BENUMLOADS-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4767// BENUMLOADS-NEXT:    ret void768//769// LEWIDTH-LABEL: @st4_check_nonv_store(770// LEWIDTH-NEXT:  entry:771// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4772// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -512773// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1774// LEWIDTH-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4775// LEWIDTH-NEXT:    ret void776//777// BEWIDTH-LABEL: @st4_check_nonv_store(778// BEWIDTH-NEXT:  entry:779// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4780// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], 127781// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 128782// BEWIDTH-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4783// BEWIDTH-NEXT:    ret void784//785// LEWIDTHNUM-LABEL: @st4_check_nonv_store(786// LEWIDTHNUM-NEXT:  entry:787// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4788// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -512789// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1790// LEWIDTHNUM-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4791// LEWIDTHNUM-NEXT:    ret void792//793// BEWIDTHNUM-LABEL: @st4_check_nonv_store(794// BEWIDTHNUM-NEXT:  entry:795// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 4796// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], 127797// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 128798// BEWIDTHNUM-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 4799// BEWIDTHNUM-NEXT:    ret void800//801void st4_check_nonv_store(struct st4 *m) {802  m->b = 1;803}804 805struct st5 {806  int a : 12;807  volatile char c : 5;808};809 810// LE-LABEL: @st5_check_load(811// LE-NEXT:  entry:812// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 4813// LE-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 11814// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 27815// LE-NEXT:    [[BF_CAST:%.*]] = trunc i32 [[BF_ASHR]] to i8816// LE-NEXT:    [[CONV:%.*]] = sext i8 [[BF_CAST]] to i32817// LE-NEXT:    ret i32 [[CONV]]818//819// BE-LABEL: @st5_check_load(820// BE-NEXT:  entry:821// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 4822// BE-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 16823// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 27824// BE-NEXT:    [[BF_CAST:%.*]] = trunc i32 [[BF_ASHR]] to i8825// BE-NEXT:    [[CONV:%.*]] = sext i8 [[BF_CAST]] to i32826// BE-NEXT:    ret i32 [[CONV]]827//828// LENUMLOADS-LABEL: @st5_check_load(829// LENUMLOADS-NEXT:  entry:830// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 4831// LENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 11832// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 27833// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = trunc i32 [[BF_ASHR]] to i8834// LENUMLOADS-NEXT:    [[CONV:%.*]] = sext i8 [[BF_CAST]] to i32835// LENUMLOADS-NEXT:    ret i32 [[CONV]]836//837// BENUMLOADS-LABEL: @st5_check_load(838// BENUMLOADS-NEXT:  entry:839// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 4840// BENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 16841// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 27842// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = trunc i32 [[BF_ASHR]] to i8843// BENUMLOADS-NEXT:    [[CONV:%.*]] = sext i8 [[BF_CAST]] to i32844// BENUMLOADS-NEXT:    ret i32 [[CONV]]845//846// LEWIDTH-LABEL: @st5_check_load(847// LEWIDTH-NEXT:  entry:848// LEWIDTH-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 2849// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 2850// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 3851// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 3852// LEWIDTH-NEXT:    [[CONV:%.*]] = sext i8 [[BF_ASHR]] to i32853// LEWIDTH-NEXT:    ret i32 [[CONV]]854//855// BEWIDTH-LABEL: @st5_check_load(856// BEWIDTH-NEXT:  entry:857// BEWIDTH-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 2858// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 2859// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 3860// BEWIDTH-NEXT:    [[CONV:%.*]] = sext i8 [[BF_ASHR]] to i32861// BEWIDTH-NEXT:    ret i32 [[CONV]]862//863// LEWIDTHNUM-LABEL: @st5_check_load(864// LEWIDTHNUM-NEXT:  entry:865// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 2866// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 2867// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 3868// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 3869// LEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i8 [[BF_ASHR]] to i32870// LEWIDTHNUM-NEXT:    ret i32 [[CONV]]871//872// BEWIDTHNUM-LABEL: @st5_check_load(873// BEWIDTHNUM-NEXT:  entry:874// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 2875// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 2876// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 3877// BEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i8 [[BF_ASHR]] to i32878// BEWIDTHNUM-NEXT:    ret i32 [[CONV]]879//880int st5_check_load(struct st5 *m) {881  return m->c;882}883 884// LE-LABEL: @st5_check_store(885// LE-NEXT:  entry:886// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 4887// LE-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -2031617888// LE-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 65536889// LE-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 4890// LE-NEXT:    ret void891//892// BE-LABEL: @st5_check_store(893// BE-NEXT:  entry:894// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 4895// BE-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -63489896// BE-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 2048897// BE-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 4898// BE-NEXT:    ret void899//900// LENUMLOADS-LABEL: @st5_check_store(901// LENUMLOADS-NEXT:  entry:902// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 4903// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -2031617904// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 65536905// LENUMLOADS-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 4906// LENUMLOADS-NEXT:    ret void907//908// BENUMLOADS-LABEL: @st5_check_store(909// BENUMLOADS-NEXT:  entry:910// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 4911// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -63489912// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 2048913// BENUMLOADS-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 4914// BENUMLOADS-NEXT:    ret void915//916// LEWIDTH-LABEL: @st5_check_store(917// LEWIDTH-NEXT:  entry:918// LEWIDTH-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 2919// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 2920// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -32921// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 1922// LEWIDTH-NEXT:    store volatile i8 [[BF_SET]], ptr [[TMP0]], align 2923// LEWIDTH-NEXT:    ret void924//925// BEWIDTH-LABEL: @st5_check_store(926// BEWIDTH-NEXT:  entry:927// BEWIDTH-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 2928// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 2929// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 7930// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 8931// BEWIDTH-NEXT:    store volatile i8 [[BF_SET]], ptr [[TMP0]], align 2932// BEWIDTH-NEXT:    ret void933//934// LEWIDTHNUM-LABEL: @st5_check_store(935// LEWIDTHNUM-NEXT:  entry:936// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 2937// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 2938// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -32939// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 1940// LEWIDTHNUM-NEXT:    store volatile i8 [[BF_SET]], ptr [[TMP0]], align 2941// LEWIDTHNUM-NEXT:    ret void942//943// BEWIDTHNUM-LABEL: @st5_check_store(944// BEWIDTHNUM-NEXT:  entry:945// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[M:%.*]], i32 2946// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[TMP0]], align 2947// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 7948// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 8949// BEWIDTHNUM-NEXT:    store volatile i8 [[BF_SET]], ptr [[TMP0]], align 2950// BEWIDTHNUM-NEXT:    ret void951//952void st5_check_store(struct st5 *m) {953  m->c = 1;954}955 956struct st6 {957  int a : 12;958  char b;959  int c : 5;960};961 962// LE-LABEL: @st6_check_load(963// LE-NEXT:  entry:964// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 4965// LE-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 4966// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 4967// LE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i32968// LE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 1969// LE-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[B]], align 2970// LE-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i32971// LE-NEXT:    [[ADD:%.*]] = add nsw i32 [[BF_CAST]], [[CONV]]972// LE-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 2973// LE-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[C]], align 1974// LE-NEXT:    [[BF_SHL2:%.*]] = shl i8 [[BF_LOAD1]], 3975// LE-NEXT:    [[BF_ASHR3:%.*]] = ashr i8 [[BF_SHL2]], 3976// LE-NEXT:    [[BF_CAST4:%.*]] = sext i8 [[BF_ASHR3]] to i32977// LE-NEXT:    [[ADD5:%.*]] = add nsw i32 [[ADD]], [[BF_CAST4]]978// LE-NEXT:    ret i32 [[ADD5]]979//980// BE-LABEL: @st6_check_load(981// BE-NEXT:  entry:982// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 4983// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_LOAD]], 4984// BE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i32985// BE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 1986// BE-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[B]], align 2987// BE-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i32988// BE-NEXT:    [[ADD:%.*]] = add nsw i32 [[BF_CAST]], [[CONV]]989// BE-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 2990// BE-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[C]], align 1991// BE-NEXT:    [[BF_ASHR2:%.*]] = ashr i8 [[BF_LOAD1]], 3992// BE-NEXT:    [[BF_CAST3:%.*]] = sext i8 [[BF_ASHR2]] to i32993// BE-NEXT:    [[ADD4:%.*]] = add nsw i32 [[ADD]], [[BF_CAST3]]994// BE-NEXT:    ret i32 [[ADD4]]995//996// LENUMLOADS-LABEL: @st6_check_load(997// LENUMLOADS-NEXT:  entry:998// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 4999// LENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 41000// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 41001// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i321002// LENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 11003// LENUMLOADS-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[B]], align 21004// LENUMLOADS-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321005// LENUMLOADS-NEXT:    [[ADD:%.*]] = add nsw i32 [[BF_CAST]], [[CONV]]1006// LENUMLOADS-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 21007// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[C]], align 11008// LENUMLOADS-NEXT:    [[BF_SHL2:%.*]] = shl i8 [[BF_LOAD1]], 31009// LENUMLOADS-NEXT:    [[BF_ASHR3:%.*]] = ashr i8 [[BF_SHL2]], 31010// LENUMLOADS-NEXT:    [[BF_CAST4:%.*]] = sext i8 [[BF_ASHR3]] to i321011// LENUMLOADS-NEXT:    [[ADD5:%.*]] = add nsw i32 [[ADD]], [[BF_CAST4]]1012// LENUMLOADS-NEXT:    ret i32 [[ADD5]]1013//1014// BENUMLOADS-LABEL: @st6_check_load(1015// BENUMLOADS-NEXT:  entry:1016// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41017// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_LOAD]], 41018// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i321019// BENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 11020// BENUMLOADS-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[B]], align 21021// BENUMLOADS-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321022// BENUMLOADS-NEXT:    [[ADD:%.*]] = add nsw i32 [[BF_CAST]], [[CONV]]1023// BENUMLOADS-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 21024// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[C]], align 11025// BENUMLOADS-NEXT:    [[BF_ASHR2:%.*]] = ashr i8 [[BF_LOAD1]], 31026// BENUMLOADS-NEXT:    [[BF_CAST3:%.*]] = sext i8 [[BF_ASHR2]] to i321027// BENUMLOADS-NEXT:    [[ADD4:%.*]] = add nsw i32 [[ADD]], [[BF_CAST3]]1028// BENUMLOADS-NEXT:    ret i32 [[ADD4]]1029//1030// LEWIDTH-LABEL: @st6_check_load(1031// LEWIDTH-NEXT:  entry:1032// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41033// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 41034// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 41035// LEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i321036// LEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 11037// LEWIDTH-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[B]], align 21038// LEWIDTH-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321039// LEWIDTH-NEXT:    [[ADD:%.*]] = add nsw i32 [[BF_CAST]], [[CONV]]1040// LEWIDTH-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 21041// LEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[C]], align 11042// LEWIDTH-NEXT:    [[BF_SHL2:%.*]] = shl i8 [[BF_LOAD1]], 31043// LEWIDTH-NEXT:    [[BF_ASHR3:%.*]] = ashr i8 [[BF_SHL2]], 31044// LEWIDTH-NEXT:    [[BF_CAST4:%.*]] = sext i8 [[BF_ASHR3]] to i321045// LEWIDTH-NEXT:    [[ADD5:%.*]] = add nsw i32 [[ADD]], [[BF_CAST4]]1046// LEWIDTH-NEXT:    ret i32 [[ADD5]]1047//1048// BEWIDTH-LABEL: @st6_check_load(1049// BEWIDTH-NEXT:  entry:1050// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41051// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_LOAD]], 41052// BEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i321053// BEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 11054// BEWIDTH-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[B]], align 21055// BEWIDTH-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321056// BEWIDTH-NEXT:    [[ADD:%.*]] = add nsw i32 [[BF_CAST]], [[CONV]]1057// BEWIDTH-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 21058// BEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[C]], align 11059// BEWIDTH-NEXT:    [[BF_ASHR2:%.*]] = ashr i8 [[BF_LOAD1]], 31060// BEWIDTH-NEXT:    [[BF_CAST3:%.*]] = sext i8 [[BF_ASHR2]] to i321061// BEWIDTH-NEXT:    [[ADD4:%.*]] = add nsw i32 [[ADD]], [[BF_CAST3]]1062// BEWIDTH-NEXT:    ret i32 [[ADD4]]1063//1064// LEWIDTHNUM-LABEL: @st6_check_load(1065// LEWIDTHNUM-NEXT:  entry:1066// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41067// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 41068// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 41069// LEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i321070// LEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 11071// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[B]], align 21072// LEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321073// LEWIDTHNUM-NEXT:    [[ADD:%.*]] = add nsw i32 [[BF_CAST]], [[CONV]]1074// LEWIDTHNUM-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 21075// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[C]], align 11076// LEWIDTHNUM-NEXT:    [[BF_SHL2:%.*]] = shl i8 [[BF_LOAD1]], 31077// LEWIDTHNUM-NEXT:    [[BF_ASHR3:%.*]] = ashr i8 [[BF_SHL2]], 31078// LEWIDTHNUM-NEXT:    [[BF_CAST4:%.*]] = sext i8 [[BF_ASHR3]] to i321079// LEWIDTHNUM-NEXT:    [[ADD5:%.*]] = add nsw i32 [[ADD]], [[BF_CAST4]]1080// LEWIDTHNUM-NEXT:    ret i32 [[ADD5]]1081//1082// BEWIDTHNUM-LABEL: @st6_check_load(1083// BEWIDTHNUM-NEXT:  entry:1084// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41085// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_LOAD]], 41086// BEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i321087// BEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 11088// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[B]], align 21089// BEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321090// BEWIDTHNUM-NEXT:    [[ADD:%.*]] = add nsw i32 [[BF_CAST]], [[CONV]]1091// BEWIDTHNUM-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 21092// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[C]], align 11093// BEWIDTHNUM-NEXT:    [[BF_ASHR2:%.*]] = ashr i8 [[BF_LOAD1]], 31094// BEWIDTHNUM-NEXT:    [[BF_CAST3:%.*]] = sext i8 [[BF_ASHR2]] to i321095// BEWIDTHNUM-NEXT:    [[ADD4:%.*]] = add nsw i32 [[ADD]], [[BF_CAST3]]1096// BEWIDTHNUM-NEXT:    ret i32 [[ADD4]]1097//1098int st6_check_load(volatile struct st6 *m) {1099  int x = m->a;1100  x += m->b;1101  x += m->c;1102  return x;1103}1104 1105// LE-LABEL: @st6_check_store(1106// LE-NEXT:  entry:1107// LE-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 41108// LE-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -40961109// LE-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 11110// LE-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 41111// LE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 11112// LE-NEXT:    store i8 2, ptr [[B]], align 21113// LE-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 21114// LE-NEXT:    [[BF_LOAD1:%.*]] = load i8, ptr [[C]], align 11115// LE-NEXT:    [[BF_CLEAR2:%.*]] = and i8 [[BF_LOAD1]], -321116// LE-NEXT:    [[BF_SET3:%.*]] = or i8 [[BF_CLEAR2]], 31117// LE-NEXT:    store i8 [[BF_SET3]], ptr [[C]], align 11118// LE-NEXT:    ret void1119//1120// BE-LABEL: @st6_check_store(1121// BE-NEXT:  entry:1122// BE-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 41123// BE-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], 151124// BE-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 161125// BE-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 41126// BE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 11127// BE-NEXT:    store i8 2, ptr [[B]], align 21128// BE-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 21129// BE-NEXT:    [[BF_LOAD1:%.*]] = load i8, ptr [[C]], align 11130// BE-NEXT:    [[BF_CLEAR2:%.*]] = and i8 [[BF_LOAD1]], 71131// BE-NEXT:    [[BF_SET3:%.*]] = or i8 [[BF_CLEAR2]], 241132// BE-NEXT:    store i8 [[BF_SET3]], ptr [[C]], align 11133// BE-NEXT:    ret void1134//1135// LENUMLOADS-LABEL: @st6_check_store(1136// LENUMLOADS-NEXT:  entry:1137// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 41138// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -40961139// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 11140// LENUMLOADS-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 41141// LENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 11142// LENUMLOADS-NEXT:    store i8 2, ptr [[B]], align 21143// LENUMLOADS-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 21144// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load i8, ptr [[C]], align 11145// LENUMLOADS-NEXT:    [[BF_CLEAR2:%.*]] = and i8 [[BF_LOAD1]], -321146// LENUMLOADS-NEXT:    [[BF_SET3:%.*]] = or i8 [[BF_CLEAR2]], 31147// LENUMLOADS-NEXT:    store i8 [[BF_SET3]], ptr [[C]], align 11148// LENUMLOADS-NEXT:    ret void1149//1150// BENUMLOADS-LABEL: @st6_check_store(1151// BENUMLOADS-NEXT:  entry:1152// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 41153// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], 151154// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 161155// BENUMLOADS-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 41156// BENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 11157// BENUMLOADS-NEXT:    store i8 2, ptr [[B]], align 21158// BENUMLOADS-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 21159// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load i8, ptr [[C]], align 11160// BENUMLOADS-NEXT:    [[BF_CLEAR2:%.*]] = and i8 [[BF_LOAD1]], 71161// BENUMLOADS-NEXT:    [[BF_SET3:%.*]] = or i8 [[BF_CLEAR2]], 241162// BENUMLOADS-NEXT:    store i8 [[BF_SET3]], ptr [[C]], align 11163// BENUMLOADS-NEXT:    ret void1164//1165// LEWIDTH-LABEL: @st6_check_store(1166// LEWIDTH-NEXT:  entry:1167// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 41168// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -40961169// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 11170// LEWIDTH-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 41171// LEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 11172// LEWIDTH-NEXT:    store i8 2, ptr [[B]], align 21173// LEWIDTH-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 21174// LEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load i8, ptr [[C]], align 11175// LEWIDTH-NEXT:    [[BF_CLEAR2:%.*]] = and i8 [[BF_LOAD1]], -321176// LEWIDTH-NEXT:    [[BF_SET3:%.*]] = or i8 [[BF_CLEAR2]], 31177// LEWIDTH-NEXT:    store i8 [[BF_SET3]], ptr [[C]], align 11178// LEWIDTH-NEXT:    ret void1179//1180// BEWIDTH-LABEL: @st6_check_store(1181// BEWIDTH-NEXT:  entry:1182// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 41183// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], 151184// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 161185// BEWIDTH-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 41186// BEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 11187// BEWIDTH-NEXT:    store i8 2, ptr [[B]], align 21188// BEWIDTH-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 21189// BEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load i8, ptr [[C]], align 11190// BEWIDTH-NEXT:    [[BF_CLEAR2:%.*]] = and i8 [[BF_LOAD1]], 71191// BEWIDTH-NEXT:    [[BF_SET3:%.*]] = or i8 [[BF_CLEAR2]], 241192// BEWIDTH-NEXT:    store i8 [[BF_SET3]], ptr [[C]], align 11193// BEWIDTH-NEXT:    ret void1194//1195// LEWIDTHNUM-LABEL: @st6_check_store(1196// LEWIDTHNUM-NEXT:  entry:1197// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 41198// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -40961199// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 11200// LEWIDTHNUM-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 41201// LEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 11202// LEWIDTHNUM-NEXT:    store i8 2, ptr [[B]], align 21203// LEWIDTHNUM-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 21204// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load i8, ptr [[C]], align 11205// LEWIDTHNUM-NEXT:    [[BF_CLEAR2:%.*]] = and i8 [[BF_LOAD1]], -321206// LEWIDTHNUM-NEXT:    [[BF_SET3:%.*]] = or i8 [[BF_CLEAR2]], 31207// LEWIDTHNUM-NEXT:    store i8 [[BF_SET3]], ptr [[C]], align 11208// LEWIDTHNUM-NEXT:    ret void1209//1210// BEWIDTHNUM-LABEL: @st6_check_store(1211// BEWIDTHNUM-NEXT:  entry:1212// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[M:%.*]], align 41213// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], 151214// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 161215// BEWIDTHNUM-NEXT:    store i16 [[BF_SET]], ptr [[M]], align 41216// BEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6:%.*]], ptr [[M]], i32 0, i32 11217// BEWIDTHNUM-NEXT:    store i8 2, ptr [[B]], align 21218// BEWIDTHNUM-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST6]], ptr [[M]], i32 0, i32 21219// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load i8, ptr [[C]], align 11220// BEWIDTHNUM-NEXT:    [[BF_CLEAR2:%.*]] = and i8 [[BF_LOAD1]], 71221// BEWIDTHNUM-NEXT:    [[BF_SET3:%.*]] = or i8 [[BF_CLEAR2]], 241222// BEWIDTHNUM-NEXT:    store i8 [[BF_SET3]], ptr [[C]], align 11223// BEWIDTHNUM-NEXT:    ret void1224//1225void st6_check_store(struct st6 *m) {1226  m->a = 1;1227  m->b = 2;1228  m->c = 3;1229}1230 1231// Nested structs and bitfields.1232struct st7a {1233  char a;1234  int b : 5;1235};1236 1237struct st7b {1238  char x;1239  volatile struct st7a y;1240};1241 1242// LE-LABEL: @st7_check_load(1243// LE-NEXT:  entry:1244// LE-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01245// LE-NEXT:    [[TMP0:%.*]] = load i8, ptr [[X]], align 41246// LE-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321247// LE-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21248// LE-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01249// LE-NEXT:    [[TMP1:%.*]] = load volatile i8, ptr [[A]], align 41250// LE-NEXT:    [[CONV1:%.*]] = sext i8 [[TMP1]] to i321251// LE-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV]], [[CONV1]]1252// LE-NEXT:    [[Y2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21253// LE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y2]], i32 0, i32 11254// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11255// LE-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 31256// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 31257// LE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i321258// LE-NEXT:    [[ADD3:%.*]] = add nsw i32 [[ADD]], [[BF_CAST]]1259// LE-NEXT:    ret i32 [[ADD3]]1260//1261// BE-LABEL: @st7_check_load(1262// BE-NEXT:  entry:1263// BE-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01264// BE-NEXT:    [[TMP0:%.*]] = load i8, ptr [[X]], align 41265// BE-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321266// BE-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21267// BE-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01268// BE-NEXT:    [[TMP1:%.*]] = load volatile i8, ptr [[A]], align 41269// BE-NEXT:    [[CONV1:%.*]] = sext i8 [[TMP1]] to i321270// BE-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV]], [[CONV1]]1271// BE-NEXT:    [[Y2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21272// BE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y2]], i32 0, i32 11273// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11274// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 31275// BE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i321276// BE-NEXT:    [[ADD3:%.*]] = add nsw i32 [[ADD]], [[BF_CAST]]1277// BE-NEXT:    ret i32 [[ADD3]]1278//1279// LENUMLOADS-LABEL: @st7_check_load(1280// LENUMLOADS-NEXT:  entry:1281// LENUMLOADS-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01282// LENUMLOADS-NEXT:    [[TMP0:%.*]] = load i8, ptr [[X]], align 41283// LENUMLOADS-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321284// LENUMLOADS-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21285// LENUMLOADS-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01286// LENUMLOADS-NEXT:    [[TMP1:%.*]] = load volatile i8, ptr [[A]], align 41287// LENUMLOADS-NEXT:    [[CONV1:%.*]] = sext i8 [[TMP1]] to i321288// LENUMLOADS-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV]], [[CONV1]]1289// LENUMLOADS-NEXT:    [[Y2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21290// LENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y2]], i32 0, i32 11291// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11292// LENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 31293// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 31294// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i321295// LENUMLOADS-NEXT:    [[ADD3:%.*]] = add nsw i32 [[ADD]], [[BF_CAST]]1296// LENUMLOADS-NEXT:    ret i32 [[ADD3]]1297//1298// BENUMLOADS-LABEL: @st7_check_load(1299// BENUMLOADS-NEXT:  entry:1300// BENUMLOADS-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01301// BENUMLOADS-NEXT:    [[TMP0:%.*]] = load i8, ptr [[X]], align 41302// BENUMLOADS-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321303// BENUMLOADS-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21304// BENUMLOADS-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01305// BENUMLOADS-NEXT:    [[TMP1:%.*]] = load volatile i8, ptr [[A]], align 41306// BENUMLOADS-NEXT:    [[CONV1:%.*]] = sext i8 [[TMP1]] to i321307// BENUMLOADS-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV]], [[CONV1]]1308// BENUMLOADS-NEXT:    [[Y2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21309// BENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y2]], i32 0, i32 11310// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11311// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 31312// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i321313// BENUMLOADS-NEXT:    [[ADD3:%.*]] = add nsw i32 [[ADD]], [[BF_CAST]]1314// BENUMLOADS-NEXT:    ret i32 [[ADD3]]1315//1316// LEWIDTH-LABEL: @st7_check_load(1317// LEWIDTH-NEXT:  entry:1318// LEWIDTH-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01319// LEWIDTH-NEXT:    [[TMP0:%.*]] = load i8, ptr [[X]], align 41320// LEWIDTH-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321321// LEWIDTH-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21322// LEWIDTH-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01323// LEWIDTH-NEXT:    [[TMP1:%.*]] = load volatile i8, ptr [[A]], align 41324// LEWIDTH-NEXT:    [[CONV1:%.*]] = sext i8 [[TMP1]] to i321325// LEWIDTH-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV]], [[CONV1]]1326// LEWIDTH-NEXT:    [[Y2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21327// LEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y2]], i32 0, i32 11328// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11329// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 31330// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 31331// LEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i321332// LEWIDTH-NEXT:    [[ADD3:%.*]] = add nsw i32 [[ADD]], [[BF_CAST]]1333// LEWIDTH-NEXT:    ret i32 [[ADD3]]1334//1335// BEWIDTH-LABEL: @st7_check_load(1336// BEWIDTH-NEXT:  entry:1337// BEWIDTH-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01338// BEWIDTH-NEXT:    [[TMP0:%.*]] = load i8, ptr [[X]], align 41339// BEWIDTH-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321340// BEWIDTH-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21341// BEWIDTH-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01342// BEWIDTH-NEXT:    [[TMP1:%.*]] = load volatile i8, ptr [[A]], align 41343// BEWIDTH-NEXT:    [[CONV1:%.*]] = sext i8 [[TMP1]] to i321344// BEWIDTH-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV]], [[CONV1]]1345// BEWIDTH-NEXT:    [[Y2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21346// BEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y2]], i32 0, i32 11347// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11348// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 31349// BEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i321350// BEWIDTH-NEXT:    [[ADD3:%.*]] = add nsw i32 [[ADD]], [[BF_CAST]]1351// BEWIDTH-NEXT:    ret i32 [[ADD3]]1352//1353// LEWIDTHNUM-LABEL: @st7_check_load(1354// LEWIDTHNUM-NEXT:  entry:1355// LEWIDTHNUM-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01356// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = load i8, ptr [[X]], align 41357// LEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321358// LEWIDTHNUM-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21359// LEWIDTHNUM-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01360// LEWIDTHNUM-NEXT:    [[TMP1:%.*]] = load volatile i8, ptr [[A]], align 41361// LEWIDTHNUM-NEXT:    [[CONV1:%.*]] = sext i8 [[TMP1]] to i321362// LEWIDTHNUM-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV]], [[CONV1]]1363// LEWIDTHNUM-NEXT:    [[Y2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21364// LEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y2]], i32 0, i32 11365// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11366// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i8 [[BF_LOAD]], 31367// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_SHL]], 31368// LEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i321369// LEWIDTHNUM-NEXT:    [[ADD3:%.*]] = add nsw i32 [[ADD]], [[BF_CAST]]1370// LEWIDTHNUM-NEXT:    ret i32 [[ADD3]]1371//1372// BEWIDTHNUM-LABEL: @st7_check_load(1373// BEWIDTHNUM-NEXT:  entry:1374// BEWIDTHNUM-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01375// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = load i8, ptr [[X]], align 41376// BEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321377// BEWIDTHNUM-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21378// BEWIDTHNUM-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01379// BEWIDTHNUM-NEXT:    [[TMP1:%.*]] = load volatile i8, ptr [[A]], align 41380// BEWIDTHNUM-NEXT:    [[CONV1:%.*]] = sext i8 [[TMP1]] to i321381// BEWIDTHNUM-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV]], [[CONV1]]1382// BEWIDTHNUM-NEXT:    [[Y2:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21383// BEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y2]], i32 0, i32 11384// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11385// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i8 [[BF_LOAD]], 31386// BEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_ASHR]] to i321387// BEWIDTHNUM-NEXT:    [[ADD3:%.*]] = add nsw i32 [[ADD]], [[BF_CAST]]1388// BEWIDTHNUM-NEXT:    ret i32 [[ADD3]]1389//1390int st7_check_load(struct st7b *m) {1391  int r = m->x;1392  r += m->y.a;1393  r += m->y.b;1394  return r;1395}1396 1397// LE-LABEL: @st7_check_store(1398// LE-NEXT:  entry:1399// LE-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01400// LE-NEXT:    store i8 1, ptr [[X]], align 41401// LE-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21402// LE-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01403// LE-NEXT:    store volatile i8 2, ptr [[A]], align 41404// LE-NEXT:    [[Y1:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21405// LE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y1]], i32 0, i32 11406// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11407// LE-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -321408// LE-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 31409// LE-NEXT:    store volatile i8 [[BF_SET]], ptr [[B]], align 11410// LE-NEXT:    ret void1411//1412// BE-LABEL: @st7_check_store(1413// BE-NEXT:  entry:1414// BE-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01415// BE-NEXT:    store i8 1, ptr [[X]], align 41416// BE-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21417// BE-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01418// BE-NEXT:    store volatile i8 2, ptr [[A]], align 41419// BE-NEXT:    [[Y1:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21420// BE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y1]], i32 0, i32 11421// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11422// BE-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 71423// BE-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 241424// BE-NEXT:    store volatile i8 [[BF_SET]], ptr [[B]], align 11425// BE-NEXT:    ret void1426//1427// LENUMLOADS-LABEL: @st7_check_store(1428// LENUMLOADS-NEXT:  entry:1429// LENUMLOADS-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01430// LENUMLOADS-NEXT:    store i8 1, ptr [[X]], align 41431// LENUMLOADS-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21432// LENUMLOADS-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01433// LENUMLOADS-NEXT:    store volatile i8 2, ptr [[A]], align 41434// LENUMLOADS-NEXT:    [[Y1:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21435// LENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y1]], i32 0, i32 11436// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11437// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -321438// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 31439// LENUMLOADS-NEXT:    store volatile i8 [[BF_SET]], ptr [[B]], align 11440// LENUMLOADS-NEXT:    ret void1441//1442// BENUMLOADS-LABEL: @st7_check_store(1443// BENUMLOADS-NEXT:  entry:1444// BENUMLOADS-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01445// BENUMLOADS-NEXT:    store i8 1, ptr [[X]], align 41446// BENUMLOADS-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21447// BENUMLOADS-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01448// BENUMLOADS-NEXT:    store volatile i8 2, ptr [[A]], align 41449// BENUMLOADS-NEXT:    [[Y1:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21450// BENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y1]], i32 0, i32 11451// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11452// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 71453// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 241454// BENUMLOADS-NEXT:    store volatile i8 [[BF_SET]], ptr [[B]], align 11455// BENUMLOADS-NEXT:    ret void1456//1457// LEWIDTH-LABEL: @st7_check_store(1458// LEWIDTH-NEXT:  entry:1459// LEWIDTH-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01460// LEWIDTH-NEXT:    store i8 1, ptr [[X]], align 41461// LEWIDTH-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21462// LEWIDTH-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01463// LEWIDTH-NEXT:    store volatile i8 2, ptr [[A]], align 41464// LEWIDTH-NEXT:    [[Y1:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21465// LEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y1]], i32 0, i32 11466// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11467// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -321468// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 31469// LEWIDTH-NEXT:    store volatile i8 [[BF_SET]], ptr [[B]], align 11470// LEWIDTH-NEXT:    ret void1471//1472// BEWIDTH-LABEL: @st7_check_store(1473// BEWIDTH-NEXT:  entry:1474// BEWIDTH-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01475// BEWIDTH-NEXT:    store i8 1, ptr [[X]], align 41476// BEWIDTH-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21477// BEWIDTH-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01478// BEWIDTH-NEXT:    store volatile i8 2, ptr [[A]], align 41479// BEWIDTH-NEXT:    [[Y1:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21480// BEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y1]], i32 0, i32 11481// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11482// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 71483// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 241484// BEWIDTH-NEXT:    store volatile i8 [[BF_SET]], ptr [[B]], align 11485// BEWIDTH-NEXT:    ret void1486//1487// LEWIDTHNUM-LABEL: @st7_check_store(1488// LEWIDTHNUM-NEXT:  entry:1489// LEWIDTHNUM-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01490// LEWIDTHNUM-NEXT:    store i8 1, ptr [[X]], align 41491// LEWIDTHNUM-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21492// LEWIDTHNUM-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01493// LEWIDTHNUM-NEXT:    store volatile i8 2, ptr [[A]], align 41494// LEWIDTHNUM-NEXT:    [[Y1:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21495// LEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y1]], i32 0, i32 11496// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11497// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], -321498// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 31499// LEWIDTHNUM-NEXT:    store volatile i8 [[BF_SET]], ptr [[B]], align 11500// LEWIDTHNUM-NEXT:    ret void1501//1502// BEWIDTHNUM-LABEL: @st7_check_store(1503// BEWIDTHNUM-NEXT:  entry:1504// BEWIDTHNUM-NEXT:    [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B:%.*]], ptr [[M:%.*]], i32 0, i32 01505// BEWIDTHNUM-NEXT:    store i8 1, ptr [[X]], align 41506// BEWIDTHNUM-NEXT:    [[Y:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21507// BEWIDTHNUM-NEXT:    [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A:%.*]], ptr [[Y]], i32 0, i32 01508// BEWIDTHNUM-NEXT:    store volatile i8 2, ptr [[A]], align 41509// BEWIDTHNUM-NEXT:    [[Y1:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7B]], ptr [[M]], i32 0, i32 21510// BEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST7A]], ptr [[Y1]], i32 0, i32 11511// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 11512// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i8 [[BF_LOAD]], 71513// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i8 [[BF_CLEAR]], 241514// BEWIDTHNUM-NEXT:    store volatile i8 [[BF_SET]], ptr [[B]], align 11515// BEWIDTHNUM-NEXT:    ret void1516//1517void st7_check_store(struct st7b *m) {1518  m->x = 1;1519  m->y.a = 2;1520  m->y.b = 3;1521}1522 1523// Check overflowing assignments to bitfields.1524struct st8 {1525  unsigned f : 16;1526};1527 1528// LE-LABEL: @st8_check_assignment(1529// LE-NEXT:  entry:1530// LE-NEXT:    store i16 -1, ptr [[M:%.*]], align 41531// LE-NEXT:    ret i32 655351532//1533// BE-LABEL: @st8_check_assignment(1534// BE-NEXT:  entry:1535// BE-NEXT:    store i16 -1, ptr [[M:%.*]], align 41536// BE-NEXT:    ret i32 655351537//1538// LENUMLOADS-LABEL: @st8_check_assignment(1539// LENUMLOADS-NEXT:  entry:1540// LENUMLOADS-NEXT:    store i16 -1, ptr [[M:%.*]], align 41541// LENUMLOADS-NEXT:    ret i32 655351542//1543// BENUMLOADS-LABEL: @st8_check_assignment(1544// BENUMLOADS-NEXT:  entry:1545// BENUMLOADS-NEXT:    store i16 -1, ptr [[M:%.*]], align 41546// BENUMLOADS-NEXT:    ret i32 655351547//1548// LEWIDTH-LABEL: @st8_check_assignment(1549// LEWIDTH-NEXT:  entry:1550// LEWIDTH-NEXT:    store i16 -1, ptr [[M:%.*]], align 41551// LEWIDTH-NEXT:    ret i32 655351552//1553// BEWIDTH-LABEL: @st8_check_assignment(1554// BEWIDTH-NEXT:  entry:1555// BEWIDTH-NEXT:    store i16 -1, ptr [[M:%.*]], align 41556// BEWIDTH-NEXT:    ret i32 655351557//1558// LEWIDTHNUM-LABEL: @st8_check_assignment(1559// LEWIDTHNUM-NEXT:  entry:1560// LEWIDTHNUM-NEXT:    store i16 -1, ptr [[M:%.*]], align 41561// LEWIDTHNUM-NEXT:    ret i32 655351562//1563// BEWIDTHNUM-LABEL: @st8_check_assignment(1564// BEWIDTHNUM-NEXT:  entry:1565// BEWIDTHNUM-NEXT:    store i16 -1, ptr [[M:%.*]], align 41566// BEWIDTHNUM-NEXT:    ret i32 655351567//1568int st8_check_assignment(struct st8 *m) {1569  return m->f = 0xffff;1570}1571 1572struct st9{1573  int f : 8;1574};1575 1576// LE-LABEL: @read_st9(1577// LE-NEXT:  entry:1578// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 41579// LE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i321580// LE-NEXT:    ret i32 [[BF_CAST]]1581//1582// BE-LABEL: @read_st9(1583// BE-NEXT:  entry:1584// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 41585// BE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i321586// BE-NEXT:    ret i32 [[BF_CAST]]1587//1588// LENUMLOADS-LABEL: @read_st9(1589// LENUMLOADS-NEXT:  entry:1590// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 41591// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i321592// LENUMLOADS-NEXT:    ret i32 [[BF_CAST]]1593//1594// BENUMLOADS-LABEL: @read_st9(1595// BENUMLOADS-NEXT:  entry:1596// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 41597// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i321598// BENUMLOADS-NEXT:    ret i32 [[BF_CAST]]1599//1600// LEWIDTH-LABEL: @read_st9(1601// LEWIDTH-NEXT:  entry:1602// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41603// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 241604// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 241605// LEWIDTH-NEXT:    ret i32 [[BF_ASHR]]1606//1607// BEWIDTH-LABEL: @read_st9(1608// BEWIDTH-NEXT:  entry:1609// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41610// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 241611// BEWIDTH-NEXT:    ret i32 [[BF_ASHR]]1612//1613// LEWIDTHNUM-LABEL: @read_st9(1614// LEWIDTHNUM-NEXT:  entry:1615// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41616// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 241617// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 241618// LEWIDTHNUM-NEXT:    ret i32 [[BF_ASHR]]1619//1620// BEWIDTHNUM-LABEL: @read_st9(1621// BEWIDTHNUM-NEXT:  entry:1622// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41623// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 241624// BEWIDTHNUM-NEXT:    ret i32 [[BF_ASHR]]1625//1626int read_st9(volatile struct st9 *m) {1627  return m->f;1628}1629 1630// LE-LABEL: @store_st9(1631// LE-NEXT:  entry:1632// LE-NEXT:    store volatile i8 1, ptr [[M:%.*]], align 41633// LE-NEXT:    ret void1634//1635// BE-LABEL: @store_st9(1636// BE-NEXT:  entry:1637// BE-NEXT:    store volatile i8 1, ptr [[M:%.*]], align 41638// BE-NEXT:    ret void1639//1640// LENUMLOADS-LABEL: @store_st9(1641// LENUMLOADS-NEXT:  entry:1642// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 41643// LENUMLOADS-NEXT:    store volatile i8 1, ptr [[M]], align 41644// LENUMLOADS-NEXT:    ret void1645//1646// BENUMLOADS-LABEL: @store_st9(1647// BENUMLOADS-NEXT:  entry:1648// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 41649// BENUMLOADS-NEXT:    store volatile i8 1, ptr [[M]], align 41650// BENUMLOADS-NEXT:    ret void1651//1652// LEWIDTH-LABEL: @store_st9(1653// LEWIDTH-NEXT:  entry:1654// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41655// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -2561656// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 11657// LEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 41658// LEWIDTH-NEXT:    ret void1659//1660// BEWIDTH-LABEL: @store_st9(1661// BEWIDTH-NEXT:  entry:1662// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41663// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], 167772151664// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 167772161665// BEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 41666// BEWIDTH-NEXT:    ret void1667//1668// LEWIDTHNUM-LABEL: @store_st9(1669// LEWIDTHNUM-NEXT:  entry:1670// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41671// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -2561672// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 11673// LEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 41674// LEWIDTHNUM-NEXT:    ret void1675//1676// BEWIDTHNUM-LABEL: @store_st9(1677// BEWIDTHNUM-NEXT:  entry:1678// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41679// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], 167772151680// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 167772161681// BEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 41682// BEWIDTHNUM-NEXT:    ret void1683//1684void store_st9(volatile struct st9 *m) {1685  m->f = 1;1686}1687 1688// LE-LABEL: @increment_st9(1689// LE-NEXT:  entry:1690// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 41691// LE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i321692// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 11693// LE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i81694// LE-NEXT:    store volatile i8 [[TMP0]], ptr [[M]], align 41695// LE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i321696// LE-NEXT:    ret void1697//1698// BE-LABEL: @increment_st9(1699// BE-NEXT:  entry:1700// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 41701// BE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i321702// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 11703// BE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i81704// BE-NEXT:    store volatile i8 [[TMP0]], ptr [[M]], align 41705// BE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i321706// BE-NEXT:    ret void1707//1708// LENUMLOADS-LABEL: @increment_st9(1709// LENUMLOADS-NEXT:  entry:1710// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 41711// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i321712// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 11713// LENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i81714// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[M]], align 41715// LENUMLOADS-NEXT:    store volatile i8 [[TMP0]], ptr [[M]], align 41716// LENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i321717// LENUMLOADS-NEXT:    ret void1718//1719// BENUMLOADS-LABEL: @increment_st9(1720// BENUMLOADS-NEXT:  entry:1721// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[M:%.*]], align 41722// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i321723// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 11724// BENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i81725// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[M]], align 41726// BENUMLOADS-NEXT:    store volatile i8 [[TMP0]], ptr [[M]], align 41727// BENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i321728// BENUMLOADS-NEXT:    ret void1729//1730// LEWIDTH-LABEL: @increment_st9(1731// LEWIDTH-NEXT:  entry:1732// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41733// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 241734// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 241735// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 11736// LEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 41737// LEWIDTH-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2551738// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -2561739// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_VALUE]]1740// LEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 41741// LEWIDTH-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 241742// LEWIDTH-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 241743// LEWIDTH-NEXT:    ret void1744//1745// BEWIDTH-LABEL: @increment_st9(1746// BEWIDTH-NEXT:  entry:1747// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41748// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 241749// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 11750// BEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 41751// BEWIDTH-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2551752// BEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_VALUE]], 241753// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], 167772151754// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL]]1755// BEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 41756// BEWIDTH-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 241757// BEWIDTH-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 241758// BEWIDTH-NEXT:    ret void1759//1760// LEWIDTHNUM-LABEL: @increment_st9(1761// LEWIDTHNUM-NEXT:  entry:1762// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41763// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 241764// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 241765// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 11766// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 41767// LEWIDTHNUM-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2551768// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -2561769// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_VALUE]]1770// LEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 41771// LEWIDTHNUM-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 241772// LEWIDTHNUM-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 241773// LEWIDTHNUM-NEXT:    ret void1774//1775// BEWIDTHNUM-LABEL: @increment_st9(1776// BEWIDTHNUM-NEXT:  entry:1777// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41778// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 241779// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 11780// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 41781// BEWIDTHNUM-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2551782// BEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_VALUE]], 241783// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], 167772151784// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL]]1785// BEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 41786// BEWIDTHNUM-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 241787// BEWIDTHNUM-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 241788// BEWIDTHNUM-NEXT:    ret void1789//1790void increment_st9(volatile struct st9 *m) {1791  ++m->f;1792}1793 1794struct st10{1795  int e : 1;1796  int f : 8;1797};1798 1799// LE-LABEL: @read_st10(1800// LE-NEXT:  entry:1801// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41802// LE-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 71803// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 81804// LE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i321805// LE-NEXT:    ret i32 [[BF_CAST]]1806//1807// BE-LABEL: @read_st10(1808// BE-NEXT:  entry:1809// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41810// BE-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 11811// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 81812// BE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i321813// BE-NEXT:    ret i32 [[BF_CAST]]1814//1815// LENUMLOADS-LABEL: @read_st10(1816// LENUMLOADS-NEXT:  entry:1817// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41818// LENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 71819// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 81820// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i321821// LENUMLOADS-NEXT:    ret i32 [[BF_CAST]]1822//1823// BENUMLOADS-LABEL: @read_st10(1824// BENUMLOADS-NEXT:  entry:1825// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41826// BENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 11827// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 81828// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i321829// BENUMLOADS-NEXT:    ret i32 [[BF_CAST]]1830//1831// LEWIDTH-LABEL: @read_st10(1832// LEWIDTH-NEXT:  entry:1833// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41834// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 231835// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 241836// LEWIDTH-NEXT:    ret i32 [[BF_ASHR]]1837//1838// BEWIDTH-LABEL: @read_st10(1839// BEWIDTH-NEXT:  entry:1840// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41841// BEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 11842// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 241843// BEWIDTH-NEXT:    ret i32 [[BF_ASHR]]1844//1845// LEWIDTHNUM-LABEL: @read_st10(1846// LEWIDTHNUM-NEXT:  entry:1847// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41848// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 231849// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 241850// LEWIDTHNUM-NEXT:    ret i32 [[BF_ASHR]]1851//1852// BEWIDTHNUM-LABEL: @read_st10(1853// BEWIDTHNUM-NEXT:  entry:1854// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41855// BEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 11856// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 241857// BEWIDTHNUM-NEXT:    ret i32 [[BF_ASHR]]1858//1859int read_st10(volatile struct st10 *m) {1860  return m->f;1861}1862 1863// LE-LABEL: @store_st10(1864// LE-NEXT:  entry:1865// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41866// LE-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -5111867// LE-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 21868// LE-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 41869// LE-NEXT:    ret void1870//1871// BE-LABEL: @store_st10(1872// BE-NEXT:  entry:1873// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41874// BE-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -326411875// BE-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1281876// BE-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 41877// BE-NEXT:    ret void1878//1879// LENUMLOADS-LABEL: @store_st10(1880// LENUMLOADS-NEXT:  entry:1881// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41882// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -5111883// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 21884// LENUMLOADS-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 41885// LENUMLOADS-NEXT:    ret void1886//1887// BENUMLOADS-LABEL: @store_st10(1888// BENUMLOADS-NEXT:  entry:1889// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41890// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD]], -326411891// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], 1281892// BENUMLOADS-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 41893// BENUMLOADS-NEXT:    ret void1894//1895// LEWIDTH-LABEL: @store_st10(1896// LEWIDTH-NEXT:  entry:1897// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41898// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -5111899// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 21900// LEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 41901// LEWIDTH-NEXT:    ret void1902//1903// BEWIDTH-LABEL: @store_st10(1904// BEWIDTH-NEXT:  entry:1905// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41906// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -21390950411907// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 83886081908// BEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 41909// BEWIDTH-NEXT:    ret void1910//1911// LEWIDTHNUM-LABEL: @store_st10(1912// LEWIDTHNUM-NEXT:  entry:1913// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41914// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -5111915// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 21916// LEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 41917// LEWIDTHNUM-NEXT:    ret void1918//1919// BEWIDTHNUM-LABEL: @store_st10(1920// BEWIDTHNUM-NEXT:  entry:1921// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 41922// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -21390950411923// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 83886081924// BEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 41925// BEWIDTHNUM-NEXT:    ret void1926//1927void store_st10(volatile struct st10 *m) {1928  m->f = 1;1929}1930 1931// LE-LABEL: @increment_st10(1932// LE-NEXT:  entry:1933// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41934// LE-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 71935// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 81936// LE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i321937// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 11938// LE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i161939// LE-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[M]], align 41940// LE-NEXT:    [[BF_VALUE:%.*]] = and i16 [[TMP0]], 2551941// LE-NEXT:    [[BF_SHL2:%.*]] = shl i16 [[BF_VALUE]], 11942// LE-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD1]], -5111943// LE-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], [[BF_SHL2]]1944// LE-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 41945// LE-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i16 [[BF_VALUE]], 81946// LE-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i16 [[BF_RESULT_SHL]], 81947// LE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[BF_RESULT_ASHR]] to i321948// LE-NEXT:    ret void1949//1950// BE-LABEL: @increment_st10(1951// BE-NEXT:  entry:1952// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41953// BE-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 11954// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 81955// BE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i321956// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 11957// BE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i161958// BE-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[M]], align 41959// BE-NEXT:    [[BF_VALUE:%.*]] = and i16 [[TMP0]], 2551960// BE-NEXT:    [[BF_SHL2:%.*]] = shl i16 [[BF_VALUE]], 71961// BE-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD1]], -326411962// BE-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], [[BF_SHL2]]1963// BE-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 41964// BE-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i16 [[BF_VALUE]], 81965// BE-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i16 [[BF_RESULT_SHL]], 81966// BE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[BF_RESULT_ASHR]] to i321967// BE-NEXT:    ret void1968//1969// LENUMLOADS-LABEL: @increment_st10(1970// LENUMLOADS-NEXT:  entry:1971// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41972// LENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 71973// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 81974// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i321975// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 11976// LENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i161977// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[M]], align 41978// LENUMLOADS-NEXT:    [[BF_VALUE:%.*]] = and i16 [[TMP0]], 2551979// LENUMLOADS-NEXT:    [[BF_SHL2:%.*]] = shl i16 [[BF_VALUE]], 11980// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD1]], -5111981// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], [[BF_SHL2]]1982// LENUMLOADS-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 41983// LENUMLOADS-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i16 [[BF_VALUE]], 81984// LENUMLOADS-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i16 [[BF_RESULT_SHL]], 81985// LENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[BF_RESULT_ASHR]] to i321986// LENUMLOADS-NEXT:    ret void1987//1988// BENUMLOADS-LABEL: @increment_st10(1989// BENUMLOADS-NEXT:  entry:1990// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[M:%.*]], align 41991// BENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 11992// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 81993// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_ASHR]] to i321994// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 11995// BENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i161996// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[M]], align 41997// BENUMLOADS-NEXT:    [[BF_VALUE:%.*]] = and i16 [[TMP0]], 2551998// BENUMLOADS-NEXT:    [[BF_SHL2:%.*]] = shl i16 [[BF_VALUE]], 71999// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD1]], -326412000// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], [[BF_SHL2]]2001// BENUMLOADS-NEXT:    store volatile i16 [[BF_SET]], ptr [[M]], align 42002// BENUMLOADS-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i16 [[BF_VALUE]], 82003// BENUMLOADS-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i16 [[BF_RESULT_SHL]], 82004// BENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[BF_RESULT_ASHR]] to i322005// BENUMLOADS-NEXT:    ret void2006//2007// LEWIDTH-LABEL: @increment_st10(2008// LEWIDTH-NEXT:  entry:2009// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42010// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 232011// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 242012// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12013// LEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42014// LEWIDTH-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2552015// LEWIDTH-NEXT:    [[BF_SHL2:%.*]] = shl i32 [[BF_VALUE]], 12016// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -5112017// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL2]]2018// LEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42019// LEWIDTH-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 242020// LEWIDTH-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 242021// LEWIDTH-NEXT:    ret void2022//2023// BEWIDTH-LABEL: @increment_st10(2024// BEWIDTH-NEXT:  entry:2025// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42026// BEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 12027// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 242028// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12029// BEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42030// BEWIDTH-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2552031// BEWIDTH-NEXT:    [[BF_SHL2:%.*]] = shl i32 [[BF_VALUE]], 232032// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -21390950412033// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL2]]2034// BEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42035// BEWIDTH-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 242036// BEWIDTH-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 242037// BEWIDTH-NEXT:    ret void2038//2039// LEWIDTHNUM-LABEL: @increment_st10(2040// LEWIDTHNUM-NEXT:  entry:2041// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42042// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 232043// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 242044// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12045// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42046// LEWIDTHNUM-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2552047// LEWIDTHNUM-NEXT:    [[BF_SHL2:%.*]] = shl i32 [[BF_VALUE]], 12048// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -5112049// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL2]]2050// LEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42051// LEWIDTHNUM-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 242052// LEWIDTHNUM-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 242053// LEWIDTHNUM-NEXT:    ret void2054//2055// BEWIDTHNUM-LABEL: @increment_st10(2056// BEWIDTHNUM-NEXT:  entry:2057// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42058// BEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 12059// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 242060// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12061// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42062// BEWIDTHNUM-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2552063// BEWIDTHNUM-NEXT:    [[BF_SHL2:%.*]] = shl i32 [[BF_VALUE]], 232064// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -21390950412065// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL2]]2066// BEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42067// BEWIDTHNUM-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 242068// BEWIDTHNUM-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 242069// BEWIDTHNUM-NEXT:    ret void2070//2071void increment_st10(volatile struct st10 *m) {2072  ++m->f;2073}2074 2075struct st11{2076  char e;2077  int f : 16;2078};2079 2080// LE-LABEL: @read_st11(2081// LE-NEXT:  entry:2082// LE-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12083// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12084// LE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322085// LE-NEXT:    ret i32 [[BF_CAST]]2086//2087// BE-LABEL: @read_st11(2088// BE-NEXT:  entry:2089// BE-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12090// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12091// BE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322092// BE-NEXT:    ret i32 [[BF_CAST]]2093//2094// LENUMLOADS-LABEL: @read_st11(2095// LENUMLOADS-NEXT:  entry:2096// LENUMLOADS-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12097// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12098// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322099// LENUMLOADS-NEXT:    ret i32 [[BF_CAST]]2100//2101// BENUMLOADS-LABEL: @read_st11(2102// BENUMLOADS-NEXT:  entry:2103// BENUMLOADS-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12104// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12105// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322106// BENUMLOADS-NEXT:    ret i32 [[BF_CAST]]2107//2108// LEWIDTH-LABEL: @read_st11(2109// LEWIDTH-NEXT:  entry:2110// LEWIDTH-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12111// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12112// LEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322113// LEWIDTH-NEXT:    ret i32 [[BF_CAST]]2114//2115// BEWIDTH-LABEL: @read_st11(2116// BEWIDTH-NEXT:  entry:2117// BEWIDTH-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12118// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12119// BEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322120// BEWIDTH-NEXT:    ret i32 [[BF_CAST]]2121//2122// LEWIDTHNUM-LABEL: @read_st11(2123// LEWIDTHNUM-NEXT:  entry:2124// LEWIDTHNUM-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12125// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12126// LEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322127// LEWIDTHNUM-NEXT:    ret i32 [[BF_CAST]]2128//2129// BEWIDTHNUM-LABEL: @read_st11(2130// BEWIDTHNUM-NEXT:  entry:2131// BEWIDTHNUM-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12132// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12133// BEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322134// BEWIDTHNUM-NEXT:    ret i32 [[BF_CAST]]2135//2136int read_st11(volatile struct st11 *m) {2137  return m->f;2138}2139 2140// LE-LABEL: @store_st11(2141// LE-NEXT:  entry:2142// LE-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12143// LE-NEXT:    store volatile i16 1, ptr [[F]], align 12144// LE-NEXT:    ret void2145//2146// BE-LABEL: @store_st11(2147// BE-NEXT:  entry:2148// BE-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12149// BE-NEXT:    store volatile i16 1, ptr [[F]], align 12150// BE-NEXT:    ret void2151//2152// LENUMLOADS-LABEL: @store_st11(2153// LENUMLOADS-NEXT:  entry:2154// LENUMLOADS-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12155// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12156// LENUMLOADS-NEXT:    store volatile i16 1, ptr [[F]], align 12157// LENUMLOADS-NEXT:    ret void2158//2159// BENUMLOADS-LABEL: @store_st11(2160// BENUMLOADS-NEXT:  entry:2161// BENUMLOADS-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12162// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12163// BENUMLOADS-NEXT:    store volatile i16 1, ptr [[F]], align 12164// BENUMLOADS-NEXT:    ret void2165//2166// LEWIDTH-LABEL: @store_st11(2167// LEWIDTH-NEXT:  entry:2168// LEWIDTH-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12169// LEWIDTH-NEXT:    store volatile i16 1, ptr [[F]], align 12170// LEWIDTH-NEXT:    ret void2171//2172// BEWIDTH-LABEL: @store_st11(2173// BEWIDTH-NEXT:  entry:2174// BEWIDTH-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12175// BEWIDTH-NEXT:    store volatile i16 1, ptr [[F]], align 12176// BEWIDTH-NEXT:    ret void2177//2178// LEWIDTHNUM-LABEL: @store_st11(2179// LEWIDTHNUM-NEXT:  entry:2180// LEWIDTHNUM-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12181// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12182// LEWIDTHNUM-NEXT:    store volatile i16 1, ptr [[F]], align 12183// LEWIDTHNUM-NEXT:    ret void2184//2185// BEWIDTHNUM-LABEL: @store_st11(2186// BEWIDTHNUM-NEXT:  entry:2187// BEWIDTHNUM-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12188// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12189// BEWIDTHNUM-NEXT:    store volatile i16 1, ptr [[F]], align 12190// BEWIDTHNUM-NEXT:    ret void2191//2192void store_st11(volatile struct st11 *m) {2193  m->f = 1;2194}2195 2196// LE-LABEL: @increment_st11(2197// LE-NEXT:  entry:2198// LE-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12199// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12200// LE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322201// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 12202// LE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i162203// LE-NEXT:    store volatile i16 [[TMP0]], ptr [[F]], align 12204// LE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i322205// LE-NEXT:    ret void2206//2207// BE-LABEL: @increment_st11(2208// BE-NEXT:  entry:2209// BE-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12210// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12211// BE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322212// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 12213// BE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i162214// BE-NEXT:    store volatile i16 [[TMP0]], ptr [[F]], align 12215// BE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i322216// BE-NEXT:    ret void2217//2218// LENUMLOADS-LABEL: @increment_st11(2219// LENUMLOADS-NEXT:  entry:2220// LENUMLOADS-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12221// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12222// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322223// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 12224// LENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i162225// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[F]], align 12226// LENUMLOADS-NEXT:    store volatile i16 [[TMP0]], ptr [[F]], align 12227// LENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i322228// LENUMLOADS-NEXT:    ret void2229//2230// BENUMLOADS-LABEL: @increment_st11(2231// BENUMLOADS-NEXT:  entry:2232// BENUMLOADS-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12233// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12234// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322235// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 12236// BENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i162237// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[F]], align 12238// BENUMLOADS-NEXT:    store volatile i16 [[TMP0]], ptr [[F]], align 12239// BENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i322240// BENUMLOADS-NEXT:    ret void2241//2242// LEWIDTH-LABEL: @increment_st11(2243// LEWIDTH-NEXT:  entry:2244// LEWIDTH-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12245// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12246// LEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322247// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 12248// LEWIDTH-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i162249// LEWIDTH-NEXT:    store volatile i16 [[TMP0]], ptr [[F]], align 12250// LEWIDTH-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i322251// LEWIDTH-NEXT:    ret void2252//2253// BEWIDTH-LABEL: @increment_st11(2254// BEWIDTH-NEXT:  entry:2255// BEWIDTH-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12256// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12257// BEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322258// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 12259// BEWIDTH-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i162260// BEWIDTH-NEXT:    store volatile i16 [[TMP0]], ptr [[F]], align 12261// BEWIDTH-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i322262// BEWIDTH-NEXT:    ret void2263//2264// LEWIDTHNUM-LABEL: @increment_st11(2265// LEWIDTHNUM-NEXT:  entry:2266// LEWIDTHNUM-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12267// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12268// LEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322269// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 12270// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i162271// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[F]], align 12272// LEWIDTHNUM-NEXT:    store volatile i16 [[TMP0]], ptr [[F]], align 12273// LEWIDTHNUM-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i322274// LEWIDTHNUM-NEXT:    ret void2275//2276// BEWIDTHNUM-LABEL: @increment_st11(2277// BEWIDTHNUM-NEXT:  entry:2278// BEWIDTHNUM-NEXT:    [[F:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 12279// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[F]], align 12280// BEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i322281// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 12282// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i162283// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[F]], align 12284// BEWIDTHNUM-NEXT:    store volatile i16 [[TMP0]], ptr [[F]], align 12285// BEWIDTHNUM-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i322286// BEWIDTHNUM-NEXT:    ret void2287//2288void increment_st11(volatile struct st11 *m) {2289  ++m->f;2290}2291 2292// LE-LABEL: @increment_e_st11(2293// LE-NEXT:  entry:2294// LE-NEXT:    [[E:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 02295// LE-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[E]], align 42296// LE-NEXT:    [[INC:%.*]] = add i8 [[TMP0]], 12297// LE-NEXT:    store volatile i8 [[INC]], ptr [[E]], align 42298// LE-NEXT:    ret void2299//2300// BE-LABEL: @increment_e_st11(2301// BE-NEXT:  entry:2302// BE-NEXT:    [[E:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 02303// BE-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[E]], align 42304// BE-NEXT:    [[INC:%.*]] = add i8 [[TMP0]], 12305// BE-NEXT:    store volatile i8 [[INC]], ptr [[E]], align 42306// BE-NEXT:    ret void2307//2308// LENUMLOADS-LABEL: @increment_e_st11(2309// LENUMLOADS-NEXT:  entry:2310// LENUMLOADS-NEXT:    [[E:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 02311// LENUMLOADS-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[E]], align 42312// LENUMLOADS-NEXT:    [[INC:%.*]] = add i8 [[TMP0]], 12313// LENUMLOADS-NEXT:    store volatile i8 [[INC]], ptr [[E]], align 42314// LENUMLOADS-NEXT:    ret void2315//2316// BENUMLOADS-LABEL: @increment_e_st11(2317// BENUMLOADS-NEXT:  entry:2318// BENUMLOADS-NEXT:    [[E:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 02319// BENUMLOADS-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[E]], align 42320// BENUMLOADS-NEXT:    [[INC:%.*]] = add i8 [[TMP0]], 12321// BENUMLOADS-NEXT:    store volatile i8 [[INC]], ptr [[E]], align 42322// BENUMLOADS-NEXT:    ret void2323//2324// LEWIDTH-LABEL: @increment_e_st11(2325// LEWIDTH-NEXT:  entry:2326// LEWIDTH-NEXT:    [[E:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 02327// LEWIDTH-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[E]], align 42328// LEWIDTH-NEXT:    [[INC:%.*]] = add i8 [[TMP0]], 12329// LEWIDTH-NEXT:    store volatile i8 [[INC]], ptr [[E]], align 42330// LEWIDTH-NEXT:    ret void2331//2332// BEWIDTH-LABEL: @increment_e_st11(2333// BEWIDTH-NEXT:  entry:2334// BEWIDTH-NEXT:    [[E:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 02335// BEWIDTH-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[E]], align 42336// BEWIDTH-NEXT:    [[INC:%.*]] = add i8 [[TMP0]], 12337// BEWIDTH-NEXT:    store volatile i8 [[INC]], ptr [[E]], align 42338// BEWIDTH-NEXT:    ret void2339//2340// LEWIDTHNUM-LABEL: @increment_e_st11(2341// LEWIDTHNUM-NEXT:  entry:2342// LEWIDTHNUM-NEXT:    [[E:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 02343// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[E]], align 42344// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add i8 [[TMP0]], 12345// LEWIDTHNUM-NEXT:    store volatile i8 [[INC]], ptr [[E]], align 42346// LEWIDTHNUM-NEXT:    ret void2347//2348// BEWIDTHNUM-LABEL: @increment_e_st11(2349// BEWIDTHNUM-NEXT:  entry:2350// BEWIDTHNUM-NEXT:    [[E:%.*]] = getelementptr inbounds nuw [[STRUCT_ST11:%.*]], ptr [[M:%.*]], i32 0, i32 02351// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = load volatile i8, ptr [[E]], align 42352// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add i8 [[TMP0]], 12353// BEWIDTHNUM-NEXT:    store volatile i8 [[INC]], ptr [[E]], align 42354// BEWIDTHNUM-NEXT:    ret void2355//2356void increment_e_st11(volatile struct st11 *m) {2357  ++m->e;2358}2359 2360struct st12{2361  int e : 8;2362  int f : 16;2363};2364 2365// LE-LABEL: @read_st12(2366// LE-NEXT:  entry:2367// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42368// LE-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82369// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162370// LE-NEXT:    ret i32 [[BF_ASHR]]2371//2372// BE-LABEL: @read_st12(2373// BE-NEXT:  entry:2374// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42375// BE-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82376// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162377// BE-NEXT:    ret i32 [[BF_ASHR]]2378//2379// LENUMLOADS-LABEL: @read_st12(2380// LENUMLOADS-NEXT:  entry:2381// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42382// LENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82383// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162384// LENUMLOADS-NEXT:    ret i32 [[BF_ASHR]]2385//2386// BENUMLOADS-LABEL: @read_st12(2387// BENUMLOADS-NEXT:  entry:2388// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42389// BENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82390// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162391// BENUMLOADS-NEXT:    ret i32 [[BF_ASHR]]2392//2393// LEWIDTH-LABEL: @read_st12(2394// LEWIDTH-NEXT:  entry:2395// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42396// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82397// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162398// LEWIDTH-NEXT:    ret i32 [[BF_ASHR]]2399//2400// BEWIDTH-LABEL: @read_st12(2401// BEWIDTH-NEXT:  entry:2402// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42403// BEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82404// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162405// BEWIDTH-NEXT:    ret i32 [[BF_ASHR]]2406//2407// LEWIDTHNUM-LABEL: @read_st12(2408// LEWIDTHNUM-NEXT:  entry:2409// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42410// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82411// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162412// LEWIDTHNUM-NEXT:    ret i32 [[BF_ASHR]]2413//2414// BEWIDTHNUM-LABEL: @read_st12(2415// BEWIDTHNUM-NEXT:  entry:2416// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42417// BEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82418// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162419// BEWIDTHNUM-NEXT:    ret i32 [[BF_ASHR]]2420//2421int read_st12(volatile struct st12 *m) {2422  return m->f;2423}2424 2425// LE-LABEL: @store_st12(2426// LE-NEXT:  entry:2427// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42428// LE-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -167769612429// LE-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 2562430// LE-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42431// LE-NEXT:    ret void2432//2433// BE-LABEL: @store_st12(2434// BE-NEXT:  entry:2435// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42436// BE-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -167769612437// BE-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 2562438// BE-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42439// BE-NEXT:    ret void2440//2441// LENUMLOADS-LABEL: @store_st12(2442// LENUMLOADS-NEXT:  entry:2443// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42444// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -167769612445// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 2562446// LENUMLOADS-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42447// LENUMLOADS-NEXT:    ret void2448//2449// BENUMLOADS-LABEL: @store_st12(2450// BENUMLOADS-NEXT:  entry:2451// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42452// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -167769612453// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 2562454// BENUMLOADS-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42455// BENUMLOADS-NEXT:    ret void2456//2457// LEWIDTH-LABEL: @store_st12(2458// LEWIDTH-NEXT:  entry:2459// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42460// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -167769612461// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 2562462// LEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42463// LEWIDTH-NEXT:    ret void2464//2465// BEWIDTH-LABEL: @store_st12(2466// BEWIDTH-NEXT:  entry:2467// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42468// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -167769612469// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 2562470// BEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42471// BEWIDTH-NEXT:    ret void2472//2473// LEWIDTHNUM-LABEL: @store_st12(2474// LEWIDTHNUM-NEXT:  entry:2475// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42476// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -167769612477// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 2562478// LEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42479// LEWIDTHNUM-NEXT:    ret void2480//2481// BEWIDTHNUM-LABEL: @store_st12(2482// BEWIDTHNUM-NEXT:  entry:2483// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42484// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD]], -167769612485// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], 2562486// BEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42487// BEWIDTHNUM-NEXT:    ret void2488//2489void store_st12(volatile struct st12 *m) {2490  m->f = 1;2491}2492 2493// LE-LABEL: @increment_st12(2494// LE-NEXT:  entry:2495// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42496// LE-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82497// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162498// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12499// LE-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42500// LE-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655352501// LE-NEXT:    [[BF_SHL2:%.*]] = shl i32 [[BF_VALUE]], 82502// LE-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -167769612503// LE-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL2]]2504// LE-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42505// LE-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 162506// LE-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 162507// LE-NEXT:    ret void2508//2509// BE-LABEL: @increment_st12(2510// BE-NEXT:  entry:2511// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42512// BE-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82513// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162514// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12515// BE-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42516// BE-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655352517// BE-NEXT:    [[BF_SHL2:%.*]] = shl i32 [[BF_VALUE]], 82518// BE-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -167769612519// BE-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL2]]2520// BE-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42521// BE-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 162522// BE-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 162523// BE-NEXT:    ret void2524//2525// LENUMLOADS-LABEL: @increment_st12(2526// LENUMLOADS-NEXT:  entry:2527// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42528// LENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82529// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162530// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12531// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42532// LENUMLOADS-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655352533// LENUMLOADS-NEXT:    [[BF_SHL2:%.*]] = shl i32 [[BF_VALUE]], 82534// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -167769612535// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL2]]2536// LENUMLOADS-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42537// LENUMLOADS-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 162538// LENUMLOADS-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 162539// LENUMLOADS-NEXT:    ret void2540//2541// BENUMLOADS-LABEL: @increment_st12(2542// BENUMLOADS-NEXT:  entry:2543// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42544// BENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82545// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162546// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12547// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42548// BENUMLOADS-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655352549// BENUMLOADS-NEXT:    [[BF_SHL2:%.*]] = shl i32 [[BF_VALUE]], 82550// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -167769612551// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL2]]2552// BENUMLOADS-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42553// BENUMLOADS-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 162554// BENUMLOADS-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 162555// BENUMLOADS-NEXT:    ret void2556//2557// LEWIDTH-LABEL: @increment_st12(2558// LEWIDTH-NEXT:  entry:2559// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42560// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82561// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162562// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12563// LEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42564// LEWIDTH-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655352565// LEWIDTH-NEXT:    [[BF_SHL2:%.*]] = shl i32 [[BF_VALUE]], 82566// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -167769612567// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL2]]2568// LEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42569// LEWIDTH-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 162570// LEWIDTH-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 162571// LEWIDTH-NEXT:    ret void2572//2573// BEWIDTH-LABEL: @increment_st12(2574// BEWIDTH-NEXT:  entry:2575// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42576// BEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82577// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162578// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12579// BEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42580// BEWIDTH-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655352581// BEWIDTH-NEXT:    [[BF_SHL2:%.*]] = shl i32 [[BF_VALUE]], 82582// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -167769612583// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL2]]2584// BEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42585// BEWIDTH-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 162586// BEWIDTH-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 162587// BEWIDTH-NEXT:    ret void2588//2589// LEWIDTHNUM-LABEL: @increment_st12(2590// LEWIDTHNUM-NEXT:  entry:2591// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42592// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82593// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162594// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12595// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42596// LEWIDTHNUM-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655352597// LEWIDTHNUM-NEXT:    [[BF_SHL2:%.*]] = shl i32 [[BF_VALUE]], 82598// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -167769612599// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL2]]2600// LEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42601// LEWIDTHNUM-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 162602// LEWIDTHNUM-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 162603// LEWIDTHNUM-NEXT:    ret void2604//2605// BEWIDTHNUM-LABEL: @increment_st12(2606// BEWIDTHNUM-NEXT:  entry:2607// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42608// BEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 82609// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 162610// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12611// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42612// BEWIDTHNUM-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655352613// BEWIDTHNUM-NEXT:    [[BF_SHL2:%.*]] = shl i32 [[BF_VALUE]], 82614// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -167769612615// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL2]]2616// BEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42617// BEWIDTHNUM-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 162618// BEWIDTHNUM-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 162619// BEWIDTHNUM-NEXT:    ret void2620//2621void increment_st12(volatile struct st12 *m) {2622  ++m->f;2623}2624 2625// LE-LABEL: @increment_e_st12(2626// LE-NEXT:  entry:2627// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42628// LE-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 242629// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 242630// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12631// LE-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42632// LE-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2552633// LE-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -2562634// LE-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_VALUE]]2635// LE-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42636// LE-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 242637// LE-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 242638// LE-NEXT:    ret void2639//2640// BE-LABEL: @increment_e_st12(2641// BE-NEXT:  entry:2642// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42643// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 242644// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12645// BE-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42646// BE-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2552647// BE-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_VALUE]], 242648// BE-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], 167772152649// BE-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL]]2650// BE-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42651// BE-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 242652// BE-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 242653// BE-NEXT:    ret void2654//2655// LENUMLOADS-LABEL: @increment_e_st12(2656// LENUMLOADS-NEXT:  entry:2657// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42658// LENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 242659// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 242660// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12661// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42662// LENUMLOADS-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2552663// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -2562664// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_VALUE]]2665// LENUMLOADS-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42666// LENUMLOADS-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 242667// LENUMLOADS-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 242668// LENUMLOADS-NEXT:    ret void2669//2670// BENUMLOADS-LABEL: @increment_e_st12(2671// BENUMLOADS-NEXT:  entry:2672// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42673// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 242674// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12675// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42676// BENUMLOADS-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2552677// BENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_VALUE]], 242678// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], 167772152679// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL]]2680// BENUMLOADS-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42681// BENUMLOADS-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 242682// BENUMLOADS-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 242683// BENUMLOADS-NEXT:    ret void2684//2685// LEWIDTH-LABEL: @increment_e_st12(2686// LEWIDTH-NEXT:  entry:2687// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42688// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 242689// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 242690// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12691// LEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42692// LEWIDTH-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2552693// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -2562694// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_VALUE]]2695// LEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42696// LEWIDTH-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 242697// LEWIDTH-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 242698// LEWIDTH-NEXT:    ret void2699//2700// BEWIDTH-LABEL: @increment_e_st12(2701// BEWIDTH-NEXT:  entry:2702// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42703// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 242704// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12705// BEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42706// BEWIDTH-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2552707// BEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_VALUE]], 242708// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], 167772152709// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL]]2710// BEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42711// BEWIDTH-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 242712// BEWIDTH-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 242713// BEWIDTH-NEXT:    ret void2714//2715// LEWIDTHNUM-LABEL: @increment_e_st12(2716// LEWIDTHNUM-NEXT:  entry:2717// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42718// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 242719// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 242720// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12721// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42722// LEWIDTHNUM-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2552723// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -2562724// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_VALUE]]2725// LEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42726// LEWIDTHNUM-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 242727// LEWIDTHNUM-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 242728// LEWIDTHNUM-NEXT:    ret void2729//2730// BEWIDTHNUM-LABEL: @increment_e_st12(2731// BEWIDTHNUM-NEXT:  entry:2732// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[M:%.*]], align 42733// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 242734// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 12735// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[M]], align 42736// BEWIDTHNUM-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 2552737// BEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_VALUE]], 242738// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], 167772152739// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL]]2740// BEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[M]], align 42741// BEWIDTHNUM-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 242742// BEWIDTHNUM-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 242743// BEWIDTHNUM-NEXT:    ret void2744//2745void increment_e_st12(volatile struct st12 *m) {2746  ++m->e;2747}2748 2749struct st13 {2750  char a : 8;2751  int b : 32;2752} __attribute__((packed));2753 2754// LE-LABEL: @increment_b_st13(2755// LE-NEXT:  entry:2756// LE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST13:%.*]], ptr [[S:%.*]], i32 0, i32 12757// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 12758// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 12759// LE-NEXT:    store volatile i32 [[INC]], ptr [[B]], align 12760// LE-NEXT:    ret void2761//2762// BE-LABEL: @increment_b_st13(2763// BE-NEXT:  entry:2764// BE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST13:%.*]], ptr [[S:%.*]], i32 0, i32 12765// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 12766// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 12767// BE-NEXT:    store volatile i32 [[INC]], ptr [[B]], align 12768// BE-NEXT:    ret void2769//2770// LENUMLOADS-LABEL: @increment_b_st13(2771// LENUMLOADS-NEXT:  entry:2772// LENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST13:%.*]], ptr [[S:%.*]], i32 0, i32 12773// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 12774// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 12775// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[B]], align 12776// LENUMLOADS-NEXT:    store volatile i32 [[INC]], ptr [[B]], align 12777// LENUMLOADS-NEXT:    ret void2778//2779// BENUMLOADS-LABEL: @increment_b_st13(2780// BENUMLOADS-NEXT:  entry:2781// BENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST13:%.*]], ptr [[S:%.*]], i32 0, i32 12782// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 12783// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 12784// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[B]], align 12785// BENUMLOADS-NEXT:    store volatile i32 [[INC]], ptr [[B]], align 12786// BENUMLOADS-NEXT:    ret void2787//2788// LEWIDTH-LABEL: @increment_b_st13(2789// LEWIDTH-NEXT:  entry:2790// LEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST13:%.*]], ptr [[S:%.*]], i32 0, i32 12791// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 12792// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 12793// LEWIDTH-NEXT:    store volatile i32 [[INC]], ptr [[B]], align 12794// LEWIDTH-NEXT:    ret void2795//2796// BEWIDTH-LABEL: @increment_b_st13(2797// BEWIDTH-NEXT:  entry:2798// BEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST13:%.*]], ptr [[S:%.*]], i32 0, i32 12799// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 12800// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 12801// BEWIDTH-NEXT:    store volatile i32 [[INC]], ptr [[B]], align 12802// BEWIDTH-NEXT:    ret void2803//2804// LEWIDTHNUM-LABEL: @increment_b_st13(2805// LEWIDTHNUM-NEXT:  entry:2806// LEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST13:%.*]], ptr [[S:%.*]], i32 0, i32 12807// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 12808// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 12809// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[B]], align 12810// LEWIDTHNUM-NEXT:    store volatile i32 [[INC]], ptr [[B]], align 12811// LEWIDTHNUM-NEXT:    ret void2812//2813// BEWIDTHNUM-LABEL: @increment_b_st13(2814// BEWIDTHNUM-NEXT:  entry:2815// BEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST13:%.*]], ptr [[S:%.*]], i32 0, i32 12816// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 12817// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 12818// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[B]], align 12819// BEWIDTHNUM-NEXT:    store volatile i32 [[INC]], ptr [[B]], align 12820// BEWIDTHNUM-NEXT:    ret void2821//2822void increment_b_st13(volatile struct st13 *s) {2823  s->b++;2824}2825 2826struct st14 {2827  char a : 8;2828} __attribute__((packed));2829 2830// LE-LABEL: @increment_a_st14(2831// LE-NEXT:  entry:2832// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12833// LE-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 12834// LE-NEXT:    store volatile i8 [[INC]], ptr [[S]], align 12835// LE-NEXT:    ret void2836//2837// BE-LABEL: @increment_a_st14(2838// BE-NEXT:  entry:2839// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12840// BE-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 12841// BE-NEXT:    store volatile i8 [[INC]], ptr [[S]], align 12842// BE-NEXT:    ret void2843//2844// LENUMLOADS-LABEL: @increment_a_st14(2845// LENUMLOADS-NEXT:  entry:2846// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12847// LENUMLOADS-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 12848// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[S]], align 12849// LENUMLOADS-NEXT:    store volatile i8 [[INC]], ptr [[S]], align 12850// LENUMLOADS-NEXT:    ret void2851//2852// BENUMLOADS-LABEL: @increment_a_st14(2853// BENUMLOADS-NEXT:  entry:2854// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12855// BENUMLOADS-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 12856// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[S]], align 12857// BENUMLOADS-NEXT:    store volatile i8 [[INC]], ptr [[S]], align 12858// BENUMLOADS-NEXT:    ret void2859//2860// LEWIDTH-LABEL: @increment_a_st14(2861// LEWIDTH-NEXT:  entry:2862// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12863// LEWIDTH-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 12864// LEWIDTH-NEXT:    store volatile i8 [[INC]], ptr [[S]], align 12865// LEWIDTH-NEXT:    ret void2866//2867// BEWIDTH-LABEL: @increment_a_st14(2868// BEWIDTH-NEXT:  entry:2869// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12870// BEWIDTH-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 12871// BEWIDTH-NEXT:    store volatile i8 [[INC]], ptr [[S]], align 12872// BEWIDTH-NEXT:    ret void2873//2874// LEWIDTHNUM-LABEL: @increment_a_st14(2875// LEWIDTHNUM-NEXT:  entry:2876// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12877// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 12878// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[S]], align 12879// LEWIDTHNUM-NEXT:    store volatile i8 [[INC]], ptr [[S]], align 12880// LEWIDTHNUM-NEXT:    ret void2881//2882// BEWIDTHNUM-LABEL: @increment_a_st14(2883// BEWIDTHNUM-NEXT:  entry:2884// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12885// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 12886// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[S]], align 12887// BEWIDTHNUM-NEXT:    store volatile i8 [[INC]], ptr [[S]], align 12888// BEWIDTHNUM-NEXT:    ret void2889//2890void increment_a_st14(volatile struct st14 *s) {2891  s->a++;2892}2893 2894struct st15 {2895  short a : 8;2896} __attribute__((packed));2897 2898// LE-LABEL: @increment_a_st15(2899// LE-NEXT:  entry:2900// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12901// LE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i162902// LE-NEXT:    [[INC:%.*]] = add i16 [[BF_CAST]], 12903// LE-NEXT:    [[TMP0:%.*]] = trunc i16 [[INC]] to i82904// LE-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 12905// LE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i162906// LE-NEXT:    ret void2907//2908// BE-LABEL: @increment_a_st15(2909// BE-NEXT:  entry:2910// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12911// BE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i162912// BE-NEXT:    [[INC:%.*]] = add i16 [[BF_CAST]], 12913// BE-NEXT:    [[TMP0:%.*]] = trunc i16 [[INC]] to i82914// BE-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 12915// BE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i162916// BE-NEXT:    ret void2917//2918// LENUMLOADS-LABEL: @increment_a_st15(2919// LENUMLOADS-NEXT:  entry:2920// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12921// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i162922// LENUMLOADS-NEXT:    [[INC:%.*]] = add i16 [[BF_CAST]], 12923// LENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i16 [[INC]] to i82924// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[S]], align 12925// LENUMLOADS-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 12926// LENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i162927// LENUMLOADS-NEXT:    ret void2928//2929// BENUMLOADS-LABEL: @increment_a_st15(2930// BENUMLOADS-NEXT:  entry:2931// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12932// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i162933// BENUMLOADS-NEXT:    [[INC:%.*]] = add i16 [[BF_CAST]], 12934// BENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i16 [[INC]] to i82935// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[S]], align 12936// BENUMLOADS-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 12937// BENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i162938// BENUMLOADS-NEXT:    ret void2939//2940// LEWIDTH-LABEL: @increment_a_st15(2941// LEWIDTH-NEXT:  entry:2942// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12943// LEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i162944// LEWIDTH-NEXT:    [[INC:%.*]] = add i16 [[BF_CAST]], 12945// LEWIDTH-NEXT:    [[TMP0:%.*]] = trunc i16 [[INC]] to i82946// LEWIDTH-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 12947// LEWIDTH-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i162948// LEWIDTH-NEXT:    ret void2949//2950// BEWIDTH-LABEL: @increment_a_st15(2951// BEWIDTH-NEXT:  entry:2952// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12953// BEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i162954// BEWIDTH-NEXT:    [[INC:%.*]] = add i16 [[BF_CAST]], 12955// BEWIDTH-NEXT:    [[TMP0:%.*]] = trunc i16 [[INC]] to i82956// BEWIDTH-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 12957// BEWIDTH-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i162958// BEWIDTH-NEXT:    ret void2959//2960// LEWIDTHNUM-LABEL: @increment_a_st15(2961// LEWIDTHNUM-NEXT:  entry:2962// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12963// LEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i162964// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add i16 [[BF_CAST]], 12965// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = trunc i16 [[INC]] to i82966// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[S]], align 12967// LEWIDTHNUM-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 12968// LEWIDTHNUM-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i162969// LEWIDTHNUM-NEXT:    ret void2970//2971// BEWIDTHNUM-LABEL: @increment_a_st15(2972// BEWIDTHNUM-NEXT:  entry:2973// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 12974// BEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i162975// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add i16 [[BF_CAST]], 12976// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = trunc i16 [[INC]] to i82977// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[S]], align 12978// BEWIDTHNUM-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 12979// BEWIDTHNUM-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i162980// BEWIDTHNUM-NEXT:    ret void2981//2982void increment_a_st15(volatile struct st15 *s) {2983  s->a++;2984}2985 2986struct st16 {2987  int a : 32;2988  int b : 16;2989  int c : 32;2990  int d : 16;2991};2992 2993// LE-LABEL: @increment_a_st16(2994// LE-NEXT:  entry:2995// LE-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[S:%.*]], align 42996// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 12997// LE-NEXT:    store i32 [[INC]], ptr [[S]], align 42998// LE-NEXT:    ret void2999//3000// BE-LABEL: @increment_a_st16(3001// BE-NEXT:  entry:3002// BE-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[S:%.*]], align 43003// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13004// BE-NEXT:    store i32 [[INC]], ptr [[S]], align 43005// BE-NEXT:    ret void3006//3007// LENUMLOADS-LABEL: @increment_a_st16(3008// LENUMLOADS-NEXT:  entry:3009// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[S:%.*]], align 43010// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13011// LENUMLOADS-NEXT:    store i32 [[INC]], ptr [[S]], align 43012// LENUMLOADS-NEXT:    ret void3013//3014// BENUMLOADS-LABEL: @increment_a_st16(3015// BENUMLOADS-NEXT:  entry:3016// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[S:%.*]], align 43017// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13018// BENUMLOADS-NEXT:    store i32 [[INC]], ptr [[S]], align 43019// BENUMLOADS-NEXT:    ret void3020//3021// LEWIDTH-LABEL: @increment_a_st16(3022// LEWIDTH-NEXT:  entry:3023// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[S:%.*]], align 43024// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13025// LEWIDTH-NEXT:    store i32 [[INC]], ptr [[S]], align 43026// LEWIDTH-NEXT:    ret void3027//3028// BEWIDTH-LABEL: @increment_a_st16(3029// BEWIDTH-NEXT:  entry:3030// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[S:%.*]], align 43031// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13032// BEWIDTH-NEXT:    store i32 [[INC]], ptr [[S]], align 43033// BEWIDTH-NEXT:    ret void3034//3035// LEWIDTHNUM-LABEL: @increment_a_st16(3036// LEWIDTHNUM-NEXT:  entry:3037// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[S:%.*]], align 43038// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13039// LEWIDTHNUM-NEXT:    store i32 [[INC]], ptr [[S]], align 43040// LEWIDTHNUM-NEXT:    ret void3041//3042// BEWIDTHNUM-LABEL: @increment_a_st16(3043// BEWIDTHNUM-NEXT:  entry:3044// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[S:%.*]], align 43045// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13046// BEWIDTHNUM-NEXT:    store i32 [[INC]], ptr [[S]], align 43047// BEWIDTHNUM-NEXT:    ret void3048//3049void increment_a_st16(struct st16 *s) {3050  s->a++;3051}3052 3053// LE-LABEL: @increment_b_st16(3054// LE-NEXT:  entry:3055// LE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 13056// LE-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[B]], align 43057// LE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323058// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13059// LE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163060// LE-NEXT:    store i16 [[TMP0]], ptr [[B]], align 43061// LE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323062// LE-NEXT:    ret void3063//3064// BE-LABEL: @increment_b_st16(3065// BE-NEXT:  entry:3066// BE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 13067// BE-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[B]], align 43068// BE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323069// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13070// BE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163071// BE-NEXT:    store i16 [[TMP0]], ptr [[B]], align 43072// BE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323073// BE-NEXT:    ret void3074//3075// LENUMLOADS-LABEL: @increment_b_st16(3076// LENUMLOADS-NEXT:  entry:3077// LENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 13078// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[B]], align 43079// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323080// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13081// LENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163082// LENUMLOADS-NEXT:    store i16 [[TMP0]], ptr [[B]], align 43083// LENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323084// LENUMLOADS-NEXT:    ret void3085//3086// BENUMLOADS-LABEL: @increment_b_st16(3087// BENUMLOADS-NEXT:  entry:3088// BENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 13089// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[B]], align 43090// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323091// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13092// BENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163093// BENUMLOADS-NEXT:    store i16 [[TMP0]], ptr [[B]], align 43094// BENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323095// BENUMLOADS-NEXT:    ret void3096//3097// LEWIDTH-LABEL: @increment_b_st16(3098// LEWIDTH-NEXT:  entry:3099// LEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 13100// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[B]], align 43101// LEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323102// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13103// LEWIDTH-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163104// LEWIDTH-NEXT:    store i16 [[TMP0]], ptr [[B]], align 43105// LEWIDTH-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323106// LEWIDTH-NEXT:    ret void3107//3108// BEWIDTH-LABEL: @increment_b_st16(3109// BEWIDTH-NEXT:  entry:3110// BEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 13111// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[B]], align 43112// BEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323113// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13114// BEWIDTH-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163115// BEWIDTH-NEXT:    store i16 [[TMP0]], ptr [[B]], align 43116// BEWIDTH-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323117// BEWIDTH-NEXT:    ret void3118//3119// LEWIDTHNUM-LABEL: @increment_b_st16(3120// LEWIDTHNUM-NEXT:  entry:3121// LEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 13122// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[B]], align 43123// LEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323124// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13125// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163126// LEWIDTHNUM-NEXT:    store i16 [[TMP0]], ptr [[B]], align 43127// LEWIDTHNUM-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323128// LEWIDTHNUM-NEXT:    ret void3129//3130// BEWIDTHNUM-LABEL: @increment_b_st16(3131// BEWIDTHNUM-NEXT:  entry:3132// BEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 13133// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[B]], align 43134// BEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323135// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13136// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163137// BEWIDTHNUM-NEXT:    store i16 [[TMP0]], ptr [[B]], align 43138// BEWIDTHNUM-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323139// BEWIDTHNUM-NEXT:    ret void3140//3141void increment_b_st16(struct st16 *s) {3142  s->b++;3143}3144 3145// LE-LABEL: @increment_c_st16(3146// LE-NEXT:  entry:3147// LE-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23148// LE-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[C]], align 43149// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13150// LE-NEXT:    store i32 [[INC]], ptr [[C]], align 43151// LE-NEXT:    ret void3152//3153// BE-LABEL: @increment_c_st16(3154// BE-NEXT:  entry:3155// BE-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23156// BE-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[C]], align 43157// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13158// BE-NEXT:    store i32 [[INC]], ptr [[C]], align 43159// BE-NEXT:    ret void3160//3161// LENUMLOADS-LABEL: @increment_c_st16(3162// LENUMLOADS-NEXT:  entry:3163// LENUMLOADS-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23164// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[C]], align 43165// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13166// LENUMLOADS-NEXT:    store i32 [[INC]], ptr [[C]], align 43167// LENUMLOADS-NEXT:    ret void3168//3169// BENUMLOADS-LABEL: @increment_c_st16(3170// BENUMLOADS-NEXT:  entry:3171// BENUMLOADS-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23172// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[C]], align 43173// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13174// BENUMLOADS-NEXT:    store i32 [[INC]], ptr [[C]], align 43175// BENUMLOADS-NEXT:    ret void3176//3177// LEWIDTH-LABEL: @increment_c_st16(3178// LEWIDTH-NEXT:  entry:3179// LEWIDTH-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23180// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[C]], align 43181// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13182// LEWIDTH-NEXT:    store i32 [[INC]], ptr [[C]], align 43183// LEWIDTH-NEXT:    ret void3184//3185// BEWIDTH-LABEL: @increment_c_st16(3186// BEWIDTH-NEXT:  entry:3187// BEWIDTH-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23188// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[C]], align 43189// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13190// BEWIDTH-NEXT:    store i32 [[INC]], ptr [[C]], align 43191// BEWIDTH-NEXT:    ret void3192//3193// LEWIDTHNUM-LABEL: @increment_c_st16(3194// LEWIDTHNUM-NEXT:  entry:3195// LEWIDTHNUM-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23196// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[C]], align 43197// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13198// LEWIDTHNUM-NEXT:    store i32 [[INC]], ptr [[C]], align 43199// LEWIDTHNUM-NEXT:    ret void3200//3201// BEWIDTHNUM-LABEL: @increment_c_st16(3202// BEWIDTHNUM-NEXT:  entry:3203// BEWIDTHNUM-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23204// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i32, ptr [[C]], align 43205// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13206// BEWIDTHNUM-NEXT:    store i32 [[INC]], ptr [[C]], align 43207// BEWIDTHNUM-NEXT:    ret void3208//3209void increment_c_st16(struct st16 *s) {3210  s->c++;3211}3212 3213// LE-LABEL: @increment_d_st16(3214// LE-NEXT:  entry:3215// LE-NEXT:    [[D:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 33216// LE-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[D]], align 43217// LE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323218// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13219// LE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163220// LE-NEXT:    store i16 [[TMP0]], ptr [[D]], align 43221// LE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323222// LE-NEXT:    ret void3223//3224// BE-LABEL: @increment_d_st16(3225// BE-NEXT:  entry:3226// BE-NEXT:    [[D:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 33227// BE-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[D]], align 43228// BE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323229// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13230// BE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163231// BE-NEXT:    store i16 [[TMP0]], ptr [[D]], align 43232// BE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323233// BE-NEXT:    ret void3234//3235// LENUMLOADS-LABEL: @increment_d_st16(3236// LENUMLOADS-NEXT:  entry:3237// LENUMLOADS-NEXT:    [[D:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 33238// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[D]], align 43239// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323240// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13241// LENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163242// LENUMLOADS-NEXT:    store i16 [[TMP0]], ptr [[D]], align 43243// LENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323244// LENUMLOADS-NEXT:    ret void3245//3246// BENUMLOADS-LABEL: @increment_d_st16(3247// BENUMLOADS-NEXT:  entry:3248// BENUMLOADS-NEXT:    [[D:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 33249// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[D]], align 43250// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323251// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13252// BENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163253// BENUMLOADS-NEXT:    store i16 [[TMP0]], ptr [[D]], align 43254// BENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323255// BENUMLOADS-NEXT:    ret void3256//3257// LEWIDTH-LABEL: @increment_d_st16(3258// LEWIDTH-NEXT:  entry:3259// LEWIDTH-NEXT:    [[D:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 33260// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[D]], align 43261// LEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323262// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13263// LEWIDTH-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163264// LEWIDTH-NEXT:    store i16 [[TMP0]], ptr [[D]], align 43265// LEWIDTH-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323266// LEWIDTH-NEXT:    ret void3267//3268// BEWIDTH-LABEL: @increment_d_st16(3269// BEWIDTH-NEXT:  entry:3270// BEWIDTH-NEXT:    [[D:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 33271// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[D]], align 43272// BEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323273// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13274// BEWIDTH-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163275// BEWIDTH-NEXT:    store i16 [[TMP0]], ptr [[D]], align 43276// BEWIDTH-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323277// BEWIDTH-NEXT:    ret void3278//3279// LEWIDTHNUM-LABEL: @increment_d_st16(3280// LEWIDTHNUM-NEXT:  entry:3281// LEWIDTHNUM-NEXT:    [[D:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 33282// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[D]], align 43283// LEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323284// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13285// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163286// LEWIDTHNUM-NEXT:    store i16 [[TMP0]], ptr [[D]], align 43287// LEWIDTHNUM-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323288// LEWIDTHNUM-NEXT:    ret void3289//3290// BEWIDTHNUM-LABEL: @increment_d_st16(3291// BEWIDTHNUM-NEXT:  entry:3292// BEWIDTHNUM-NEXT:    [[D:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 33293// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load i16, ptr [[D]], align 43294// BEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323295// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13296// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163297// BEWIDTHNUM-NEXT:    store i16 [[TMP0]], ptr [[D]], align 43298// BEWIDTHNUM-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323299// BEWIDTHNUM-NEXT:    ret void3300//3301void increment_d_st16(struct st16 *s) {3302  s->d++;3303}3304 3305// LE-LABEL: @increment_v_a_st16(3306// LE-NEXT:  entry:3307// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 43308// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13309// LE-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 43310// LE-NEXT:    ret void3311//3312// BE-LABEL: @increment_v_a_st16(3313// BE-NEXT:  entry:3314// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 43315// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13316// BE-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 43317// BE-NEXT:    ret void3318//3319// LENUMLOADS-LABEL: @increment_v_a_st16(3320// LENUMLOADS-NEXT:  entry:3321// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 43322// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13323// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[S]], align 43324// LENUMLOADS-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 43325// LENUMLOADS-NEXT:    ret void3326//3327// BENUMLOADS-LABEL: @increment_v_a_st16(3328// BENUMLOADS-NEXT:  entry:3329// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 43330// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13331// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[S]], align 43332// BENUMLOADS-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 43333// BENUMLOADS-NEXT:    ret void3334//3335// LEWIDTH-LABEL: @increment_v_a_st16(3336// LEWIDTH-NEXT:  entry:3337// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 43338// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13339// LEWIDTH-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 43340// LEWIDTH-NEXT:    ret void3341//3342// BEWIDTH-LABEL: @increment_v_a_st16(3343// BEWIDTH-NEXT:  entry:3344// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 43345// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13346// BEWIDTH-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 43347// BEWIDTH-NEXT:    ret void3348//3349// LEWIDTHNUM-LABEL: @increment_v_a_st16(3350// LEWIDTHNUM-NEXT:  entry:3351// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 43352// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13353// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[S]], align 43354// LEWIDTHNUM-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 43355// LEWIDTHNUM-NEXT:    ret void3356//3357// BEWIDTHNUM-LABEL: @increment_v_a_st16(3358// BEWIDTHNUM-NEXT:  entry:3359// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 43360// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13361// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[S]], align 43362// BEWIDTHNUM-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 43363// BEWIDTHNUM-NEXT:    ret void3364//3365void increment_v_a_st16(volatile struct st16 *s) {3366  s->a++;3367}3368 3369// LE-LABEL: @increment_v_b_st16(3370// LE-NEXT:  entry:3371// LE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 13372// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[B]], align 43373// LE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323374// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13375// LE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163376// LE-NEXT:    store volatile i16 [[TMP0]], ptr [[B]], align 43377// LE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323378// LE-NEXT:    ret void3379//3380// BE-LABEL: @increment_v_b_st16(3381// BE-NEXT:  entry:3382// BE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 13383// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[B]], align 43384// BE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323385// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13386// BE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163387// BE-NEXT:    store volatile i16 [[TMP0]], ptr [[B]], align 43388// BE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323389// BE-NEXT:    ret void3390//3391// LENUMLOADS-LABEL: @increment_v_b_st16(3392// LENUMLOADS-NEXT:  entry:3393// LENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 13394// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[B]], align 43395// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323396// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13397// LENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163398// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[B]], align 43399// LENUMLOADS-NEXT:    store volatile i16 [[TMP0]], ptr [[B]], align 43400// LENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323401// LENUMLOADS-NEXT:    ret void3402//3403// BENUMLOADS-LABEL: @increment_v_b_st16(3404// BENUMLOADS-NEXT:  entry:3405// BENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 13406// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[B]], align 43407// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323408// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13409// BENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163410// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[B]], align 43411// BENUMLOADS-NEXT:    store volatile i16 [[TMP0]], ptr [[B]], align 43412// BENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323413// BENUMLOADS-NEXT:    ret void3414//3415// LEWIDTH-LABEL: @increment_v_b_st16(3416// LEWIDTH-NEXT:  entry:3417// LEWIDTH-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i32, ptr [[S:%.*]], i32 13418// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[TMP0]], align 43419// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 163420// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 163421// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 13422// LEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[TMP0]], align 43423// LEWIDTH-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655353424// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -655363425// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_VALUE]]3426// LEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[TMP0]], align 43427// LEWIDTH-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 163428// LEWIDTH-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 163429// LEWIDTH-NEXT:    ret void3430//3431// BEWIDTH-LABEL: @increment_v_b_st16(3432// BEWIDTH-NEXT:  entry:3433// BEWIDTH-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i32, ptr [[S:%.*]], i32 13434// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[TMP0]], align 43435// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 163436// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 13437// BEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[TMP0]], align 43438// BEWIDTH-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655353439// BEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_VALUE]], 163440// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], 655353441// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL]]3442// BEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[TMP0]], align 43443// BEWIDTH-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 163444// BEWIDTH-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 163445// BEWIDTH-NEXT:    ret void3446//3447// LEWIDTHNUM-LABEL: @increment_v_b_st16(3448// LEWIDTHNUM-NEXT:  entry:3449// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i32, ptr [[S:%.*]], i32 13450// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[TMP0]], align 43451// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 163452// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 163453// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 13454// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[TMP0]], align 43455// LEWIDTHNUM-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655353456// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -655363457// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_VALUE]]3458// LEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[TMP0]], align 43459// LEWIDTHNUM-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 163460// LEWIDTHNUM-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 163461// LEWIDTHNUM-NEXT:    ret void3462//3463// BEWIDTHNUM-LABEL: @increment_v_b_st16(3464// BEWIDTHNUM-NEXT:  entry:3465// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i32, ptr [[S:%.*]], i32 13466// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[TMP0]], align 43467// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 163468// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 13469// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[TMP0]], align 43470// BEWIDTHNUM-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655353471// BEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_VALUE]], 163472// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], 655353473// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL]]3474// BEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[TMP0]], align 43475// BEWIDTHNUM-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 163476// BEWIDTHNUM-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 163477// BEWIDTHNUM-NEXT:    ret void3478//3479void increment_v_b_st16(volatile struct st16 *s) {3480  s->b++;3481}3482 3483// LE-LABEL: @increment_v_c_st16(3484// LE-NEXT:  entry:3485// LE-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23486// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[C]], align 43487// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13488// LE-NEXT:    store volatile i32 [[INC]], ptr [[C]], align 43489// LE-NEXT:    ret void3490//3491// BE-LABEL: @increment_v_c_st16(3492// BE-NEXT:  entry:3493// BE-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23494// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[C]], align 43495// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13496// BE-NEXT:    store volatile i32 [[INC]], ptr [[C]], align 43497// BE-NEXT:    ret void3498//3499// LENUMLOADS-LABEL: @increment_v_c_st16(3500// LENUMLOADS-NEXT:  entry:3501// LENUMLOADS-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23502// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[C]], align 43503// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13504// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[C]], align 43505// LENUMLOADS-NEXT:    store volatile i32 [[INC]], ptr [[C]], align 43506// LENUMLOADS-NEXT:    ret void3507//3508// BENUMLOADS-LABEL: @increment_v_c_st16(3509// BENUMLOADS-NEXT:  entry:3510// BENUMLOADS-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23511// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[C]], align 43512// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13513// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[C]], align 43514// BENUMLOADS-NEXT:    store volatile i32 [[INC]], ptr [[C]], align 43515// BENUMLOADS-NEXT:    ret void3516//3517// LEWIDTH-LABEL: @increment_v_c_st16(3518// LEWIDTH-NEXT:  entry:3519// LEWIDTH-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23520// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[C]], align 43521// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13522// LEWIDTH-NEXT:    store volatile i32 [[INC]], ptr [[C]], align 43523// LEWIDTH-NEXT:    ret void3524//3525// BEWIDTH-LABEL: @increment_v_c_st16(3526// BEWIDTH-NEXT:  entry:3527// BEWIDTH-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23528// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[C]], align 43529// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13530// BEWIDTH-NEXT:    store volatile i32 [[INC]], ptr [[C]], align 43531// BEWIDTH-NEXT:    ret void3532//3533// LEWIDTHNUM-LABEL: @increment_v_c_st16(3534// LEWIDTHNUM-NEXT:  entry:3535// LEWIDTHNUM-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23536// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[C]], align 43537// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13538// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[C]], align 43539// LEWIDTHNUM-NEXT:    store volatile i32 [[INC]], ptr [[C]], align 43540// LEWIDTHNUM-NEXT:    ret void3541//3542// BEWIDTHNUM-LABEL: @increment_v_c_st16(3543// BEWIDTHNUM-NEXT:  entry:3544// BEWIDTHNUM-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 23545// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[C]], align 43546// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13547// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[C]], align 43548// BEWIDTHNUM-NEXT:    store volatile i32 [[INC]], ptr [[C]], align 43549// BEWIDTHNUM-NEXT:    ret void3550//3551void increment_v_c_st16(volatile struct st16 *s) {3552  s->c++;3553}3554 3555// LE-LABEL: @increment_v_d_st16(3556// LE-NEXT:  entry:3557// LE-NEXT:    [[D:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 33558// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[D]], align 43559// LE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323560// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13561// LE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163562// LE-NEXT:    store volatile i16 [[TMP0]], ptr [[D]], align 43563// LE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323564// LE-NEXT:    ret void3565//3566// BE-LABEL: @increment_v_d_st16(3567// BE-NEXT:  entry:3568// BE-NEXT:    [[D:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 33569// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[D]], align 43570// BE-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323571// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13572// BE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163573// BE-NEXT:    store volatile i16 [[TMP0]], ptr [[D]], align 43574// BE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323575// BE-NEXT:    ret void3576//3577// LENUMLOADS-LABEL: @increment_v_d_st16(3578// LENUMLOADS-NEXT:  entry:3579// LENUMLOADS-NEXT:    [[D:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 33580// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[D]], align 43581// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323582// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13583// LENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163584// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[D]], align 43585// LENUMLOADS-NEXT:    store volatile i16 [[TMP0]], ptr [[D]], align 43586// LENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323587// LENUMLOADS-NEXT:    ret void3588//3589// BENUMLOADS-LABEL: @increment_v_d_st16(3590// BENUMLOADS-NEXT:  entry:3591// BENUMLOADS-NEXT:    [[D:%.*]] = getelementptr inbounds nuw [[STRUCT_ST16:%.*]], ptr [[S:%.*]], i32 0, i32 33592// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[D]], align 43593// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i16 [[BF_LOAD]] to i323594// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13595// BENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i163596// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[D]], align 43597// BENUMLOADS-NEXT:    store volatile i16 [[TMP0]], ptr [[D]], align 43598// BENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i16 [[TMP0]] to i323599// BENUMLOADS-NEXT:    ret void3600//3601// LEWIDTH-LABEL: @increment_v_d_st16(3602// LEWIDTH-NEXT:  entry:3603// LEWIDTH-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i32, ptr [[S:%.*]], i32 33604// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[TMP0]], align 43605// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 163606// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 163607// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 13608// LEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[TMP0]], align 43609// LEWIDTH-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655353610// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -655363611// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_VALUE]]3612// LEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[TMP0]], align 43613// LEWIDTH-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 163614// LEWIDTH-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 163615// LEWIDTH-NEXT:    ret void3616//3617// BEWIDTH-LABEL: @increment_v_d_st16(3618// BEWIDTH-NEXT:  entry:3619// BEWIDTH-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i32, ptr [[S:%.*]], i32 33620// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[TMP0]], align 43621// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 163622// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 13623// BEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[TMP0]], align 43624// BEWIDTH-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655353625// BEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_VALUE]], 163626// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], 655353627// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL]]3628// BEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[TMP0]], align 43629// BEWIDTH-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 163630// BEWIDTH-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 163631// BEWIDTH-NEXT:    ret void3632//3633// LEWIDTHNUM-LABEL: @increment_v_d_st16(3634// LEWIDTHNUM-NEXT:  entry:3635// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i32, ptr [[S:%.*]], i32 33636// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[TMP0]], align 43637// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 163638// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 163639// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 13640// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[TMP0]], align 43641// LEWIDTHNUM-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655353642// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -655363643// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_VALUE]]3644// LEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[TMP0]], align 43645// LEWIDTHNUM-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 163646// LEWIDTHNUM-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 163647// LEWIDTHNUM-NEXT:    ret void3648//3649// BEWIDTHNUM-LABEL: @increment_v_d_st16(3650// BEWIDTHNUM-NEXT:  entry:3651// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i32, ptr [[S:%.*]], i32 33652// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[TMP0]], align 43653// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 163654// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 13655// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[TMP0]], align 43656// BEWIDTHNUM-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 655353657// BEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_VALUE]], 163658// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], 655353659// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL]]3660// BEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[TMP0]], align 43661// BEWIDTHNUM-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 163662// BEWIDTHNUM-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 163663// BEWIDTHNUM-NEXT:    ret void3664//3665void increment_v_d_st16(volatile struct st16 *s) {3666  s->d++;3667}3668// st17 has alignment = 1, the AAPCS defines nothing for the3669// accessing of b, but accessing c should use char3670struct st17 {3671int b : 32;3672char c : 8;3673} __attribute__((packed));3674 3675// LE-LABEL: @increment_v_b_st17(3676// LE-NEXT:  entry:3677// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 13678// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13679// LE-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 13680// LE-NEXT:    ret void3681//3682// BE-LABEL: @increment_v_b_st17(3683// BE-NEXT:  entry:3684// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 13685// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13686// BE-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 13687// BE-NEXT:    ret void3688//3689// LENUMLOADS-LABEL: @increment_v_b_st17(3690// LENUMLOADS-NEXT:  entry:3691// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 13692// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13693// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[S]], align 13694// LENUMLOADS-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 13695// LENUMLOADS-NEXT:    ret void3696//3697// BENUMLOADS-LABEL: @increment_v_b_st17(3698// BENUMLOADS-NEXT:  entry:3699// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 13700// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13701// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[S]], align 13702// BENUMLOADS-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 13703// BENUMLOADS-NEXT:    ret void3704//3705// LEWIDTH-LABEL: @increment_v_b_st17(3706// LEWIDTH-NEXT:  entry:3707// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 13708// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13709// LEWIDTH-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 13710// LEWIDTH-NEXT:    ret void3711//3712// BEWIDTH-LABEL: @increment_v_b_st17(3713// BEWIDTH-NEXT:  entry:3714// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 13715// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13716// BEWIDTH-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 13717// BEWIDTH-NEXT:    ret void3718//3719// LEWIDTHNUM-LABEL: @increment_v_b_st17(3720// LEWIDTHNUM-NEXT:  entry:3721// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 13722// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13723// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[S]], align 13724// LEWIDTHNUM-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 13725// LEWIDTHNUM-NEXT:    ret void3726//3727// BEWIDTHNUM-LABEL: @increment_v_b_st17(3728// BEWIDTHNUM-NEXT:  entry:3729// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[S:%.*]], align 13730// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_LOAD]], 13731// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[S]], align 13732// BEWIDTHNUM-NEXT:    store volatile i32 [[INC]], ptr [[S]], align 13733// BEWIDTHNUM-NEXT:    ret void3734//3735void increment_v_b_st17(volatile struct st17 *s) {3736  s->b++;3737}3738 3739// LE-LABEL: @increment_v_c_st17(3740// LE-NEXT:  entry:3741// LE-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST17:%.*]], ptr [[S:%.*]], i32 0, i32 13742// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[C]], align 13743// LE-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 13744// LE-NEXT:    store volatile i8 [[INC]], ptr [[C]], align 13745// LE-NEXT:    ret void3746//3747// BE-LABEL: @increment_v_c_st17(3748// BE-NEXT:  entry:3749// BE-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST17:%.*]], ptr [[S:%.*]], i32 0, i32 13750// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[C]], align 13751// BE-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 13752// BE-NEXT:    store volatile i8 [[INC]], ptr [[C]], align 13753// BE-NEXT:    ret void3754//3755// LENUMLOADS-LABEL: @increment_v_c_st17(3756// LENUMLOADS-NEXT:  entry:3757// LENUMLOADS-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST17:%.*]], ptr [[S:%.*]], i32 0, i32 13758// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[C]], align 13759// LENUMLOADS-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 13760// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[C]], align 13761// LENUMLOADS-NEXT:    store volatile i8 [[INC]], ptr [[C]], align 13762// LENUMLOADS-NEXT:    ret void3763//3764// BENUMLOADS-LABEL: @increment_v_c_st17(3765// BENUMLOADS-NEXT:  entry:3766// BENUMLOADS-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST17:%.*]], ptr [[S:%.*]], i32 0, i32 13767// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[C]], align 13768// BENUMLOADS-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 13769// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[C]], align 13770// BENUMLOADS-NEXT:    store volatile i8 [[INC]], ptr [[C]], align 13771// BENUMLOADS-NEXT:    ret void3772//3773// LEWIDTH-LABEL: @increment_v_c_st17(3774// LEWIDTH-NEXT:  entry:3775// LEWIDTH-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST17:%.*]], ptr [[S:%.*]], i32 0, i32 13776// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[C]], align 13777// LEWIDTH-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 13778// LEWIDTH-NEXT:    store volatile i8 [[INC]], ptr [[C]], align 13779// LEWIDTH-NEXT:    ret void3780//3781// BEWIDTH-LABEL: @increment_v_c_st17(3782// BEWIDTH-NEXT:  entry:3783// BEWIDTH-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST17:%.*]], ptr [[S:%.*]], i32 0, i32 13784// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[C]], align 13785// BEWIDTH-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 13786// BEWIDTH-NEXT:    store volatile i8 [[INC]], ptr [[C]], align 13787// BEWIDTH-NEXT:    ret void3788//3789// LEWIDTHNUM-LABEL: @increment_v_c_st17(3790// LEWIDTHNUM-NEXT:  entry:3791// LEWIDTHNUM-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST17:%.*]], ptr [[S:%.*]], i32 0, i32 13792// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[C]], align 13793// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 13794// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[C]], align 13795// LEWIDTHNUM-NEXT:    store volatile i8 [[INC]], ptr [[C]], align 13796// LEWIDTHNUM-NEXT:    ret void3797//3798// BEWIDTHNUM-LABEL: @increment_v_c_st17(3799// BEWIDTHNUM-NEXT:  entry:3800// BEWIDTHNUM-NEXT:    [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_ST17:%.*]], ptr [[S:%.*]], i32 0, i32 13801// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[C]], align 13802// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add i8 [[BF_LOAD]], 13803// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[C]], align 13804// BEWIDTHNUM-NEXT:    store volatile i8 [[INC]], ptr [[C]], align 13805// BEWIDTHNUM-NEXT:    ret void3806//3807void increment_v_c_st17(volatile struct st17 *s) {3808  s->c++;3809}3810 3811// A zero bitfield should block, as the C11 specification3812// requires a and b to be different memory positions3813struct zero_bitfield {3814  int a : 8;3815  char : 0;3816  int b : 8;3817};3818 3819// LE-LABEL: @increment_a_zero_bitfield(3820// LE-NEXT:  entry:3821// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 43822// LE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323823// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13824// LE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83825// LE-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 43826// LE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323827// LE-NEXT:    ret void3828//3829// BE-LABEL: @increment_a_zero_bitfield(3830// BE-NEXT:  entry:3831// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 43832// BE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323833// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13834// BE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83835// BE-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 43836// BE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323837// BE-NEXT:    ret void3838//3839// LENUMLOADS-LABEL: @increment_a_zero_bitfield(3840// LENUMLOADS-NEXT:  entry:3841// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 43842// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323843// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13844// LENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83845// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[S]], align 43846// LENUMLOADS-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 43847// LENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323848// LENUMLOADS-NEXT:    ret void3849//3850// BENUMLOADS-LABEL: @increment_a_zero_bitfield(3851// BENUMLOADS-NEXT:  entry:3852// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 43853// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323854// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13855// BENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83856// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[S]], align 43857// BENUMLOADS-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 43858// BENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323859// BENUMLOADS-NEXT:    ret void3860//3861// LEWIDTH-LABEL: @increment_a_zero_bitfield(3862// LEWIDTH-NEXT:  entry:3863// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 43864// LEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323865// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13866// LEWIDTH-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83867// LEWIDTH-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 43868// LEWIDTH-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323869// LEWIDTH-NEXT:    ret void3870//3871// BEWIDTH-LABEL: @increment_a_zero_bitfield(3872// BEWIDTH-NEXT:  entry:3873// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 43874// BEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323875// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13876// BEWIDTH-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83877// BEWIDTH-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 43878// BEWIDTH-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323879// BEWIDTH-NEXT:    ret void3880//3881// LEWIDTHNUM-LABEL: @increment_a_zero_bitfield(3882// LEWIDTHNUM-NEXT:  entry:3883// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 43884// LEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323885// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13886// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83887// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[S]], align 43888// LEWIDTHNUM-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 43889// LEWIDTHNUM-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323890// LEWIDTHNUM-NEXT:    ret void3891//3892// BEWIDTHNUM-LABEL: @increment_a_zero_bitfield(3893// BEWIDTHNUM-NEXT:  entry:3894// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[S:%.*]], align 43895// BEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323896// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13897// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83898// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[S]], align 43899// BEWIDTHNUM-NEXT:    store volatile i8 [[TMP0]], ptr [[S]], align 43900// BEWIDTHNUM-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323901// BEWIDTHNUM-NEXT:    ret void3902//3903void increment_a_zero_bitfield(volatile struct zero_bitfield *s) {3904  s->a++;3905}3906 3907// LE-LABEL: @increment_b_zero_bitfield(3908// LE-NEXT:  entry:3909// LE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD:%.*]], ptr [[S:%.*]], i32 0, i32 13910// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 13911// LE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323912// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13913// LE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83914// LE-NEXT:    store volatile i8 [[TMP0]], ptr [[B]], align 13915// LE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323916// LE-NEXT:    ret void3917//3918// BE-LABEL: @increment_b_zero_bitfield(3919// BE-NEXT:  entry:3920// BE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD:%.*]], ptr [[S:%.*]], i32 0, i32 13921// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 13922// BE-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323923// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13924// BE-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83925// BE-NEXT:    store volatile i8 [[TMP0]], ptr [[B]], align 13926// BE-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323927// BE-NEXT:    ret void3928//3929// LENUMLOADS-LABEL: @increment_b_zero_bitfield(3930// LENUMLOADS-NEXT:  entry:3931// LENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD:%.*]], ptr [[S:%.*]], i32 0, i32 13932// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 13933// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323934// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13935// LENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83936// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[B]], align 13937// LENUMLOADS-NEXT:    store volatile i8 [[TMP0]], ptr [[B]], align 13938// LENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323939// LENUMLOADS-NEXT:    ret void3940//3941// BENUMLOADS-LABEL: @increment_b_zero_bitfield(3942// BENUMLOADS-NEXT:  entry:3943// BENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD:%.*]], ptr [[S:%.*]], i32 0, i32 13944// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 13945// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323946// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13947// BENUMLOADS-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83948// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[B]], align 13949// BENUMLOADS-NEXT:    store volatile i8 [[TMP0]], ptr [[B]], align 13950// BENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323951// BENUMLOADS-NEXT:    ret void3952//3953// LEWIDTH-LABEL: @increment_b_zero_bitfield(3954// LEWIDTH-NEXT:  entry:3955// LEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD:%.*]], ptr [[S:%.*]], i32 0, i32 13956// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 13957// LEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323958// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13959// LEWIDTH-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83960// LEWIDTH-NEXT:    store volatile i8 [[TMP0]], ptr [[B]], align 13961// LEWIDTH-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323962// LEWIDTH-NEXT:    ret void3963//3964// BEWIDTH-LABEL: @increment_b_zero_bitfield(3965// BEWIDTH-NEXT:  entry:3966// BEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD:%.*]], ptr [[S:%.*]], i32 0, i32 13967// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 13968// BEWIDTH-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323969// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13970// BEWIDTH-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83971// BEWIDTH-NEXT:    store volatile i8 [[TMP0]], ptr [[B]], align 13972// BEWIDTH-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323973// BEWIDTH-NEXT:    ret void3974//3975// LEWIDTHNUM-LABEL: @increment_b_zero_bitfield(3976// LEWIDTHNUM-NEXT:  entry:3977// LEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD:%.*]], ptr [[S:%.*]], i32 0, i32 13978// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 13979// LEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323980// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13981// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83982// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[B]], align 13983// LEWIDTHNUM-NEXT:    store volatile i8 [[TMP0]], ptr [[B]], align 13984// LEWIDTHNUM-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323985// LEWIDTHNUM-NEXT:    ret void3986//3987// BEWIDTHNUM-LABEL: @increment_b_zero_bitfield(3988// BEWIDTHNUM-NEXT:  entry:3989// BEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD:%.*]], ptr [[S:%.*]], i32 0, i32 13990// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i8, ptr [[B]], align 13991// BEWIDTHNUM-NEXT:    [[BF_CAST:%.*]] = sext i8 [[BF_LOAD]] to i323992// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_CAST]], 13993// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = trunc i32 [[INC]] to i83994// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[B]], align 13995// BEWIDTHNUM-NEXT:    store volatile i8 [[TMP0]], ptr [[B]], align 13996// BEWIDTHNUM-NEXT:    [[BF_RESULT_CAST:%.*]] = sext i8 [[TMP0]] to i323997// BEWIDTHNUM-NEXT:    ret void3998//3999void increment_b_zero_bitfield(volatile struct zero_bitfield *s) {4000  s->b++;4001}4002 4003// The zero bitfield here does not affect4004struct zero_bitfield_ok {4005  short a : 8;4006  char a1 : 8;4007  long : 0;4008  int b : 24;4009};4010 4011// LE-LABEL: @increment_a_zero_bitfield_ok(4012// LE-NEXT:  entry:4013// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[S:%.*]], align 44014// LE-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 84015// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 84016// LE-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i324017// LE-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[S]], align 44018// LE-NEXT:    [[BF_ASHR2:%.*]] = ashr i16 [[BF_LOAD1]], 84019// LE-NEXT:    [[BF_CAST:%.*]] = trunc i16 [[BF_ASHR2]] to i84020// LE-NEXT:    [[CONV3:%.*]] = sext i8 [[BF_CAST]] to i324021// LE-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV3]], [[CONV]]4022// LE-NEXT:    [[CONV4:%.*]] = trunc i32 [[ADD]] to i84023// LE-NEXT:    [[TMP0:%.*]] = zext i8 [[CONV4]] to i164024// LE-NEXT:    [[BF_LOAD5:%.*]] = load volatile i16, ptr [[S]], align 44025// LE-NEXT:    [[BF_VALUE:%.*]] = and i16 [[TMP0]], 2554026// LE-NEXT:    [[BF_SHL6:%.*]] = shl i16 [[BF_VALUE]], 84027// LE-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD5]], 2554028// LE-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], [[BF_SHL6]]4029// LE-NEXT:    store volatile i16 [[BF_SET]], ptr [[S]], align 44030// LE-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i16 [[BF_VALUE]], 84031// LE-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i16 [[BF_RESULT_SHL]], 84032// LE-NEXT:    [[BF_RESULT_CAST:%.*]] = trunc i16 [[BF_RESULT_ASHR]] to i84033// LE-NEXT:    ret void4034//4035// BE-LABEL: @increment_a_zero_bitfield_ok(4036// BE-NEXT:  entry:4037// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[S:%.*]], align 44038// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_LOAD]], 84039// BE-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i324040// BE-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[S]], align 44041// BE-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD1]], 84042// BE-NEXT:    [[BF_ASHR2:%.*]] = ashr i16 [[BF_SHL]], 84043// BE-NEXT:    [[BF_CAST:%.*]] = trunc i16 [[BF_ASHR2]] to i84044// BE-NEXT:    [[CONV3:%.*]] = sext i8 [[BF_CAST]] to i324045// BE-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV3]], [[CONV]]4046// BE-NEXT:    [[CONV4:%.*]] = trunc i32 [[ADD]] to i84047// BE-NEXT:    [[TMP0:%.*]] = zext i8 [[CONV4]] to i164048// BE-NEXT:    [[BF_LOAD5:%.*]] = load volatile i16, ptr [[S]], align 44049// BE-NEXT:    [[BF_VALUE:%.*]] = and i16 [[TMP0]], 2554050// BE-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD5]], -2564051// BE-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], [[BF_VALUE]]4052// BE-NEXT:    store volatile i16 [[BF_SET]], ptr [[S]], align 44053// BE-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i16 [[BF_VALUE]], 84054// BE-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i16 [[BF_RESULT_SHL]], 84055// BE-NEXT:    [[BF_RESULT_CAST:%.*]] = trunc i16 [[BF_RESULT_ASHR]] to i84056// BE-NEXT:    ret void4057//4058// LENUMLOADS-LABEL: @increment_a_zero_bitfield_ok(4059// LENUMLOADS-NEXT:  entry:4060// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[S:%.*]], align 44061// LENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 84062// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 84063// LENUMLOADS-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i324064// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[S]], align 44065// LENUMLOADS-NEXT:    [[BF_ASHR2:%.*]] = ashr i16 [[BF_LOAD1]], 84066// LENUMLOADS-NEXT:    [[BF_CAST:%.*]] = trunc i16 [[BF_ASHR2]] to i84067// LENUMLOADS-NEXT:    [[CONV3:%.*]] = sext i8 [[BF_CAST]] to i324068// LENUMLOADS-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV3]], [[CONV]]4069// LENUMLOADS-NEXT:    [[CONV4:%.*]] = trunc i32 [[ADD]] to i84070// LENUMLOADS-NEXT:    [[TMP0:%.*]] = zext i8 [[CONV4]] to i164071// LENUMLOADS-NEXT:    [[BF_LOAD5:%.*]] = load volatile i16, ptr [[S]], align 44072// LENUMLOADS-NEXT:    [[BF_VALUE:%.*]] = and i16 [[TMP0]], 2554073// LENUMLOADS-NEXT:    [[BF_SHL6:%.*]] = shl i16 [[BF_VALUE]], 84074// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD5]], 2554075// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], [[BF_SHL6]]4076// LENUMLOADS-NEXT:    store volatile i16 [[BF_SET]], ptr [[S]], align 44077// LENUMLOADS-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i16 [[BF_VALUE]], 84078// LENUMLOADS-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i16 [[BF_RESULT_SHL]], 84079// LENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = trunc i16 [[BF_RESULT_ASHR]] to i84080// LENUMLOADS-NEXT:    ret void4081//4082// BENUMLOADS-LABEL: @increment_a_zero_bitfield_ok(4083// BENUMLOADS-NEXT:  entry:4084// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[S:%.*]], align 44085// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_LOAD]], 84086// BENUMLOADS-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i324087// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i16, ptr [[S]], align 44088// BENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD1]], 84089// BENUMLOADS-NEXT:    [[BF_ASHR2:%.*]] = ashr i16 [[BF_SHL]], 84090// BENUMLOADS-NEXT:    [[BF_CAST:%.*]] = trunc i16 [[BF_ASHR2]] to i84091// BENUMLOADS-NEXT:    [[CONV3:%.*]] = sext i8 [[BF_CAST]] to i324092// BENUMLOADS-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV3]], [[CONV]]4093// BENUMLOADS-NEXT:    [[CONV4:%.*]] = trunc i32 [[ADD]] to i84094// BENUMLOADS-NEXT:    [[TMP0:%.*]] = zext i8 [[CONV4]] to i164095// BENUMLOADS-NEXT:    [[BF_LOAD5:%.*]] = load volatile i16, ptr [[S]], align 44096// BENUMLOADS-NEXT:    [[BF_VALUE:%.*]] = and i16 [[TMP0]], 2554097// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i16 [[BF_LOAD5]], -2564098// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i16 [[BF_CLEAR]], [[BF_VALUE]]4099// BENUMLOADS-NEXT:    store volatile i16 [[BF_SET]], ptr [[S]], align 44100// BENUMLOADS-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i16 [[BF_VALUE]], 84101// BENUMLOADS-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i16 [[BF_RESULT_SHL]], 84102// BENUMLOADS-NEXT:    [[BF_RESULT_CAST:%.*]] = trunc i16 [[BF_RESULT_ASHR]] to i84103// BENUMLOADS-NEXT:    ret void4104//4105// LEWIDTH-LABEL: @increment_a_zero_bitfield_ok(4106// LEWIDTH-NEXT:  entry:4107// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[S:%.*]], align 44108// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 84109// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 84110// LEWIDTH-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i324111// LEWIDTH-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S]], i32 14112// LEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[TMP0]], align 14113// LEWIDTH-NEXT:    [[CONV2:%.*]] = sext i8 [[BF_LOAD1]] to i324114// LEWIDTH-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV2]], [[CONV]]4115// LEWIDTH-NEXT:    [[CONV3:%.*]] = trunc i32 [[ADD]] to i84116// LEWIDTH-NEXT:    store volatile i8 [[CONV3]], ptr [[TMP0]], align 14117// LEWIDTH-NEXT:    ret void4118//4119// BEWIDTH-LABEL: @increment_a_zero_bitfield_ok(4120// BEWIDTH-NEXT:  entry:4121// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[S:%.*]], align 44122// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_LOAD]], 84123// BEWIDTH-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i324124// BEWIDTH-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S]], i32 14125// BEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[TMP0]], align 14126// BEWIDTH-NEXT:    [[CONV2:%.*]] = sext i8 [[BF_LOAD1]] to i324127// BEWIDTH-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV2]], [[CONV]]4128// BEWIDTH-NEXT:    [[CONV3:%.*]] = trunc i32 [[ADD]] to i84129// BEWIDTH-NEXT:    store volatile i8 [[CONV3]], ptr [[TMP0]], align 14130// BEWIDTH-NEXT:    ret void4131//4132// LEWIDTHNUM-LABEL: @increment_a_zero_bitfield_ok(4133// LEWIDTHNUM-NEXT:  entry:4134// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[S:%.*]], align 44135// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i16 [[BF_LOAD]], 84136// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_SHL]], 84137// LEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i324138// LEWIDTHNUM-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S]], i32 14139// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[TMP0]], align 14140// LEWIDTHNUM-NEXT:    [[CONV2:%.*]] = sext i8 [[BF_LOAD1]] to i324141// LEWIDTHNUM-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV2]], [[CONV]]4142// LEWIDTHNUM-NEXT:    [[CONV3:%.*]] = trunc i32 [[ADD]] to i84143// LEWIDTHNUM-NEXT:    [[BF_LOAD4:%.*]] = load volatile i8, ptr [[TMP0]], align 14144// LEWIDTHNUM-NEXT:    store volatile i8 [[CONV3]], ptr [[TMP0]], align 14145// LEWIDTHNUM-NEXT:    ret void4146//4147// BEWIDTHNUM-LABEL: @increment_a_zero_bitfield_ok(4148// BEWIDTHNUM-NEXT:  entry:4149// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i16, ptr [[S:%.*]], align 44150// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i16 [[BF_LOAD]], 84151// BEWIDTHNUM-NEXT:    [[CONV:%.*]] = sext i16 [[BF_ASHR]] to i324152// BEWIDTHNUM-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[S]], i32 14153// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i8, ptr [[TMP0]], align 14154// BEWIDTHNUM-NEXT:    [[CONV2:%.*]] = sext i8 [[BF_LOAD1]] to i324155// BEWIDTHNUM-NEXT:    [[ADD:%.*]] = add nsw i32 [[CONV2]], [[CONV]]4156// BEWIDTHNUM-NEXT:    [[CONV3:%.*]] = trunc i32 [[ADD]] to i84157// BEWIDTHNUM-NEXT:    [[BF_LOAD4:%.*]] = load volatile i8, ptr [[TMP0]], align 14158// BEWIDTHNUM-NEXT:    store volatile i8 [[CONV3]], ptr [[TMP0]], align 14159// BEWIDTHNUM-NEXT:    ret void4160//4161void increment_a_zero_bitfield_ok(volatile struct zero_bitfield_ok *s) {4162  s->a1 += s->a;4163}4164 4165// LE-LABEL: @increment_b_zero_bitfield_ok(4166// LE-NEXT:  entry:4167// LE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD_OK:%.*]], ptr [[S:%.*]], i32 0, i32 14168// LE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 44169// LE-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 84170// LE-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 84171// LE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 14172// LE-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[B]], align 44173// LE-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 167772154174// LE-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -167772164175// LE-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_VALUE]]4176// LE-NEXT:    store volatile i32 [[BF_SET]], ptr [[B]], align 44177// LE-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 84178// LE-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 84179// LE-NEXT:    ret void4180//4181// BE-LABEL: @increment_b_zero_bitfield_ok(4182// BE-NEXT:  entry:4183// BE-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD_OK:%.*]], ptr [[S:%.*]], i32 0, i32 14184// BE-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 44185// BE-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 84186// BE-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 14187// BE-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[B]], align 44188// BE-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 167772154189// BE-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_VALUE]], 84190// BE-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], 2554191// BE-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL]]4192// BE-NEXT:    store volatile i32 [[BF_SET]], ptr [[B]], align 44193// BE-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 84194// BE-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 84195// BE-NEXT:    ret void4196//4197// LENUMLOADS-LABEL: @increment_b_zero_bitfield_ok(4198// LENUMLOADS-NEXT:  entry:4199// LENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD_OK:%.*]], ptr [[S:%.*]], i32 0, i32 14200// LENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 44201// LENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 84202// LENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 84203// LENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 14204// LENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[B]], align 44205// LENUMLOADS-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 167772154206// LENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -167772164207// LENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_VALUE]]4208// LENUMLOADS-NEXT:    store volatile i32 [[BF_SET]], ptr [[B]], align 44209// LENUMLOADS-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 84210// LENUMLOADS-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 84211// LENUMLOADS-NEXT:    ret void4212//4213// BENUMLOADS-LABEL: @increment_b_zero_bitfield_ok(4214// BENUMLOADS-NEXT:  entry:4215// BENUMLOADS-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD_OK:%.*]], ptr [[S:%.*]], i32 0, i32 14216// BENUMLOADS-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 44217// BENUMLOADS-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 84218// BENUMLOADS-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 14219// BENUMLOADS-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[B]], align 44220// BENUMLOADS-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 167772154221// BENUMLOADS-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_VALUE]], 84222// BENUMLOADS-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], 2554223// BENUMLOADS-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL]]4224// BENUMLOADS-NEXT:    store volatile i32 [[BF_SET]], ptr [[B]], align 44225// BENUMLOADS-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 84226// BENUMLOADS-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 84227// BENUMLOADS-NEXT:    ret void4228//4229// LEWIDTH-LABEL: @increment_b_zero_bitfield_ok(4230// LEWIDTH-NEXT:  entry:4231// LEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD_OK:%.*]], ptr [[S:%.*]], i32 0, i32 14232// LEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 44233// LEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 84234// LEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 84235// LEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 14236// LEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[B]], align 44237// LEWIDTH-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 167772154238// LEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -167772164239// LEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_VALUE]]4240// LEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[B]], align 44241// LEWIDTH-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 84242// LEWIDTH-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 84243// LEWIDTH-NEXT:    ret void4244//4245// BEWIDTH-LABEL: @increment_b_zero_bitfield_ok(4246// BEWIDTH-NEXT:  entry:4247// BEWIDTH-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD_OK:%.*]], ptr [[S:%.*]], i32 0, i32 14248// BEWIDTH-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 44249// BEWIDTH-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 84250// BEWIDTH-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 14251// BEWIDTH-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[B]], align 44252// BEWIDTH-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 167772154253// BEWIDTH-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_VALUE]], 84254// BEWIDTH-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], 2554255// BEWIDTH-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL]]4256// BEWIDTH-NEXT:    store volatile i32 [[BF_SET]], ptr [[B]], align 44257// BEWIDTH-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 84258// BEWIDTH-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 84259// BEWIDTH-NEXT:    ret void4260//4261// LEWIDTHNUM-LABEL: @increment_b_zero_bitfield_ok(4262// LEWIDTHNUM-NEXT:  entry:4263// LEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD_OK:%.*]], ptr [[S:%.*]], i32 0, i32 14264// LEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 44265// LEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_LOAD]], 84266// LEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_SHL]], 84267// LEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 14268// LEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[B]], align 44269// LEWIDTHNUM-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 167772154270// LEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], -167772164271// LEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_VALUE]]4272// LEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[B]], align 44273// LEWIDTHNUM-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 84274// LEWIDTHNUM-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 84275// LEWIDTHNUM-NEXT:    ret void4276//4277// BEWIDTHNUM-LABEL: @increment_b_zero_bitfield_ok(4278// BEWIDTHNUM-NEXT:  entry:4279// BEWIDTHNUM-NEXT:    [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_ZERO_BITFIELD_OK:%.*]], ptr [[S:%.*]], i32 0, i32 14280// BEWIDTHNUM-NEXT:    [[BF_LOAD:%.*]] = load volatile i32, ptr [[B]], align 44281// BEWIDTHNUM-NEXT:    [[BF_ASHR:%.*]] = ashr i32 [[BF_LOAD]], 84282// BEWIDTHNUM-NEXT:    [[INC:%.*]] = add nsw i32 [[BF_ASHR]], 14283// BEWIDTHNUM-NEXT:    [[BF_LOAD1:%.*]] = load volatile i32, ptr [[B]], align 44284// BEWIDTHNUM-NEXT:    [[BF_VALUE:%.*]] = and i32 [[INC]], 167772154285// BEWIDTHNUM-NEXT:    [[BF_SHL:%.*]] = shl i32 [[BF_VALUE]], 84286// BEWIDTHNUM-NEXT:    [[BF_CLEAR:%.*]] = and i32 [[BF_LOAD1]], 2554287// BEWIDTHNUM-NEXT:    [[BF_SET:%.*]] = or i32 [[BF_CLEAR]], [[BF_SHL]]4288// BEWIDTHNUM-NEXT:    store volatile i32 [[BF_SET]], ptr [[B]], align 44289// BEWIDTHNUM-NEXT:    [[BF_RESULT_SHL:%.*]] = shl i32 [[BF_VALUE]], 84290// BEWIDTHNUM-NEXT:    [[BF_RESULT_ASHR:%.*]] = ashr i32 [[BF_RESULT_SHL]], 84291// BEWIDTHNUM-NEXT:    ret void4292//4293void increment_b_zero_bitfield_ok(volatile struct zero_bitfield_ok *s) {4294  s->b++;4295}4296